android adt23.0.6的文件打包混淆时遇到的问题

在proguard-project.txt文件中添加proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt。

我们是不准备混淆第三方jar包,在proguard_project.txt加入了下面的这句代码

-dontskipnonpubliclibraryclasses

但事实证明并没有什么用,第三方包照样混淆。于是有将第三方包加入声明。

-libraryjars libs/picasso-2.4.0.jar 
-libraryjars libs/universal-image-loader-1.9.4-with-sources.jar 

运行后依然还是找不到类,经过各种搜索又开始将每个jar包中的所有的包遍历保留。如下:

-keep class com.nostra13.universalimageloader.** {*;}

依然不行,我的内心已经崩溃了,后来在网上各种搜索看到有一种方法说在上面代码上加上dontwarn这句话,于是又在上面代码前面加入了下面这句话:

-dontwarn com.nostra13.universalimageloader.**

然后再次 打包运行,程序终于可以跑了,然而在执行上传图片的时候又出现了错误,刚开始以为是有包忘了keep了,按照上面的程序把那个包加入,结果还是不行,这时我都要放弃混淆了,另一个同事说这一个包并不是放在libs中的,是在liib文件夹中,并将lib这个文件夹use as source folder的形式加入编译后的jar包的。最后我们在打包前在java build path中的order and export中将该jar包勾上,然后在打包,运行,我去,这次终于好了。

总结这次的混淆,经验如下, 

首先加入android内部相关的:

-keep public class * extends android.app.Activity 
-keep public class * extends android.app.Application 
-keep public class * extends android.app.Service 
-keep public class * extends android.content.BroadcastReceiver 
-keep public class * extends android.content.ContentProvider 
-keep public class * extends android.app.backup.BackupAgentHelper 
-keep public class * extends android.preference.Preference 
-keep public class com.android.vending.licensing.ILicensingService 
-keepclasseswithmembernames class * { 
native <methods>; 
} 
-keepclasseswithmembers class * { 
public <init>(android.content.Context, android.util.AttributeSet); 
} 
-keepclasseswithmembers class * { 
public <init>(android.content.Context, android.util.AttributeSet, int); 
} 
-keepclassmembers class * extends android.app.Activity { 
public void *(android.view.View); 
} 
-keepclassmembers enum * { 
public static **[] values(); 
public static ** valueOf(java.lang.String); 
} 
-keep class * implements android.os.Parcelable { 
public static final android.os.Parcelable$Creator *; 
} 
然后下面是关于第三方的:

-dontskipnonpubliclibraryclasses
-libraryjars libs/picasso-2.4.0.jar 
-libraryjars libs/universal-image-loader-1.9.4-with-sources.jar 
-dontwarn com.nostra13.universalimageloader.**
-keep class com.nostra13.universalimageloader.** {*;}
-dontwarn com.squareup.picasso.**
-keep class com.squareup.picasso.** {*;} 

最后如果有use as a source folder 的情况,要在java build path 中的order and export中将该jar包前面的勾号勾上。

原理什么的还不知道怎么回事,但是上述方法总算可行了。我也总算松了口气。。。。由此可见,我不是一个追求“知其所以然”的好程序员。


猜你喜欢

转载自blog.csdn.net/domyself918/article/details/49619555