在原有Android 项目的基础上如果想添加C++程序,可以按照如下步骤去修改,以下步骤本人亲自实验,在我自己这里测试是完全可行的。
Android Studio 版本为2.3.2
1、首先Android Studio要有开发NDK的环境,环境配置:Android Studio 中要安装 Android SDK->SDK Tools中安装 CMake, LLDB, NDK. 主要SDK更新来自于网站:dl.google.com .所以一定要保证电脑可以翻墙。否则安装不成功(或者也可以去找离线安装的方法,我没试过)。
2、新建一个Android NDK 工程,New Project页面勾选Include C++ support 。 (这里新建一个主要是对照着容易修改)
3、打开原有Android Java工程,在Project 工具栏选择,Project Files 选项 ,
下边依次打开app->app->src->build.gradle(Module:app) 一共修改两处: (1) android{ defaultConfig{ "此处加入externalNativeBuild{}"} };(2) android{ "此处加入externalNativeBuild{}" }; 对比Android NDK 文件自己修改这两处。
4、上边设置了path"CMakeLists.txt" ,需要将Android NDK工程的 CMakeLists.txt 文件拷贝进Android Java工程 的app->app->src 文件夹中,也就是与build.gradle(Module:app)同一个文件夹。
图片参照第3步下边的图片
5、上边拷入的CMakeLists.txt里面有一些库的构建,所以需要有相应的cpp源文件,从CMakeLists中的函数或者对比两个工程可知,cpp文件应该在app->app->src->main 文件夹下,直接复制cpp文件夹。进入即可。
图片参照第3步下边的图片
6、打开文件上边拷贝进去的native-lib.cpp文件发现函数名称中包含的包名不对应,
Java_com_example_sunshine_sample_null_c_MainActivity_stringFromJNI 即,java与
MainActivity之间的问包名,对比着修改包名为原Android Java 工程的包名。 (到此为止这个函数还没有进行函数声明,可以先注释掉,用的时候再启用)
#include <jni.h>
#include <string>
extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_sunshine_sample_1null_1c_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
7、现在开始编译发现没有问题,可以在MainAcMativity中调用
System.
loadLibrary(
"native-lib"); 并且进行函数声明, 启用native-lib.cpp中的函数实现。
static { System.loadLibrary("native-lib"); }
public native String stringFromJNI();
8、现在已经可以在
MainAcMativity 中
调用 C++ 程序。 可以添加一个Text View控件,然后调用stringFromJNI函数进行显示。
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());