web-dev-qa-db-ja.com

Android studioでのAppcompatActivityエラー

Android application with Android studio:

24192-24192/com.mkapp.apps.demo1 W/dalvikvm﹕ VFY: unable to find class referenced in signature (Landroid/os/PersistableBundle;)
08-20 10:53:23.605  24192-24192/com.mkapp.apps.demo1 I/dalvikvm﹕ Could not find method Android.support.v7.app.AppCompatActivity.onCreate, referenced from method com.mkapp.apps.demo1.TourActivity.onCreate
08-20 10:53:23.605  24192-24192/com.mkapp.apps.demo1 W/dalvikvm﹕ VFY: unable to resolve virtual method 8393: Landroid/support/v7/app/AppCompatActivity;.onCreate (Landroid/os/Bundle;Landroid/os/PersistableBundle;)V
08-20 10:53:23.605  24192-24192/com.mkapp.apps.demo1 D/dalvikvm﹕ VFY: replacing opcode 0x6f at 0x0000

私の依存関係:

    compile 'com.Android.support:support-v4:22.2.1'
    compile 'com.google.Android.gms:play-services:7.3.0'
    compile 'com.Android.support:appcompat-v7:22.1.0+'
    compile 'com.Android.support:multidex:1.0.1'

助けてくれて本当にありがとうございます

appcompatActivityを継承する古いアクティビティは正常に機能します。しかし、新しいものを作成すると、エラーが発生します。ここに私のgradle.buildがあります:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 23
    buildToolsVersion "23.0.0"

    defaultConfig {
        applicationId "com.mkapp.apps.demo1"
        minSdkVersion 10
        targetSdkVersion 22
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
        multiDexEnabled true
    }
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }
    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(':photocollage')
    compile project(':gWFacebookSDK')
//    compile project(':listViewAnimation')
    compile 'com.google.Android.gms:play-services:7.3.0'
    compile 'com.Android.support:appcompat-v7:22.1.0'

    compile 'com.Android.support:multidex:1.0.1'
    compile files('libs/aws-Android-sdk-2.1.0-core.jar')
    compile files('libs/aws-Android-sdk-2.1.0-sns.jar')
    compile files('libs/dexmaker-1.1.jar')
    compile files('libs/dexmaker-mockito-1.1-custom.jar')
//    compile files('libs/listviewanimations_lib-core_3.1.0.jar')
    compile files('libs/signpost-commonshttp4-1.2.1.1.jar')
    compile files('libs/signpost-core-1.2.1.1.jar')
    compile files('libs/signpost-jetty6-1.2.1.1.jar')
    compile files('libs/Twitter4j-core-4.0.1.jar')
    compile files('libs/universal-image-loader-1.9.3.jar')
}
14
Linh Nguyen

onCreate(Bundle savedInstanceState、PersistableBundle persistentState) を使用しようとしているため、この問題が発生しますが、このメソッドはAPIレベル21からのみ使用可能です。

Android 4.4でこのサンプルコードを使用して問題を再現できます。

public class TourActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, new PersistableBundle());
    }

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    }
}

そして、PersistableBundleのすべての出現を削除することで問題が解決されます。

public class TourActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

PersistableBundleTourActivityを使用している場所を確認して削除するか、アクティビティのコードで回答を更新します。

16

Build.gradleで、サポートライブラリを23に更新し、compileSdkVersion23に更新します。

compileSdkVersion 23

...

compile 'com.Android.support:support-v4:23.0.0'
compile 'com.Android.support:appcompat-v7:23.0.0'

次に、プロジェクトをgradleファイルと同期します。

また、Google Play Servicesは7.8.0になりました

12
Jared Rummler

問題は、TourActivityがAPIレベル21 PersistableBundle からのみ使用可能なクラスを使用していることです。ここでの質問は、なぜそうするのかということです。

新しいアクティビティもAppCompatActivityから継承する必要があることを忘れないでください。

簡単な質問、問題のあるアクティビティでpublic void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)をオーバーライドしていますか?それをしている場合、おそらくデバイス/エミュレータで利用できないPersistableBundleへの参照を保存しています。そこで何もしていない場合は削除するか、コメントしてみてください...

5
Arturo

まず、ライブラリを最新バージョンに更新します。次に、プロジェクトをクリーンアップして再構築します。

また、これが含めるライブラリの完全なリストである場合:

    compile 'com.Android.support:support-v4:22.2.1'
    compile 'com.google.Android.gms:play-services:7.3.0'
    compile 'com.Android.support:appcompat-v7:22.1.0+'
    compile 'com.Android.support:multidex:1.0.1'

実際にこれを含める必要はありません

    compile 'com.Android.support:multidex:1.0.1'
3
Ivan V

単に、Go To theFile->キャッシュを無効にして再起動します。ありがとう

2
Abhijeet Singh

これは安っぽい解決策ですが、実際には私にとってはうまくいきました!不足しているライブラリへの必要なパスを手動で作成しました:

 C:\Users\spomerleau\AppData\Local\Android\Sdk\extras\Android\support\v7\appcompat\libs

here および here の2つの欠落した.jarファイルを追加しました。 Android studioは、Javaの実行に必要な依存関係をようやく見つけました。

0
sebseb24

1.依存関係を変更して、build.gradleに表示します-

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    testImplementation 'junit:junit:4.12'
    implementation 'com.Android.support:support-v4:23.4.0'
    implementation 'com.Android.support:appcompat-v7:23.4.0'
    implementation 'com.Android.support:support-annotations:27.1.1'
}

2.その後、gradleを同期するように表示され、build.gradleを同期して変更を更新します。

0
arpit1714