Android studio 的 AppcompatActivity 错误

AppcompatActivity Error with Android studio

我在使用 Android studio 构建 android 应用程序时遇到此错误:

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')
}

首先,将您的库更新到最新版本。 接下来,清理并重建您的项目。

此外,如果这是您包含的库的完整列表:

    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'

在 build.gradle 中将您的支持库更新为 23,将您的 compileSdkVersion 更新为 23

compileSdkVersion 23

...

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

然后将您的项目与 gradle 个文件同步。

此外,Google Play 服务现在 7.8.0

问题是您的 TourActivity 使用的 class 只能从 API 级别 21 PersistableBundle 获得。这里的问题是为什么要这样做。

记住你的新 activity 也必须继承自 AppCompatActivity

快速提问,您是否在有问题的 activity 中覆盖了 public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)?如果您正在这样做,您可能正在保存对 PersistableBundle 的引用,这在 device/emulator 中不可用。如果您在那里什么都不做,请尝试将其删除或对其进行评论以尝试...

您遇到此问题是因为您正在尝试使用 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);
    }
}

检查您在 TourActivity 中使用 PersistableBundle 的位置并将其删除或使用 activity.

的代码更新您的答案

您需要像这样更改您的应用 build.gradle

compile 'com.android.support:appcompat-v7:22.1.0+' 

compile 'com.android.support:appcompat-v7:20.0.0'

这是一个俗气的解决方案,但它确实对我有用!我手动创建了缺少库的所需路径:

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

并添加了 here and here 中丢失的两个 .jar 文件。 Android工作室终于找到了执行Java需要的依赖。

1.Just 更改您的依赖项以显示在 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.Then 它将显示同步 gradle,然后同步 build.gradle 以更新更改。

简单 , 转到 文件-> 使缓存无效并重新启动。 谢谢