2017-05-08 117 views
1

我有一个Android应用程序,我刚完成了它的工作,并准备在PlayStore上发布它。但是,为了避免别人直接反编译它,我想添加proguard安全层。Android:如何使用minifyEnabled生成签名APK

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

克服此类问题的最常见解决方案之一是在proguard-rules.txt文件中添加-dontwarn-keep属性。但是,即使我尝试了解所有可用的在线解决方案后,问题仍然存在,我试图在YouTube上找到某些东西,但没有任何用处。有人可以帮帮我吗。这里是应用级格拉德尔文件:

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.我已经尝试了一个完整的清理构建和重建。

回答

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.** { *; } 

这将减少你的错误数量。在解决所有问题之前添加更多的保留语句。

+1

谢谢你的解决方案,它的工作。我还必须添加以下几行:'--ignorewarnings -keep class * { public private *; }' –

相关问题