1 准备工作
先下相关的插件,进入setting,勾选这LLDB、NDK、CMake三个,点击OK后即可下载
2 Native C++工程
简单总结一下CMake使用的操作步骤
1、新建Native C++工程
2、新建c或cpp文件,写jni函数,将在java被调用
3、修改CMakeLists.txt文件,指定so名字,将在java被loadLibrary
4、在MainActivity.java中loadLibrary第三步的so和调用第二步的jni函数
5、一句话总结:Native C++ -> c -> txt -> java
注:如果新建的不是Native C++工程(如Empty Activity),则需要在module的build.gradle中,android{}闭包内任意位置添加以下内容:
externalNativeBuild {
cmake {
path "src/main/jni或者cpp文件夹/CMakeLists.txt"
version "3.10.2"
}
}
工程编译流程:gradle找到txt -> txt指定c和so -> java调用c
3 c和txt文件
新建Native C++工程后直接一路next就可以了,而且可以直接运行了,应该会输出Hello from C++字样
文件夹中多了这么几个内容
最需要关心的就是CMakeLists.txt这个文件,里面的内容非常多,不过将注释全部删除,可以简化如下:
cmake_minimum_required(VERSION 3.4.1)
add_library(native-lib SHARED native-lib.cpp)
find_library(log-lib log)
target_link_libraries(native-lib ${log-lib})
我们可以先按照流程走一遍:
1、在cpp目录下右键新建一个C/C++ Source File,随便起个名
由于之前已经起了一个test.cpp测试通过了,所以这次我想试试c,所以新建了一个cxk.c
2、然后输入如下内容,注意红框的地方要改成你自己的包名和文件名,
#include <jni.h>
JNIEXPORT jstring JNICALL Java_你的包名_MainActivity_get2
(JNIEnv *env,jobject obj)
{
return (*env)->NewStringUTF(env,"Hello from C , chicken you so beautiful !");
}
其他有标红的地方不管。
注意c和c++的语法是不一样的,注意区别,可参考
https://blog.csdn.net/u011068702/article/details/71425585
3、在CMakeLists.txt中增加如下内容
add_library(MyLib2 SHARED cxk.c)
完整代码如下(已删除原有注释):
4、然后到MainActivity.java中加入如下三行代码
完整代码如下:
package com.a.san;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("native-lib");
System.loadLibrary("MyLib");
System.loadLibrary("MyLib2");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.sample_text);
tv.setText(get2());
}
public native String stringFromJNI();
public native String get();
public native String get2();
}
5、此时再点击右上角的Sync刷新,即可发现标红的地方都没了
然后运行看看!
/app/build/intermediates/cmake/debug/obj/armeabi-v7a/目录下有我们在txt文件中指定的so文件名称,如下:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)