我在我的应用程序中使用Proguard进行代码混淆。现在,当我检查Code Obfuscation时,它显示出积极的结果。但是我在真正的Android设备上生成并运行的签名APK正在崩溃。
事实上,当我从Android Studio运行应用程序时,它可以正常工作。
以下是我的build.gradle(Module:app)
代码:
android {
useLibrary 'org.apache.http.legacy'
compileSdkVersion 25
buildToolsVersion "25.0.3"
defaultConfig {
applicationId "com.ms.handyHR"
minSdkVersion 19
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
signingConfigs {
release {
storeFile file("\\handyHR.jks")
storePassword "*****"
keyAlias "sample"
keyPassword "*****"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
而且,这是我的proguard-rules.pro
文件代码:
-ignorewarnings
-keepclassmembers class com.dom925.com.example.MyApp {
public *;
}
-keepattributes SourceFile,LineNumberTable,Signature
-keep class com.parse.*{ *; }
-dontwarn com.parse.**
-dontwarn com.squareup.picasso.**
-keep class * extends com.google.gson.reflect.TypeToken
-keepclasseswithmembernames class * {
native <methods>;
}
-renamesourcefileattribute SourceFile
-keep public class * extends android.app.Application
-keep class * implements java.io.Serializable {
static final long serialVersionUID;
private static final java.io.ObjectStreamField[] serialPersistentFields;
private void writeObject(java.io.ObjectOutputStream);
private void readObject(java.io.ObjectInputStream);
java.lang.Object writeReplace();
java.lang.Object readResolve();
private *;
void set*(***);
*** get*();
}
-keepattributes Signature
-keep class sun.misc.Unsafe { *; }
-keep class com.example.MyApp.** { *; }
另外,需要告诉你的是,我还生成了一个普通的apk文件,并且有效。但是,我在真正的Android设备上运行已签名的APK文件时遇到问题。
以下是我搜索并应用但仍面临同样问题的其他一些Proguard-Rules代码。我尝试了以下代码:
备选方案1:
-dontwarn com.squareup.picasso.**
#### -- OkHttp --
-dontwarn com.squareup.okhttp.internal.**
#### -- Apache Commons --
-dontwarn org.apache.commons.logging.**
-ignorewarnings
-keep class * {
public private *;
}
备选方案2:
-dontwarn **CompatHoneyComb
-dontwarn **CompatHoneyCompMR2
-dontwarn **CompatCreateorHoneyCombMR2
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
请告诉我哪里出错了。
提前致谢!