原因:
使用 @android.webkit.JavascriptInterface JavascriptInterface 原因导致加密后找不到这个类的方法,主要是加密后原有的类下方法是普通的annotation,无法导入js交互中。

// Compiled from JavascriptInterface.java (version 1.5 : 49.0, no super bit)
@java.lang.annotation.Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Target(value={java.lang.annotation.ElementType.METHOD})
public abstract @interface android.webkit.JavascriptInterface extends java.lang.annotation.Annotation {

加密过程的警告可以忽略:

Note: the configuration refers to the unknown class 'com.xx.WebViewActivity.JavascriptInterface'
      Maybe you meant the fully qualified name 'android.webkit.JavascriptInterface'?
Note: the configuration refers to the unknown class com.xx.WebViewActivity.JavascriptInterface'
      Maybe you meant the fully qualified name 'android.webkit.JavascriptInterface'?
Note: the configuration refers to the unknown class 'com.xx.WebViewActivity.JavascriptInterface'
      Maybe you meant the fully qualified name 'android.webkit.JavascriptInterface'?
Note: the configuration refers to the unknown class 'JavascriptInterface'
      Maybe you meant the fully qualified name 'android.webkit.JavascriptInterface'?
Note: there were 4 references to unknown classes.
      You should check your configuration for typos.
Note: there were 1 unresolved dynamic references to classes or interfaces.
      You should check if you need to specify additional program jars.
Note: there were 1 accesses to class members by means of introspection.
      You should consider explicitly keeping the mentioned class members
      (using '-keep' or '-keepclassmembers').

最后解决:

-keepclassmembers class com.xx.WebViewActivity$JavascriptInterface { public <fields>; public <methods>; # keep annotated by JavascriptInterface -keep @com.xx..WebViewActivity.JavascriptInterface class * { <fields>; <methods>; -keep class * { @com.xx.WebViewActivity.JavascriptInterface <fields>; -keepclassmembers class * { @com.xx.WebViewActivity.JavascriptInterface <methods>; -keep class android.support.** { <fields>; <methods>; -keep class com.xx.WebViewActivity.** { <fields>; <methods>; -keepclassmembers classcom.xx.WebViewActivity$JavascriptInterface { <methods>;

推荐文章:

|| 版权声明:本文为博主杜锦阳原创文章,转载请注明出处。

或作或辍,一曝十寒,则虽读书百年,吾未见其可也。——(明)吴梦祥原因:使用 @android.webkit.JavascriptInterface 和 JavascriptInterface 原因导致加密后找不到这个类的方法,主要是加密后原有的类下方法是普通的annotation,无法导入js交互中。// Compiled from JavascriptInterface.ja... 直接 替换 5.3.3版本的 混淆jar包 Mac 路径为 Contents/gradle/m2repository/net/sf/proguard/proguard-base Win gradle/m2repository/net/sf/proguard/proguard-base 为了安全 先备份原来的 jar 将gradle里面的 release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 混淆文件里面添加 (自行选择) # 修改包名 -repackageclass "" # 忽略访问修饰符,配合上一句使用 -allowaccessmodification # 不要删除源文件名和行号 -keepattributes SourceFile,LineNumberTable
Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。ProGuard的主要作用就是混淆。当然它还能对字节码进行缩减体积、优化等,但那些对于我们来说都算是次要的功能。 引用ProGuard官方的一段话来介绍就是: ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or for Java Micro Edition
直接 替换 5.3.3版本的 混淆jar包 Mac 路径为 Contents/gradle/m2repository/net/sf/proguard/proguard-base Win gradle/m2repository/net/sf/proguard/proguard-base 为了安全 先备份原来的 jar 将gradle里面的 release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 混淆文件里面添加 (自行选择) # 修改包名 -repackageclass "" # 忽略访问修饰符,配合上一句使用 -allowaccessmodification # 不要删除源文件名和行号 -keepattributes SourceFile,LineNumberTable 这是混合开发的基石,最基本也最重要的东西,实验代码在这里。 概括说说—— java调js:调用webView.load("javascript:someFunction()"); 这样可以调用webView里页面上的全局方法。这不是什么新鲜东西,你在网页中也可以这么做,试试在浏览器地址栏输入
一.关于混淆jar 目前所有第三方加固工具,均只对Apk进行加固,而对jar不加固.因此对jar加固可以使用Platform-tools下的Guardprogui 来完成. 这个工具在 (Android SDK根目录)/sdk/tools/proguard/bin/proguardgui.sh 运行后界面是这样的 Paste_Image.png 二.配置文件Proguard.pr
压缩(shrink) 移除未使用的类、方法、字段等; 优化(optimize) 优化字节码、简化代码等操作; 混淆(obfuscate) 使用简短的、无意义的名称重全名类名、方法名、字段等; 预校验(preverif...
###排除所有注解类 -keep class * extends java.lang.annotation.Annotation { *; } -keep interface * extends java.lang.annotation.Annotation { *; } ###保留使用xUtils的方法和类,并且不要混淆名字 -keep @com.lidroid.xutils.d
Proguard 是一个 Java 字节码混淆器,可以将 Java 代码混淆,使得反编译后的代码难以阅读和理解。使用 Proguard 可以有效地保护 Java 代码的安全性。以下是一个 Proguard 的使用示例: 1. 在项目的 build.gradle 文件中添加以下代码: buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 2. 在项目的根目录下创建一个 proguard-rules.pro 文件,添加以下代码: # 保留所有 public 类和方法 -keep public class * { public *; # 保留所有 Android 系统类和方法 -keep class android.** { # 保留所有 support 库类和方法 -keep class android.support.** { # 保留所有 butterknife 库类和方法 -keep class butterknife.** { # 保留所有 retrofit 库类和方法 -keep class retrofit.** { # 保留所有 okhttp 库类和方法 -keep class okhttp3.** { # 保留所有 gson 库类和方法 -keep class com.google.gson.** { # 保留所有 glide 库类和方法 -keep class com.bumptech.glide.** { 以上就是一个 Proguard 的使用示例。