Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动确定Android方法是否是静态的_Android_Java Native Interface - Fatal编程技术网

自动确定Android方法是否是静态的

自动确定Android方法是否是静态的,android,java-native-interface,Android,Java Native Interface,我有一个JNI格式的Android API文件: Landroid/accounts/AccountManager;->access$000(Landroid/accounts/AccountManager;)Landroid/accounts/IAccountManager; Ljava/lang/Runtime;->exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process; L

我有一个JNI格式的Android API文件:

Landroid/accounts/AccountManager;->access$000(Landroid/accounts/AccountManager;)Landroid/accounts/IAccountManager;    
Ljava/lang/Runtime;->exec([Ljava/lang/String;[Ljava/lang/String;Ljava/io/File;)Ljava/lang/Process;
Ldalvik/system/DexClassLoader;->findLibrary(Ljava/lang/String;)Ljava/lang/String;
...

但是,它们都不包含访问修饰符。我想以自动化的方式确定它们是否都是静态的。

您可以使用Java检查方法是否是静态的

例如,您可以使用getClass()从对象获取类对象,并对类对象调用getDeclaredMethod(),以使用方法名称和方法参数的类获取方法对象:

Class[] methodParameters = new Class[]{Integer.TYPE, String.class};
Method method = obj.getClass().getDeclaredMethod("methodName", methodParameters);
然后可以查询方法对象以检查其是否为静态:

boolean isStatic = Modifier.isStatic(method.getModifiers());
您可以根据类名获取类对象,如下所示:

Class c = Class.forName("com.example.TestClass");

你是想仅仅基于这些原型字符串还是可以访问API?如果我理解正确,是的,我可以使用SDK。据我所知,它包含一个源文件夹,其中包含实现方法的大多数类定义。然而,例如,我在那里找不到上面提到的DexClassLoader。你知道系统类是在哪里定义的吗?假设我有所有的源文件,那么我想我必须编写一个脚本来搜索它们所需的签名,并检查它们是否以static作为前缀。由于我在脚本编写方面缺乏经验,如果您能为我指出您将使用哪些命令的正确方向,我将不胜感激。我想我必须从上面的签名中提取方法名和参数类型,然后创建一个regexp,我可以使用它来grep源文件的相应行。然后,该行将以可见性修改器(即public)开始,后面可能是其他修改器,如final或static。那么,检查第二个单词是否为“静态”就足够了吗?最后,如何使用linux命令执行此检查并相应地修改原始文件。非常感谢您的时间!尝试使用反射: