android studio 代码混淆错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android studio 代码混淆错误相关的知识,希望对你有一定的参考价值。

Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
> java.io.IOException: Please correct the above warnings first.

设置了log输出无效

1,androidstudio1.3之后的版本就没有GenerateSignedAPK—RunProGuard这个选项了!要在build.grandle把minifyEnabled改成Ture就可以了!minifyEnabledtrue下面是我使用的代码:#指定代码的压缩级别-optimizationpasses5#包明不混合大小写-dontusemixedcaseclassnames#不去忽略非公共的库类-dontskipnonpubliclibraryclasses#优化不优化输入的类文件-dontoptimize#预校验-dontpreverify#混淆时是否记录日志-verbose#混淆时所采用的算法-optimizations!code/simplification/arithmetic,!field/*,!class/merging/*#保护注解-keepattributes*Annotation*#保持哪些类不被混淆#-keeppublicclass*extendsandroid.app.Fragment#如果有引用v4包可以添加下面这行-keeppublicclass*extendsandroid.support.v4.app.Fragment#忽略警告-ignorewarning#####################记录生成的日志数据,gradlebuild时在本项目根目录输出#################apk包内所有class的内部结构-dumpclass_files.txt#未混淆的类和成员-printseedsseeds.txt#列出从apk中删除的代码-printusageunused.txt#混淆前后的映射-printmappingmapping.txt#####################记录生成的日志数据,gradlebuild时在本项目根目录输出-end################################混淆保护自己项目的部分代码以及引用的第三方jar包library##########################-libraryjarslibs/xUtils-2.6.14.jar#-libraryjarslibs/alipaysdk.jar#-libraryjarslibs/alipaysecsdk.jar#-libraryjarslibs/alipayutdid.jar#-libraryjarslibs/wup-1.0.0-SNAPSHOT.jar#-libraryjarslibs/weibosdkcore.jar#三星应用市场需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar#-libraryjarslibs/sdk-v1.0.0.jar#-libraryjarslibs/look-v1.0.1.jar#我是以libaray的形式引用了一个图片加载框架,如果不想混淆keep掉-keepclasscom.nostra13.universalimageloader.***;#忽略警告-dontwarncom.veidy.mobile.common.**#保留一个完整的包-keepclasscom.veidy.mobile.common.***;#如果引用了v4或者v7包-dontwarnandroid.support.**############混淆保护自己项目的部分代码以及引用的第三方jar包library-end###################-keeppublicclass*extendsandroid.view.View#public(android.content.Context);#public(android.content.Context,android.util.AttributeSet);#public(android.content.Context,android.util.AttributeSet,int);#publicvoidset*();##保持native方法不被混淆-keepclasseswithmembernamesclass*native;#保持自定义控件类不被混淆#-keepclasseswithmembersclass*#public(android.content.Context,android.util.AttributeSet);##保持自定义控件类不被混淆#-keepclasseswithmembersclass*#public(android.content.Context,android.util.AttributeSet,int);##保持自定义控件类不被混淆#-keepclassmembersclass*extendsandroid.app.Activity#publicvoid*(android.view.View);##保持Parcelable不被混淆-keepclass*implementsandroid.os.Parcelablepublicstaticfinalandroid.os.Parcelable$Creator*;#保持Serializable不被混淆-keepnamesclass*implementsjava.io.Serializable#保持Serializable不被混淆并且enum类也不被混淆-keepclassmembersclass*implementsjava.io.SerializablestaticfinallongserialVersionUID;privatestaticfinaljava.io.ObjectStreamField[]serialPersistentFields;!static!transient;!private;!private;privatevoidwriteObject(java.io.ObjectOutputStream);privatevoidreadObject(java.io.ObjectInputStream);java.lang.ObjectwriteReplace();java.lang.ObjectreadResolve();#保持枚举enum类不被混淆如果混淆报错,建议直接使用上面的-keepclassmembersclass*implementsjava.io.Serializable即可#-keepclassmembersenum*#publicstatic**[]values();#publicstatic**valueOf(java.lang.String);#-keepclassmembersclass*publicvoid*ButtonClicked(android.view.View);#不混淆资源类-keepclassmembersclass**.R$*publicstatic;#避免混淆泛型如果混淆报错建议关掉#–keepattributesSignature#移除log测试了下没有用还是建议自己定义一个开关控制是否输出日志-assumenosideeffectsclassandroid.util.LogpublicstaticbooleanisLoggable(java.lang.String,int);publicstaticintv();publicstaticinti();publicstaticintw();publicstaticintd();publicstaticinte(); 参考技术A 1,在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的proguard-project.txtbuildTypesreleasesigningConfigsigningConfigs.releaseminifyEnabledtrueproguardFilesgetDefaultProguardFile(‘proguard-android.txt‘),‘proguard-rules.pro‘2,在proguard-rules.pro中加入以下代码,基本可以涵盖所有-optimizationpasses5#指定代码的压缩级别-dontusemixedcaseclassnames#是否使用大小写混合-dontpreverify#混淆时是否做预校验-verbose#混淆时是否记录日志-optimizations!code/simplification/arithmetic,!field/*,!class/merging/*#混淆时所采用的算法-keeppublicclass*extendsandroid.app.Activity#保持哪些类不被混淆-keeppublicclass*extendsandroid.app.Application#保持哪些类不被混淆-keeppublicclass*extendsandroid.app.Service#保持哪些类不被混淆-keeppublicclass*extendsandroid.content.BroadcastReceiver#保持哪些类不被混淆-keeppublicclass*extendsandroid.content.ContentProvider#保持哪些类不被混淆-keeppublicclass*extendsandroid.app.backup.BackupAgentHelper#保持哪些类不被混淆-keeppublicclass*extendsandroid.preference.Preference#保持哪些类不被混淆-keepclasseswithmembernamesclass*#保持native方法不被混淆native;-keepclasseswithmembersclass*#保持自定义控件类不被混淆public(android.content.Context,android.util.AttributeSet);-keepclasseswithmembersclass*#保持自定义控件类不被混淆public(android.content.Context,android.util.AttributeSet,int);-keepclassmembersclass*extendsandroid.app.Activity#保持自定义控件类不被混淆publicvoid*(android.view.View);-keepclassmembersenum*#保持枚举enum类不被混淆publicstatic**[]values();publicstatic**valueOf(java.lang.String);-keepclass*implementsandroid.os.Parcelable#保持Parcelable不被混淆publicstaticfinalandroid.os.Parcelable$Creator*; 参考技术B 吾正好碰到此问题,经过一番搜索,在stackoverflow找到一个牛人的办法,顺利解决。希望能对各位有所帮助:
修改proguard-project.txt,增加以下内容:
#### -- Picasso --
-dontwarn com.squareup.picasso.**

