Android高级-NDK-Android.mk基础

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();
}

运行结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值