1:Android.mk简介
2 Android.mk的基本格式
my-dir是有编译系统提供的的宏函数,返回的是当前文件的路径
CLEAR_VAS 是由编译器提供的变量,GUN片段,可以清除除了LOCAL_PATH以外的以
LOCAL开头的变量,如LOCAL_MODULE,LOCAL_SRC_FILES等,是因为编译器在单次执行中会多解析多个构建文件和模块定义,
而Local变量时全局变量。
3:怎么编译产生多个共享库
4:如何编译静态库
5:如何使用共享库共享通用模块
这是必须是同一个NDK项目
6:在多个NDK项目间共享模块
7:如何使用预编译库
8:如何编译独立的可执行文件
9:注意事项:
Demo:
先在main下建一个文件夹:ndkBuild
然后写一个hello-jni.c
#include<jni.h>
int test(){
return 123;
}
2:在mainAcitivty中写一个nativie
native int nativeTest();
3:补充hello-jni.c
#include<jni.h>
int test(){
return 123;
}
//com.asyn.task.androidmktest
jint Java_com_asyn_task_androidmktest_AndroidMKTest_MainActivity_nativeTest(){
return test();
}
4:写app/build.gradle
defaultConfig {
applicationId "com.asyn.task.androidmktest"
minSdkVersion 15
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
externalNativeBuild{//这个地方
ndkBuild{
abiFilters "armeabi-v7a","arm64-v8a"
}
}
}
externalNativeBuild{
ndkBuild{
path "src/main/ndkBuild/Android.mk"
}
}
5:然后运行,在build中找到apk,把apk拖进android studio
然后我么开始调用
在MainAcitivity中
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("hello-jni");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView=(TextView)findViewById(R.id.tv);
textView.setText(nativeTest()+"");
}
native int nativeTest();
}
运行结果: