如何检查类是否存在于包中?

我目前正在处理与我的付费应用程序有关的特定问题。 它在内部包含许可证检查。 该应用程序由黑客通过修改应用程序apk / jar修补。 他们正在增加一个帮助绕过许可证检查的新class级。

我的目标是以某种方式检查这个特定的补丁。 如果我发现它,我知道我的应用程序已被泄漏。

有关如何知道包裹上的某些内容已被修改的提示? 在我的情况下,对应用程序进行散列并不是真正的select。

我想也许检查这个class是否有帮助,但是如果他们改变class的名字呢? 然后,另一个想法是以某种方式检查添加到课堂的意外包括。

任何这些可能吗? 任何build议将帮助:)

Solutions Collecting From Web of "如何检查类是否存在于包中?"

不知道关于android,但在标准的JDK,你会做这样的事情:

try { Class.forName( "your.fqdn.class.name" ); } catch( ClassNotFoundException e ) { //my class isn't there! } 

这是我在Android中使用的标准Java:

 public boolean isClass(String className) { try { Class.forName(className); return true; } catch (ClassNotFoundException e) { return false; } } 

实施例:

 if (isClass("android.app.ActionBar")) { Toast.makeText(getApplicationContext(), "YES", Toast.LENGTH_SHORT).show(); } 

您可以使用

 public static Class<?> forName (String className) 

并检查ClassNotFoundException

http://developer.android.com/reference/java/lang/Class.html#forName%28java.lang.String%29

如果它是一个随机包中的随机类,它是如何加载的?

这就是说,请参阅http://download.oracle.com/javase/6/docs/api/java/lang/System.html#getProperties%28%29和java.class.path&#x3002; 对于普通的java应用程序,你必须走类path,然后search条目(对于jar)或目录(对于.class文件)。 但在容器类加载器环境中,这将无法正常工作(我不知道如何适用于Android环境)。