一、环境配置
1,安装NDK
按照如下两种方式进入NDK管理界面:
NDK管理界面如图:
当NDK没有安装时,按照提示next安装即可。上图是安装成功后显示的效果。
2,配置NDK环境
将NDK安装目录配置到环境变量中。
配置环境完成,通过以下命令,获取以下情形,说明配置环境成功。
二、项目新建
1,创建项目
选中 includeC++ support。
2,查看生成源码
其中,native-lib.cpp是安卓代码和C代码的中间件。也可以理解为Android调用C/C++代码的接口。
3,build 下Make Project,生成并运行项目。
生成可使用的so库,并运行项目,看到效果。
三、内容扩充
1,使用地方扩充
public class MainActivity extends AppCompatActivity {
// Used to load the 'native-lib' library on application startup.
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() + " 分割符 " + mathAddUseC(2, 5));
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
public native int mathAddUseC(int a, int b);
}
添加新的接口方法。
2,“接口”更新
也就是Android 和C/C++代码的中间件[native-lib.cpp]更新,添加下列方法:
extern "C"
JNIEXPORT jint JNICALL
Java_com_future_ndkdemo_MainActivity_mathAddUseC(
JNIEnv *env,
jobject , jint a,jint b) {
MathUtil mathUtil;
jint result = mathUtil.add(a, b);
return result;
}
3,填充C类
其中,native-lib.cpp添加方法为中间件【接口】,用于传递Android给C的数据,获取C代码运行的结果。
而C类的扩展则实现了C代码的完善与扩展,便于做更多复杂的事情。从而独立了C代码和Android代码。
四、细节注意
1,配置出来的项目可能出错,类似:
Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 11 cannot be smaller than version 14 declared in library [com.android.support:appcompat-v7:26.0.0-alpha1] C:\Users\Administrator\.android\build-cache\a4e0c0cdf9f76dcb6d3fc78fbc7d7020a41a7d71\output\AndroidManifest.xml
Suggestion: use tools:overrideLibrary="android.support.v7.appcompat" to force usage
需要配置合适的Compact支持包版本。
2,出现包名报错
需要配置合适的targetSdkVersion,compileSdkVersion,buildToolsVersion版本号。
3,JNI项目的细节调整
修改SO库生成路径,修改SO库生成的名称。
对的,这个小项目的运行效果就是这样子的啦!