一、场景描述:
在你已经知道如何使用Export打包一个签名的Apk的前提下,当你使用最新版的开发工具开发完客户端工程,你或许会考虑将客户端工程进行混淆,以保证客户端的安全性。
二、具体需求:
使用Android SDK自带的ProGuard工具,将客户端工程进行混淆。
三、解决方案:
A、实现思路:
配置好project.properites和proguard-project.txt(这两个文件由开发工具自动生成,如没有生成,将确保你使用的是最新的开发工具):不混淆包路径,不混淆公开的方法和受保护的类,成员,不进行多余的代码优化(缺nu.xom包),不进行异常提示(也可以使用injars和libraryjars这两个参数取代之),保持异常,签名,内部类,以及不赞成的方法(默认都会被去掉)。
B、具体实现:
1.配置project.properties
proguard.config=proguard-project.txt
2.配置proguard-project.txt
旧版(混淆apk)
-keeppackagenames
-keepattributes Exceptions
-keepattributes Signature
-keepattributes InnerClasses
-keepattributes Deprecated
-keep class android.** {
public protected *;
}
-keep class net.** {
public protected *;
}
-keep class org.** {
public protected *;
}
-keep public class com.** {
public protected *;
}
-dontoptimize
-dontwarn **.*
新版(混淆jar):
-injars wade-mobile-com.jar
-outjars wade-mobile-com.jar.jar
-verbose
-libraryjars rt.jar
-libraryjars lib
-libraryjars classes
-dontpreverify
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*
-keeppackagenames
-keepattributes Exceptions
-keepattributes Signature
-keepattributes InnerClasses
-keepattributes Deprecated
-keepnames class * implements java.io.Serializable
-keep public class com.** {
public protected *;
}
-keepclassmembers class **.R$* {
public static <fields>;
}
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
3.从现在开始,你Export出的Apk便会被自动混淆。之后,你可以使用dex2jar+jd进行反编译测试,也可以使用adb命令将其安装到模拟器上测试。
4.注意事项
(1).请保证你apk的解压工具是7z
(2).dex2jar反编译的命令为: dex2jar.bat classes.dex
(3).当反编译工具报错时,请尝试重新打开反编译工具后再次尝试
(4).请确保你使用的开发工具来自:http://114.215.100.48:8080/doc/resource-list.html
(5).请确保你使用的混合开发框架为最新的jar包。http://114.215.100.48:8080/doc/resource-list.html
(6).请确保你新建的类的包路径心com开头,否则请参照自行添加。
5.附:给新手的多余提示
(1).adb的安装命令为:adb install **.apk
(2).Export的导出方法为:
工程-右键-Export-Android-Export Android Application - Project(你需要导出的工程) - Create new keystore - ……(如果后面的还不知道,那也无能为力了)。