android的proguard混淆,可以在project.properties文件里面,通过proguard.config=proguard.cfg来指定,proguard.cfg就是混淆文件。
#1.proguard.cfg也就是混淆文件,在这里面配置混淆的信息
#2.project.properties 里面指定打包时的混淆配置文件位置
#加这个是为了项目用到的jar包在混淆后不会产生错误
-libraryjars libs/android-support-v4.jar
#加这些dont什么的代码,可以让打包的时候,不会报那一堆乱七八糟的错误
-dontskipnonpubliclibraryclassmembers
-dontwarn org.apache.commons.**
举个例子,以与JS的交互为例,以点击用户头像能否跳转到该用户的网页判断混淆的效果。
//设置webview可以与JS交互
WebView.getSettings().setJavaScriptEnabled(true);
//设置JS可以通过"Android"这个名称来条用 WebToHpagerInterface(this)这个类里面android的代码
WebView.addJavascriptInterface(new WebToHpagerInterface(this),
"Android");
//js点击调用的类及方法
public class WebToHpagerInterface {
private Context context;
WebToHpagerInterface(Context context) {
this.context = context;
}
//添加注解,与JS安全交互的必要
@JavascriptInterface
public void startHomePagerActivity(int uid) {
Intent intent = new Intent(context, MainActivity.class);
intent.putExtra("uid", uid);
context.startActivity(intent);
}
}
如果在测试中可以与JS进行交互,打包之后却不可以,说明混淆文件里面没有对于JS进行混淆的相关配置,添加如下配置到proguard.cfg混淆文件中
#与JS交互,打包的时候需在混淆文件中加入以下代码,比如去掉下面的东西,打包后的与JS交互的功能就会不起作用
-keep public interface android.webkit.WebChromeClient$CustomViewCallback {
*;
}
-keep public interface android.webkit.ValueCallback {
*;
}
-keep class * implements android.webkit.WebChromeClient {
*;
}
-keepclassmembers class com.example.proguarddemo.WebToHpagerInterface {
public *;
}
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
打包后就可以正常进行与JS的交互了。