android - 签名APK在使用Proguard后崩溃

时间:2017-09-13 10:18:49

标签: android android-studio apk android-proguard

我在我的应用程序中使用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);
}

请告诉我哪里出错了。

提前致谢!

0 个答案:

没有答案