[英]Strange NoClassDefFoundError error when launching a signed release APK with proguard enabled
I am using MultiDex
support in my application with Proguard
enabled. 我在启用了Proguard
应用程序中使用MultiDex
支持。
Everything works fine when I build a APK file WITHOUT proguard enabled and install that on my android phone (I have more than 8 phones so a phone is a non-issue). 当我在没有启动proguard的情况下构建一个APK文件时,一切正常,并在我的Android手机上安装(我有超过8部手机,所以手机不是问题)。
When I build a release APK WITH proguard enabled it crashes on app startup after i install the app. 当我构建一个版本APK WITH proguard启用它在安装应用程序后在应用程序启动时崩溃。
I get the following log messages: 我收到以下日志消息:
I/art: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.app.n>
I/art: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.app.n>
I/art: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.app.o>
I/art: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.app.o>
I/art: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.app.r>
I/art: Rejecting re-init on previously-failed class java.lang.Class<android.support.v4.app.r>
I/art: Rejecting re-init on previously-failed class java.lang.Class<com.facebook.FacebookActivity>
I/art: Rejecting re-init on previously-failed class java.lang.Class<com.facebook.FacebookActivity>
And I see the following RuntimeException
: 我看到以下RuntimeException
:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mycustomapp.app, PID: 6814
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/facebook/FacebookActivity;
at com.facebook.b.aa.c(Validate.java:175)
at com.facebook.p.M(FacebookSdk.java:160)
at com.mycustomapp.app.utils.a.b.a.<init>(CustomFacebookManagerUtility.java:68)
at com.mycustomapp.app.utils.a.b.a.ct(CustomFacebookManagerUtility.java:54)
at com.mycustomapp.app.utils.application.MyCustomApplication.onCreate(MyCustomApplication.java:84)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1021)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5990)
at android.app.ActivityThread.access$1700(ActivityThread.java:205)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1756)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6895)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.facebook.FacebookActivity" on path: DexPathList[[zip file "/data/app/com.mycustomapp.app-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mycustomapp.app-1/lib/arm, /vendor/lib, /system/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.facebook.b.aa.c(Validate.java:175)
at com.facebook.p.M(FacebookSdk.java:160)
at com.mycustomapp.app.utils.a.b.a.<init>(CustomFacebookManagerUtility.java:68)
at com.mycustomapp.app.utils.a.b.a.ct(CustomFacebookManagerUtility.java:54)
at com.mycustomapp.app.utils.application.MyCustomApplication.onCreate(MyCustomApplication.java:84)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1021)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5990)
at android.app.ActivityThread.access$1700(ActivityThread.java:205)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1756)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6895)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)
Suppressed: java.lang.NoClassDefFoundError: com.facebook.FacebookActivity
at dalvik.system.DexFile.defineClassNative(Native Method)
at dalvik.system.DexFile.defineClass(DexFile.java:226)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:219)
at dalvik.system.DexPathList.findClass(DexPathList.java:321)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:54)
... 18 more
Suppressed: java.lang.ClassNotFoundException: com.facebook.FacebookActivity
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 17 more
Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available
At a loss of what could be causing this issue, but through process of elimination Proguard
seems to cause some issues. 不知道可能导致这个问题的原因,但通过消除Proguard
过程似乎会引起一些问题。
I looked at the Facebook SDK docs, and they mentioned I don't need any specific proguard rules for their Facebook SDK. 我查看了Facebook SDK文档,他们提到我不需要为他们的Facebook SDK制定任何特定的proguard规则。
Anybody know how to solve this? 谁知道怎么解决这个问题?
EDIT: Adding in the app's build.gradle
编辑:添加应用程序的build.gradle
buildscript {
repositories {
mavenCentral()
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.+'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath "com.newrelic.agent.android:agent-gradle-plugin:5.4.0"
}
}
apply plugin: 'com.android.application'
apply plugin: 'io.fabric'
apply plugin: 'com.neenbedankt.android-apt'
apply plugin: 'newrelic'
repositories {
maven { url 'https://maven.fabric.io/public' }
}
android {
compileSdkVersion 23
buildToolsVersion "22.0.1"
packagingOptions {
exclude 'META-INF/services/javax.annotation.processing.Processor'
exclude '.readme'
exclude 'LICENSE.txt'
exclude 'README.txt'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/MANIFEST.MF'
}
defaultConfig {
applicationId "com.mycustomapp.app"
minSdkVersion 15
targetSdkVersion 23
versionCode 3
versionName "1.2"
/**
* Enabling multidex support.
*/
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets { main { assets.srcDirs = ['src/main/assets', 'src/main/assets/'] } }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/gcm.jar')
/**
* For MultiDex Support
*/
compile 'com.android.support:multidex:1.0.1'
/**
* android support/compatibility libraries.
*/
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.android.support:cardview-v7:23.1.1'
compile 'com.android.support:palette-v7:23.1.1'
compile 'com.google.android.gms:play-services-gcm:8.3.0'
/**
* facebook sdk
*/
compile 'com.facebook.android:facebook-android-sdk:4.1.0'
compile 'com.squareup.okhttp:okhttp:2.2.0'
compile 'com.squareup.okio:okio:1.1.0'
compile 'com.squareup.retrofit:retrofit:1.9.0'
compile 'com.mcxiaoke.volley:library-aar:1.0.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.github.bumptech.glide:glide:3.6.1'
compile 'com.jakewharton:disklrucache:2.0.2'
compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') {
transitive = true;
}
compile 'com.amplitude:android-sdk:2.2.0'
compile 'com.appboy:android-sdk-ui:1.11.+'
compile 'joda-time:joda-time:2.3'
compile 'com.facebook.conceal:conceal:1.0.1@aar'
compile 'com.newrelic.agent.android:android-agent:5.4.0'
}
# Obfuscation parameters:
#-dontobfuscate
-useuniqueclassmembernames
-keepattributes SourceFile,LineNumberTable
-allowaccessmodification
# Ignore warnings:
#-dontwarn org.mockito.**
#-dontwarn org.junit.**
#-dontwarn com.robotium.**
# Glide
-keep public class * implements com.bumptech.glide.module.GlideModule
-keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
**[] $VALUES;
public *;
}
# Crashlytics
-keep class com.crashlytics.** { *; }
-keep class com.crashlytics.android.**
# Ignore warnings: We are not using DOM model
-dontwarn com.fasterxml.jackson.databind.ext.DOMSerializer
# Ignore warnings: https://github.com/square/okhttp/wiki/FAQs
-dontwarn com.squareup.okhttp.internal.huc.**
# Ignore warnings: https://github.com/square/okio/issues/60
-dontwarn okio.**
# Ignore warnings: https://github.com/square/retrofit/issues/435
-dontwarn com.google.appengine.api.urlfetch.**
# Keep GSON stuff
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.** { *; }
# Keep Jackson stuff
-keep class org.codehaus.** { *; }
-keep class com.fasterxml.jackson.annotation.** { *; }
# Butterknife
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
# Keep these for GSON and Jackson
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod
# Retrofit 1.X
-keep class com.squareup.okhttp.** { *; }
-keep class retrofit.** { *; }
-keep interface com.squareup.okhttp.** { *; }
-dontwarn com.squareup.okhttp.**
-dontwarn okio.**
-dontwarn retrofit.**
-dontwarn rx.**
-keepclasseswithmembers class * {
@retrofit.http.* <methods>;
}
# If in your rest service interface you use methods with Callback argument.
-keepattributes Exceptions
# If your rest service methods throw custom exceptions, because you've defined an ErrorHandler.
-keepattributes Signature
# Joda Time
-dontwarn org.joda.convert.**
-dontwarn org.joda.time.**
-keep class org.joda.time.** { *; }
-keep interface org.joda.time.** { *; }
# Keep Picasso
-keep class com.squareup.picasso.** { *; }
-keepclasseswithmembers class * {
@com.squareup.picasso.** *;
}
-keepclassmembers class * {
@com.squareup.picasso.** *;
}
# RenderScript
-keep class android.support.v8.renderscript.** { *; }
# DBFlow
-keep class com.raizlabs.android.dbflow.config.GeneratedDatabaseHolder
# AppBoy
-dontwarn com.amazon.device.messaging.**
-dontwarn bo.app.**
-dontwarn com.appboy.ui.**
-dontwarn com.google.android.gms.**
-keep class bo.app.** { *; }
-keep class com.appboy.** { *; }
# Android Volley
# see: http://stackoverflow.com/questions/21816643/volley-seems-not-working-after-proguard-obfuscate
-keep class org.apache.commons.logging.** { *; }
# New Relic
-keep class com.newrelic.** { *; }
-dontwarn com.newrelic.**
-keepattributes Exceptions, Signature, InnerClasses
Maybe this is not the best answer but I hope it will help you. 也许这不是最好的答案,但我希望它会对你有所帮助。 as far as the facebook concern when enabling the proguard, yes in the documentation there are no rules for the facebook sdk. 至于facebook关注启用proguard时,是的,在文档中没有facebook sdk的规则。 NOTE : I'm using skd version 4.7.0 'com.facebook.android:facebook-android-sdk:4.7.0'
. 注意:我使用的是skd版本'com.facebook.android:facebook-android-sdk:4.7.0'
:4.7.0 'com.facebook.android:facebook-android-sdk:4.7.0'
。 and I have implement this on my project and and got no problem in it. 我已经在我的项目上实现了这个并且没有任何问题。 and please try this on your project : 请在您的项目上试试这个:
classpath 'com.android.tools.build:gradle:1.3.1'
and below I show you my proguard rules and my build.gradle. 尝试在依赖关系classpath 'com.android.tools.build:gradle:1.3.1'
更改你的根gradle,并在下面向我展示我的proguard规则和我的build.gradle。 hope this can fix your problem. 希望这可以解决你的问题。
this is my rules : 这是我的规则:
-keep class butterknife.** { *; }
-dontwarn butterknife.internal.**
-keep class **$$ViewBinder { *; }
-keepclasseswithmembernames class * {
@butterknife.* <fields>;
}
-keepclasseswithmembernames class * {
@butterknife.* <methods>;
}
-dontwarn com.squareup.okhttp.**
#
# Twitter library - start
#
-dontwarn twitter4j.**
-keep class twitter4j.** { *; }
#
# Twitter library - end
#
# adcolony start
-dontwarn com.immersion.**
-dontnote com.immersion.**
-dontwarn android.webkit.**
#adcolony end
#app billing
-keep class com.android.vending.billing.**
#end app billing
and this is my build.gradle : 这是我的build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "antiboring.game"
minSdkVersion 16
targetSdkVersion 23
versionCode 11
versionName "1.9.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
packagingOptions {
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/services/javax.annotation.processing.Processor'
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
sourceSets {
androidTest {
java.srcDirs = ['androidTest/java']
}
main { java.srcDirs = ['src/main/java', 'src/androidTest/java'] }
}
lintOptions {
disable 'InvalidPackage'
}
}
repositories {
mavenCentral()
}
dependencies {
// App dependencies
compile 'com.android.support:support-annotations:23.1.1'
compile 'com.google.guava:guava:18.0'
//unit testing
androidTestCompile 'com.android.support:support-annotations:23.1.1'
androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
//apps library
compile files('libs/twitter4j-core-4.0.2.jar')
compile fileTree(dir: 'libs', include: ['adcolony.jar'])
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:recyclerview-v7:23.1.1'
compile 'com.android.support:palette-v7:23.1.1'
compile 'com.android.support:design:23.1.1'
compile 'com.balysv.materialmenu:material-menu-toolbar:1.5.4'
compile 'com.google.android.gms:play-services-ads:8.4.0'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.squareup.picasso:picasso:2.5.2'
//social media
compile 'com.facebook.android:facebook-android-sdk:4.7.0'
//animation
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.daimajia.easing:library:1.0.1@aar'
compile 'com.daimajia.androidanimations:library:1.1.3@aar'
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.