我在我的项目中使用multidex enabled
。当我使用 minifyEnabled true 时,出现此错误
FAILURE: Build failed with an exception.
任务':app:transformClassesAndResourcesWithProguardForRelease'的执行失败。
这是我的gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
useLibrary 'org.apache.http.legacy'
defaultConfig {
applicationId "com.app.example"
minSdkVersion 15
targetSdkVersion 25
versionCode 9
versionName "1.8"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
dexOptions {
preDexLibraries = false
}
productFlavors {
}
lintOptions {
checkReleaseBuilds false
}
}
repositories {
maven {
url 'https://dl.bintray.com/ayz4sci/maven/'
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:25.1.1'
compile 'com.android.support:appcompat-v7:25.1.1'
compile 'com.android.support:multidex:1.0.1'
}
-dontwarn com.squareup.picasso.**
-dontwarn com.vungle.**
-dontwarn twitter4j.**
和它的工作,但我正在使用d-max / spots-dialog,并且在签名apk后未显示
也可以使用-keep class解决。
最佳答案
如果使用minify,则默认情况下会启用代码混淆。
它还会删除未使用的方法。我从Google支持库中获取了20k多种方法,当我使用minify时,它的使用时间减少到了大约5k左右。因此,您必须为应用程序修改proguard-rules
,以告诉代码混淆器不要删除您的类。
例如 :
-keep class com.app.example.** {*;}
-dontwarn com.app.example.**
# Ensure annotations are kept for runtime use.
-keepattributes *Annotation*
# Don't remove any GreenRobot classes
-keepnames class org.greenrobot.** {*;}
# Don't remove any methods that have the @Subscribe annotation
-keepclassmembers class ** {
@de.greenrobot.event.Subscribe <methods>;
}
您可以通过阅读错误日志找到所需的类,它通常会在“需要类x但未找到”行中说些什么
关于android - 如何制作难以逆向工程的安全签名APK?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42688516/