###步骤:
-
写接口文件MainActivity.java
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = new TextView(this);
tv.setText( stringFromJNI() );
setContentView(tv);
}
public native String stringFromJNI();
public native String unimplementedStringFromJNI();
static {
System.loadLibrary("hello-jni");
}
}
-
编译生成.class文件
执行Build->Make Project就生成文件 #见g:\as\hellojni\app\build\intermediates\classes\all\debug\com\example\decode\hellojni\MainActivity.class
-
javah生成c头文件
cd g:
cd g:\as\hellojni\app\src\main #生成的 .h 文件要在app\src\main路径下,见g:\as\hellojni\app\src\main\jni\com_example_decode_hellojni_MainActivity.h
javah -d jni -classpath d:\android-studio\sdk\platforms\android-23\android.jar;..\..\build\intermediates\classes\all\debug com.example.decode.hellojni.MainActivity
-
编辑功能c文件
#include <string.h>
#include <jni.h>
jstring Java_com_example_decode_hellojni_MainActivity_stringFromJNI( JNIEnv* env,jobject thiz ) {
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a/NEON (hard-float)"
#else
#define ABI "armeabi-v7a/NEON"
#endif
#else
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a (hard-float)"
#else
#define ABI "armeabi-v7a"
#endif
#endif
#else
#define ABI "armeabi"
#endif
#elif defined(__i386__)
#define ABI "x86"
#elif defined(__x86_64__)
#define ABI "x86_64"
#elif defined(__mips64) /* mips64el-* toolchain defines __mips__ too */
#define ABI "mips64"
#elif defined(__mips__)
#define ABI "mips"
#elif defined(__aarch64__)
#define ABI "arm64-v8a"
#else
#define ABI "unknown"
#endif
return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI ".");
}
Q&A
- win7文件夹右键DOS入口
按住shift键然后右键点击文件夹,菜单里会出现“在此处打开命令窗口”一项,其实就相当于在当前位置打开Dos窗口,这个是系统自带的。
- 命令提示行切换目录路径
切换到apktool文件夹中来,如放在d:\apktool,就先输入驱动器号d:,再使用cd命令,如:cd d:\apktool。