Android:如何使用minifyEnabled生成签名的APK

时间:2017-05-08 17:39:30

标签: java android android-studio obfuscation android-proguard

我有一个Android应用程序,我刚刚完成它并准备在PlayStore上发布它。但是,为了避免其他人直接反编译它,我想添加proguard安全层。

我将minifyEnabled设置为' true'后,我尝试生成签名的apk。然而,android studio开始出现几个错误,有一次计数超过800错误。我尝试在线搜索解决方案并且知道这个问题的主要原因可能是我添加到我的应用程序中的所有第三方库。

克服此类问题的最常用解决方案之一是在-dontwarn文件中添加-keepproguard-rules.txt属性。但是,即使在我尝试使用在线提供的所有解决方案之后问题仍然存在,我试图在youtube上找到一些东西但却没有任何用处。有人可以帮帮我吗。这是app level gradel文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.0"
    defaultConfig {
        applicationId "com.example.android.jsontutorial"
        minSdkVersion 16
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner                     "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.1.0'
    compile 'com.android.support:design:25.1.0'
    compile 'com.android.support:support-v4:25.1.0'
    compile 'com.android.volley:volley:1.0.0'
    compile 'com.squareup.picasso:picasso:2.5.2'
    compile 'com.android.support:recyclerview-v7:25.1.0'
    compile 'com.android.support:cardview-v7:25.1.0'
    //compile 'com.google.firebase:firebase-core:10.2.4'
    compile 'com.google.firebase:firebase-ads:10.0.1'
    testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.gms.google-services'

以下是proguard-rules.txt文件:

# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in C:\Users\Priyansh\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class tvName to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

 -dontwarn     com.squareup.picasso.**
 -dontwarn     com.android.support.**
 -dontwarn     com.android.support.**
 -dontwarn     com.android.support.**
 -dontwarn     com.android.volley.**
 -dontwarn     com.android.support.**
 -dontwarn     com.android.support.**
 -dontwarn     com.google.firebase.**

以下是我在gradle控制台中找到的看似有用的信息:

    Warning: there were 1341 unresolved references to classes or interfaces.
         You may need to add missing library jars or update their versions.
         If your code works fine without the missing classes, you can suppress
         the warnings with '-dontwarn' options.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)
Warning: there were 83 unresolved references to program class members.
         Your input classes appear to be inconsistent.
         You may need to recompile the code.
         (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedprogramclassmember)

Warning: Exception while processing task java.io.IOException: Please correct the above warnings first.
:app:transformClassesAndResourcesWithProguardForRelease FAILED

如果您想查看详细警告,请here

有人可以帮我解决这个问题,我知道总是解决方案太简单了,比如简单的ReBuild,但是,请帮助!!

P.S。我已经尝试过完全干净的构建和重建。

1 个答案:

答案 0 :(得分:2)

将这些添加到您的proguard-rules.txt:

-keep class java.awt.event.** { *; }
-keep class org.apache.** { *; }
-keep class org.gradle.** { *; }
-keep class groovy.lang.** { *; }
-keep class javax.swing.** { *; }

这可以减少您的错误数量。在解决所有问题之前添加更多keep语句。