logo头像
Snippet 博客主题

从零开始使用Cmake进行jni编程教程(一):搭建环境

本文于 1332 天之前发表,文中内容可能已经过时。

准备内容

  1. 一台能够联网的主机
  2. AS2.2以上的AS(博主使用的是AS3.1)
  3. NDK编译包(博主使用的是android-ndk-r14b)

以下为AS和NDK包的下载地址

AS:https://developer.android.google.cn/studio/

NDK:
https://developer.android.google.cn/ndk/downloads/

前期工作

  1. 解压下载完成的NDK包,并放在根目录下,位置可以不在C盘,但路径中不允许出现空格或中文字符
  2. 打开AS,在configure中选取,Project defauts中选取Project Structure设置NDK路径,这样新建NDK项目后就不用每次重新设置。

若无法设置,则可以到新建AS安装目录下直接设置NDK路径
在C:\Program Files\Android\Android Studio\plugins\android\lib\templates\gradle-projects\NewAndroidProject\root\local.properties.ftl中添加末尾一行指定NDK编译路径
ndk.dir=C:\android-ndk-r14b


3. 设置快速jni编译命令
点击File-Setting-Tool在External中按照以下方式编译javah,命令,确保能够通过该命令快速生成java对应的.h文件(注意:此处JDK的路径需要设置为java的jdk路径,使用AS自带的路径很可能无法编译)

.h文件快速生成命令


NDK 生成so命令(该命令可以不用)

ndk build,可不需要


NDK清空命令(该命令可以不用)

ndk clean,可不需要

测试NDK是否可以编译

  1. 新建一个Android Project jni项目,然后把这三个
  2. 选中C++版本11或14,这里我选择了11,下面两个可以不勾选,一般jni编译不会用到


3. 编译完成如果没有安装Cmake包则会提示用户自己去下载,安装完成后,即可开始jni的编程

  • Activity界面

    public class MainActivity extends AppCompatActivity {
    // 使用该静态代码块指定加载的jni即so包
    static {
    System.loadLibrary(“native-lib”);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Example of a call to a native method
    TextView tv = (TextView) findViewById(R.id.sample_text);
    tv.setText(stringFromJNI());
    }

    // jni调用的方法,该方法需要有对应的cpp文件
    public native String stringFromJNI();
    }

  • cpp文件

    #include <jni.h>
    #include
    extern “C” JNIEXPORT jstring
    JNICALL
    Java_com_minicoder_cmakedmo_MainActivity_stringFromJNI(
    JNIEnv env,
    jobject /
    this */) {
    std::string hello = “Hello from C++”;
    return env->NewStringUTF(hello.c_str());
    }

  • CMakeLists.txt(该文件自动生成,注意其中的几个变量设置)

  1. 只要可以在确定APP可以正常运行则则表示搭建jni编译环境成功