一个普通的Android 项目变成支持NDK的项目需要一些配置
首先在app.gradle中需要增加一些cmake的设置,如下

android {    compileSdkVersion 29    buildToolsVersion "29.0.3"    defaultConfig {        applicationId "com.pbph.normaltondkdemo"        minSdkVersion 19        targetSdkVersion 29        versionCode 1        versionName "1.0"        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"        ndk {            //打包时候需要生成的支持CPU架构            abiFilters "armeabi-v7a"        }        externalNativeBuild{            cmake{                //编译时候指定cpu架构                abiFilters 'armeabi-v7a'            }        }    }    //cMake  -> ninjjia->生成so    externalNativeBuild{        cmake{        //在当前app目录下            path "CMakeLists.txt"        }    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'        }    }}

比如我们有一个jni的c++文件

#include #include extern "C"{extern int test();}extern "C" void Java_com_pbph_normaltondkdemo_MainActivity_nativeTest(JNIEnv *env,jobject object){    test();}

,并且此文件需要依赖一个so库,在CMakeLists.txt 文件中(代码中已详细注释),注释部分包含如果引入的是静态库,也就是.a文件,应当如何添加

#cmake  版本cmake_minimum_required(VERSION 3.6)#引入include 文件  在使用的时候就可以在引入的时候不使用include相对路径,直接include 使用的的头文件即可include_directories(src/main/cmake/include)#定义全局的变量  csource 表示cmake目录下的所有c cpp 文件全部添加进去file(GLOB csource src/main/cmake/*.cpp src/main/cmake/*.c)# hello-jni 最终生成的so的名字(自定义名字没有要求)  SHARED 动态库   文件路径add_library(hello-jni SHARED src/main/cmake/hello-jni.cpp)#add_library(hello-jni SHARED ${csource})#引入静态库IMPORTED表示我们这一个静态库以导入的形式添加进来 预编译静态库# Android abi  这是我们设置的armeabi-v7a#add_library(Test STATIC IMPORTED )##设置目标属性方法 设置一个导入路径在当前目录下#set_target_properties(Test PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/src/main/cmake/${ANDROID_ABI}/libTest.a)# 引入动态库的方法 set定义一个变量  由于我们使用c++   CMAKE_CXX_FLAGS#如果使用C编写的话那就是CMAKE_C_FLAGS#-L 库的查找路径set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}")# 会去NDK的库中去找  也可以直接在target_link_libraries 中直接写上logfind_library(log-lib log)# 链接#  1 要生成的目标so  不能更改顺序target_link_libraries(hello-jni Test ${log-lib})

编译运行以后,我们点击build下的Analazy Apk… 就能看到lib目录下生成了libhello-jni.so
如图

更多相关文章

  1. NPM 和webpack 的基础使用
  2. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  3. Android(安卓)实现截屏
  4. android逆向工程教程
  5. Android(安卓)SDCard操作(文件读写,容量计算)
  6. Android文件操作
  7. ReactNative Android/iOS 打包详情流程
  8. android webview 使用js加载json文件失败
  9. 如何使Android应用程序获取系统权限

随机推荐

  1. 1. box-sizing属性解决了什么问题?2. 伪
  2. markdown语法学习什么时候开始都不晚!
  3. 意派Epub360丨国庆节品牌推广H5案例,有趣
  4. js语法:解构赋值、dom元素的增删改、datas
  5. 轻微课学员作业成长分享贴,终于体会到被班
  6. 任务队列、事件、冒泡、fetch使用
  7. 1. 实例演示绝对定位与固定定位(完成课堂
  8. 在此一搏,
  9. HP 5 常量
  10. Python将CSV文件转化为HTML文件的操作方