emmmm...
APP内接入的 金融理财H5活动告一段落,想想,还是准备把这记录一下吧.
看到这篇博文,碰到相关问题,请全局搜索关键字.
遇到了3个问题.
1.因为是金融理财产品,要求在进入该h5页面时,需要进行安全检查,要求防录屏...
看到这个要求一脸懵逼,然后网上查了下,完全没有啊.
想到的办法是,对手机内安装的软件进行包名检查,本地更新或者后台传输 录屏软件包名库...
但是感觉好鸡儿蛋疼.
最后突然转换了个思路,不记得之前是在什么时候看过这么一篇文章,作者讲的是 破解一款PC和Android同步操作的软件的博文,
其中讲出,其最主要的方法就是 Android截屏方法
View.getDrawingCache()
那我直接防止截屏即可.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
加上这个,完美解决,进行测试,发现可以录屏,但是录屏的内容是一片黑色.OK
2.还是因为是金融理财产品,要求在进入该H5页面时,需要进行安全检查,要求检查是否ROOT..
这个,网上一搜一大把.
贴一个我正在用的.
**
* @author Kevin Kowalewski
*/
public class CheckRootUtils {
public static boolean isDeviceRooted() {
return checkRootMethod1() || checkRootMethod2() || checkRootMethod3();
}
private static boolean checkRootMethod1() {
String buildTags = android.os.Build.TAGS;
return buildTags != null && buildTags.contains("test-keys");
}
private static boolean checkRootMethod2() {
String[] paths = {"/system/app/Superuser.apk", "/sbin/su", "/system/bin/su", "/system/xbin/su", "/data/local/xbin/su", "/data/local/bin/su", "/system/sd/xbin/su",
"/system/bin/failsafe/su", "/data/local/su", "/su/bin/su"};
for (String path : paths) {
if (new File(path).exists()) return true;
}
return false;
}
private static boolean checkRootMethod3() {
Process process = null;
try {
process = Runtime.getRuntime().exec(new String[]{"/system/xbin/which", "su"});
BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
if (in.readLine() != null) return true;
return false;
} catch (Throwable t) {
return false;
} finally {
if (process != null) process.destroy();
}
}
}
3.该问题是在测试完毕,进行混淆打包后产生的. 混淆打包后,不管是测试还是生产环境,页面均无法调起.
在测试的h5页面的控制台发现:
JS调用JAVA方法 OK
JAVA回调JS方法 不OK.
webView.loadUrl("javascript:XXXXX.callback(\"" + token + "\"," + json + ")");
这个方法没有调用.
emmmm...
还是偷懒网上找轮子.
再贴一个现在用的:
在混淆配置文件内添加:
-keepclassmembers class XXX.YYY$ZZZ{
public *;
}
-keepattributes *Annotation*
-keepattributes *JavascriptInterface*
其中XXX为包名,YYY为该H5页面类名,ZZZ为包含各种JAVA与JS互调,有@JavascriptInterface注解方法的内部类名
以上...就是这次接入H5 金融理财遇到的主要问题.