我已经在应用中实现了应用计费,现在我想再保一点。 阅读它所说的开发者材料:
除了运行模糊处理程序外,我们还建议您使用以下技术来混淆您的应用内结算代码。
将内联方法转换为其他方法。
动态构造字符串,而不是将它们定义为常量。
使用Java反射来调用方法。
http://developer.android.com/guide/market/billing/billing_best_practices.html
混淆 - 我可以做到这一点= proguard
内联方法进入其他方法 - 这就是说,一旦我的代码完成,尽可能多地删除OO并将我的所有代码放在尽可能多的行中(对于我的应用程序的计费部分)在一种方法中?这包括内联类吗?在android示例中,他们有一个常量类,我会内联所有这些吗?
动态构造字符串 - 是的,所以将所有类常量变量排成一行 - 精细程序应涵盖此
使用Java反射 - 这是我的主要问题。我应该调用所有我的方法而不是调用它们吗?
为了节省自己,我可以做一些努力:
private static Object invokeMethod(String name, Class<?>[] params, Object[] args){
try {
return MySpecificClass.class.getMethod(name, params).invoke(null, args);
} catch (IllegalArgumentException e) {
// Should never happen in my code, ignore and cancel in app charge
} catch (SecurityException e) {
// Should never happen in my code, ignore and cancel in app charge
} catch (IllegalAccessException e) {
// Should never happen in my code, ignore and cancel in app charge
} catch (InvocationTargetException e) {
// Should never happen in my code, ignore and cancel in app charge
} catch (NoSuchMethodException e) {
// Should never happen in my code, ignore and cancel in app charge
}
return null;
}
然后我可以做这样的事情:
private static boolean someMethod() {
return true; // just an example
}
params = new Class<?>[0];
if ((Boolean) invokeMethod("someMethod", params, null)) {
// Do something
}
这是一个很好的安全性,还是只是代码膨胀并使我的应用程序无法解决真正的用户问题?
感谢。
答案 0 :(得分:1)
这看起来像是在有更高的盗版威胁时可以查看的内容。如果它有可能损害用户体验,我无法证明使用反射只是为了额外的混淆层。