【问题标题】:Android : Getting NoClassDefFoundError for AndroidUtilsAndroid : 为 AndroidUtils 获取 NoClassDefFoundError
【发布时间】:2015-12-14 18:08:35
【问题描述】:

我正在使用 Android Studio 开发一个启用 GCM、需要 google 登录并使用 google 地图的应用。我也为谷歌应用引擎合并了端点。现在,当我尝试调用端点时出现 noclassfound 错误。

以下是我的应用程序 gradle 文件

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {


    dexOptions {
        javaMaxHeapSize "4g"
    }
}
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
    applicationId "my.application.com"
    minSdkVersion 15
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
    multiDexEnabled true
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
dexOptions {
    incremental true
}
}

dependencies {
compile 'com.android.support:multidex:1.0.0'
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.facebook.android:facebook-android-sdk:4.6.0'

compile project(path: ':backend', configuration: 'android-endpoints')

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:percent:23.1.1'
compile 'com.google.android.gms:play-services-identity:8.3.0'
compile 'com.google.android.gms:play-services-gcm:8.3.0'
compile 'com.google.android.gms:play-services:8.3.0'
}

现在,当我尝试访问 ASyntask 中的端点时,我收到 noclassdeffound 错误:

 Registration.Builder builder = new Registration.Builder(AndroidHttp.newCompatibleTransport(),
                new AndroidJsonFactory(), null)
                // options for running against local devappserver
                // - 10.0.2.2 is localhost's IP address in Android emulator
                // - turn off compression when running against local devappserver
                .setRootUrl("http://192.168.1.4:8080/_ah/api")
                .setGoogleClientRequestInitializer(new GoogleClientRequestInitializer() {
                    @Override
                    public void initialize(AbstractGoogleClientRequest<?> abstractGoogleClientRequest) throws IOException {
                        abstractGoogleClientRequest.setDisableGZipContent(true);
                    }
                });

确切的错误堆栈如下:

java.lang.RuntimeException: An error occured while executingdoInBackground()
                                                                        at android.os.AsyncTask$3.done(AsyncTask.java:299)
                                                                        at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
                                                                        at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
                                                                        at java.util.concurrent.FutureTask.run(FutureTask.java:239)
                                                                        at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
                                                                        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
                                                                        at java.lang.Thread.run(Thread.java:856)
                                                                     Caused by: **java.lang.NoClassDefFoundError: com.google.api.client.extensions.android.AndroidUtils**
                                                                        at com.google.api.client.extensions.android.http.AndroidHttp.newCompatibleTransport(AndroidHttp.java:54)

我已经尝试了网络上给出的大部分建议。 - 重建 - 删除所有 gradle 缓存 - 重启工作室

由于我是 android 和 Java 世界的新手,任何详细的帮助将不胜感激。

【问题讨论】:

  • 我看到您为您的应用启用了多 dex:是否正确设置了多 dex 支持库?你是否在清单中设置了正确的应用程序类,或者你有自己的应用程序子类?
  • @fasteque 不,我没有对与 dex 相关的清单做任何事情。请在此处建议要执行的操作。
  • 好的,你是从其他地方得到这个代码的吗?无论如何,您有两种方法可以检查问题是否是由于多 dex 引起的:禁用它或正确设置它。对于后者,您可以在这里查看:developer.android.com/tools/building/multidex.html#mdex-gradle.

标签: android google-app-engine android-studio google-cloud-messaging google-play-services


【解决方案1】:

您缺少包含以下内容的参考:

com.google.api.client.http.apache.ApacheHttpTransport

请补充:

compile 'com.google.api-client:google-api-client'

查看信息:https://github.com/google/google-api-java-client

非常重要:将项目与 gradle 文件同步!。

【讨论】:

  • 尝试了您的建议,但结果相同。
【解决方案2】:

我仍然不清楚问题的根本原因。但问题已通过以下步骤解决:

  1. 删除了所有与 dex 相关的内容。
  2. 从 gradle 中删除了 'com.google.android.gms:play-services:8.3.0'
  3. 添加了单个依赖项,例如 'com.google.android.gms:play-services-plus:8.3.0' 'com.google.android.gms:play-services-maps:8.3.0' 'com.google.android.gms:play-services-location:8.3.0'

  4. 还添加了 @Elenasys 建议的依赖项。但这并不能单独解决问题。

  5. 重建整个应用程序。

【讨论】:

  • SVJ,您是否尝试过“使用 gradle 文件同步项目”?我认为这就足够了。
  • @Elenasys 我确实尝试过多次。但这并没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-26
  • 2013-04-19
  • 2011-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多