#### -- OkHttp --
-dontwarn com.squareup.okhttp.internal.**

#### -- Apache Commons --
-dontwarn org.apache.commons.logging.**

-ignorewarnings
-keep class *
public private *;
参考技术C 我也遇到此问题了,试了一下,我的app文件夹下不是proguard-rules.txt文件,是proguard-rules.pro,所以在build.gradle里面把txt改成pro,竟然就可以了。也不知道是不是新版本的问题 参考技术D MD,我也遇到这个问题了,你的解决没有?追问

无意间结局了此问题

Android Studio代码混淆添加

出处:Android代码混淆技巧》


  因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆。SDK已经集成了ProGuard工具,开发者可以从SDK目录下的\\tools\\proguard目录中进行查看。

        ProGuard是一个免费的Java类文件收缩,优化,混淆和预校验器。它可以检测并删除未使用的类,字段,方法和属性。它可以优化字节码,并删除未使用的指令。它可以将类、字段和方法使用短无意义的名称进行重命名。最后,预校验的Java6或针对Java MicroEdition的所述处理后的码。

  下面就和大家分享一下对使用了第三方库的项目进行混淆的经验。

ProGuard默认会对第三方库也进行混淆的,而第三方库有的已经混淆过了,有的使用了Java反射技术,所以我们在进行代码混淆的时候要排除这些第三方库。排除对第三方库的混淆需要在混淆规则文件(通常是:proguard-project.txt或proguard.cfg或proguard-rules.pro或proguard-rules.txt也可以是其它的文件名只要在配置文件中将含有混淆规则的文件名配置进去就行了)中添加如下规则:

