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

来源:互联网 发布:桌面录制视频软件 编辑:程序博客网 时间:2024/06/06 13:21

在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包前面的勾号勾上。

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


0 0
原创粉丝点击