1. javap反汇编查看命令
配置如下:
$JDKPath$\bin\javap.exe
-classpath $OutputPath$ -p -s $FileClass$
$ProjectFileDir$
必须在编译后生成了class文件夹后才能执行,执行效果:
"C:\Program Files\Android\Android Studio\jre\bin\javap.exe" -classpath C:\H\project\AndroidX\vatest\VATools\demo\VAToolsTest\app\build\intermediates\javac\debug\compileDebugJavaWithJavac\classes -p -s io.virtualapp.MainActivity
Compiled from "MainActivity.java"
public class io.virtualapp.MainActivity extends android.support.v7.app.AppCompatActivity {
private static final java.lang.String TAG;
descriptor: Ljava/lang/String;
private android.os.Handler mHandler;
descriptor: Landroid/os/Handler;
public io.virtualapp.MainActivity();
descriptor: ()V
protected void onCreate(android.os.Bundle);
descriptor: (Landroid/os/Bundle;)V
void testHandlerPost();
descriptor: ()V
static android.os.Handler access$000(io.virtualapp.MainActivity);
descriptor: (Lio/virtualapp/MainActivity;)Landroid/os/Handler;
}
Process finished with exit code 0
其中descriptor
刚好描述了jni签名
2.javah生成native函数声明
配置如下:
$JDKPath$\bin\javah.exe
-classpath .;$ModuleSdkPath$\platforms\android-22\android.jar -jni -encoding $FileEncoding$ -d $ModuleFileDir$/src/main/jni/ $FileClass$
$ModuleFileDir$\src\main\java
执行效果:
"C:\Program Files\Android\Android Studio\jre\bin\javah.exe"
-classpath .;C:\Users\hgy413\AppData\Local\Android\Sdk\platforms\android-22\android.jar
-jni -encoding UTF-8 -d
C:\H\project\AndroidX\vatest\VATools\demo\VAToolsTest\ndklib/src/main/jni/ com.lody.virtual.client.NativeEngine
Process finished with exit code 0
生成的.h文件位于 C:\H\project\AndroidX\vatest\VATools\demo\VAToolsTest\ndklib/src/main/jni/
文件夹中。
如果使用 javah -jni没有指定 -encoding F i l e E n c o d i n g FileEncoding FileEncoding源文件的编码格式,可能会出现"错误:
编码GBK的不可映射字符"的错误