1.如果使用了Gson之类的工具要使JavaBean类即实体类不被混淆。

2.如果使用了自定义控件那么要保证它们不参与混淆。

3.如果使用了枚举要保证枚举不被混淆。

4.对第三方库中的类不进行混淆

a.混淆时保护引用的第三方jar包

如:-libraryjars libs/baidumapapi_v3_2_0.jar  #保护引用的第三方jar包不被混淆

注意:在使用Eclipse+ADT时需要加入-libraryjars libs/...,如果你是使用android Studio开发的项目则不需要加入libs包中的jar包,这是因为,通过Android Studio进行混淆代码时,默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加,否则会出现“ java.io.IOException: The same input jar is specified twice” 错误。

b.混淆时保护第三方jar包中的类不被混淆

如:-keep class com.baidu.** *;   #让ProGuard不要警告找不到com.baidu.**这个包里面的类的相关引用

-dontwarn com.baidu.**  #保持com.baidu.**这个包里面的所有类和所有方法不被混淆。

附:小编开发中用到的一些混淆规则,大家可以根据需要复制到自己的项目中的混淆规则的文件中即可。

[plain] view plain copy  print?
  1. ################common###############  
  2. -keep class com.jph.android.entity.**  *;  #实体类不参与混淆  
  3. -keep class com.jph.android.view.**  *;  #自定义控件不参与混淆  
  4.   
  5. ################baidu map###############  
  6. -libraryjars libs/baidumapapi_v3_2_0.jar  
  7. -libraryjars libs/locSDK_5.0.jar  
  8. -keep class com.baidu.**  *;   
  9. -keep class vi.com.gdi.bgl.android.***;  
  10. -dontwarn com.baidu.**  
  11.   
  12.   
  13. ################afinal##################  
  14. #-libraryjars libs/afinal_0.5_bin.jar  
  15. #-keep class net.tsz.afinal.**  *;    
  16. #-keep public class * extends net.tsz.afinal.**    
  17. #-keep public interface net.tsz.afinal.** *;  
  18. #-dontwarn net.tsz.afinal.**  
  19.   
  20. ################xutils##################  
  21. -libraryjars libs/xUtils-2.6.14.jar  
  22. -keep class com.lidroid.xutils.**  *;    
  23. -keep public class * extends com.lidroid.xutils.**    
  24. -keepattributes Signature  
  25. -keepattributes *Annotation*  
  26. -keep public interface com.lidroid.xutils.** *;  
  27. -dontwarn com.lidroid.xutils.**  
  28. -keepclasseswithmembers class com.jph.android.entity.**   
  29.     <fields>;  
  30.     <methods>;  
  31.   
  32.   
  33. ################支付宝##################  
  34. -libraryjars libs/alipaysecsdk.jar  
  35. -libraryjars libs/alipayutdid.jar  
  36. -libraryjars libs/alipaysdk.jar  
  37. -keep class com.alipay.android.app.IAliPay*;  
  38. -keep class com.alipay.android.app.IAlixPay*;  
  39. -keep class com.alipay.android.app.IRemoteServiceCallback*;  
  40. -keep class com.alipay.android.app.lib.ResourceMap*;  
  41.   
  42. ################gson##################  
  43. -libraryjars libs/gson-2.2.4.jar  
  44. -keep class com.google.gson.** *;  
  45. #-keep class com.google.***;  
  46. -keep class sun.misc.Unsafe  *;   
  47. -keep class com.google.gson.stream.**  *;   
  48. -keep class com.google.gson.examples.android.model.**  *;    
  49. -keep class com.google.**   
  50.     <fields>;  
  51.     <methods>;  
  52.   
  53. -keepclassmembers class * implements java.io.Serializable   
  54.     static final long serialVersionUID;  
  55.     private static final java.io.ObjectStreamField[] serialPersistentFields;  
  56.     private void writeObject(java.io.ObjectOutputStream);  
  57.     private void readObject(java.io.ObjectInputStream);  
  58.     java.lang.Object writeReplace();  
  59.     java.lang.Object readResolve();  
  60.   
  61. -dontwarn com.google.gson.**  
  62.   
  63.   
  64.   
  65. ################httpmime/httpcore##########  
  66. -libraryjars libs/httpcore-4.3.2.jar  
  67. -libraryjars libs/httpmime-4.3.5.jar  
  68. -keep class org.apache.http.** *;  
  69. -dontwarn org.apache.http.**  
  70.   
  71. ####################jpush##################  
  72. -libraryjars libs/jpush-sdk-release1.7.1.jar  
  73. -keep class cn.jpush.**  *;   
  74. -keep public class com.umeng.fb.ui.ThreadView   #双向反馈功能代码不混淆  
  75. -dontwarn cn.jpush.**  
  76. -keepclassmembers class *   
  77.     public <init>(org.json.JSONObject);  
  78.   
  79.  #不混淆R类  
  80. -keep public class com.jph.android.R$*   
  81.     public static final int *;  
  82.   
  83. -keepclassmembers enum *   
  84.     public static **[] values();  
  85.     public static ** valueOf(java.lang.String);  
  86.   
  87.   
  88. ####################umeng##################  
  89. -libraryjars libs/umeng-analytics-v5.2.4.jar  
  90. -keep class com.umeng.analytics.** *;  
  91. -dontwarn com.umeng.analytics.**  
  92.   
  93. #-keep public class * extends com.umeng.**    
  94. #-keep public class * extends com.umeng.analytics.**    
  95. #-keep public class * extends com.umeng.common.**    
  96. #-keep public class * extends com.umeng.newxp.**   
  97. -keep class com.umeng.**  *;     
  98. -keep class com.umeng.analytics.**  *;     
  99. -keep class com.umeng.common.**  *;     
  100. -keep class com.umeng.newxp.**  *;    
  101.   
  102. -keepclassmembers class *   
  103.    public <init>(org.json.JSONObject);  
  104.   
  105. -keep class com.umeng.**  
  106.   
  107. -keep public class com.idea.fifaalarmclock.app.R$*  
  108.     public static final int *;  
  109.   
  110.   
  111. -keep public class com.umeng.fb.ui.ThreadView   
  112.   
  113.   
  114. -dontwarn com.umeng.**  
  115.   
  116. -dontwarn org.apache.commons.**  
  117.   
  118. -keep public class * extends com.umeng.**  
  119.   
  120. -keep class com.umeng.** *;   
  121.   
  122. ####################universal-image-loader########  
  123. -libraryjars libs/universal-image-loader-1.9.3.jar  
  124. -keep class com.nostra13.universalimageloader.** *;  
  125. -dontwarn com.nostra13.universalimageloader.**  
  126.   
  127.   
  128. ####################zxing#####################  
  129. -libraryjars libs/zxing.jar  
  130. -libraryjars libs/zxing_apply.jar  
  131. -keep class com.google.zxing.** *;  
  132. -dontwarn com.google.zxing.**  
  133.   
  134. ####################BASE64Decoder##################  
  135. -libraryjars libs/sun.misc.BASE64Decoder.jar  
  136.   
  137. ####################support.v4#####################  
  138. Android Studio 代码混淆(你真的会混淆吗)

    Android Studio 代码混淆

    Android Studio代码混淆添加

    Android Studio代码混淆添加

    Intellij idea 和android studio 代码给混淆

    Android Studio环境下代码混淆+签名打包