本次操作的原则:能少做一步绝不多做,把可能碰到的坑都踩一次。
把碰到的问题尽可能详尽的解释清除。
所以这应该是一个冗长的博客。
尽量写清楚重点把,下次看的时候选择性阅读把。
- 开发环境
- Ubuntu16.04
- AndroidStudio 2.3
注意
如果在系统命令行界面 提示:
command not found
请考虑环境变量的配置是否完善
一、创建一个Android project
二、创建native
方法
package com.example.tom.jnitest_3;
/**
* Created by tom on 17-6-18.
*/
public class JniTest {
static{
System.loadLibrary("MyJNI");//本字段和下边的设置相对应
}
public static native String SayHello();
}
三、编译项目
本步骤的终极目标是把包含native方法的.java文件编译为.class文件。
本步骤方法有二
- **笔者采用此方法**make project(Ctrl+F9)——编译整个项目
- 这样在
/项目路径/module路径/build/intermediates/classes/debug
可以找到.class文件
- 这样在
- 也可以使用最原始的方法:javac(可以在系统控制台也可以在AndroidStudio 的Terminal窗口进行)
- cd命令进入.java文件所在位置
- 执行
javac JniTest.class
命令。
四、生成.h
头文件(生成和native方法相对应的C接口)
本步骤涉及命令 javah
tom@tom-Vostro-2421:~$ javah
Usage:
javah [options] <classes>
where [options] include:
-o <file> Output file (only one of -d or -o may be used)
-d <dir> Output directory
-v -verbose Enable verbose output
-h --help -? Print this message
-version Print version information
-jni Generate JNI-style header file (default)
-force Always write output files
-classpath <path> Path from which to load classes
-cp <path> Path from which to load classes
-bootclasspath <path> Path from which to load bootstrap classes
<classes> are specified with their fully qualified names
(for example, java.lang.Object).
tom@tom-Vostro-2421:~$
本步骤方法有二:(承接步骤三)
cd命令进入
/项目路径/module路径/build/intermediates/classes/debug
目录下(注意一定要锁定到debug目录)- 观察步骤二中JniTest类的包名。
执行命令 :
//javah开始关注 tom@tom-Vostro-2421:/media/tom/other/workspace/android_workspace_as/JniTest_3/app/build/intermediates/classes/debug$ javah -d /media/tom/other/workspace/android_workspace_as/JniTest_3/app/src/main/jni -jni com.example.tom.jnitest_3.JniTest
命令解析
-d /media/tom/other/workspace/android_workspace_as/JniTest