博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android NDK(二) CMake构建工具进行NDK开发
阅读量:5743 次
发布时间:2019-06-18

本文共 2563 字,大约阅读时间需要 8 分钟。

本文目录 

  一Androidstudio中需要的插件

  二项目配置

    ①build.gardle配置

    ②CMakeLists.txt

    ③Android和Cpp的代码

    ④so文件生成

    ⑤so文件的位置

一、Android studio中需要的插件:  

  CMake  

  LLDB  

  NDK  

二、项目配置

  项目目录

  ①build.gardle的配置  

  多了两个externalNativeBuild :defaultConfig下的、和defaultConfig 并行下的externalNativeBuild

   a、defaultConfig下的externalNativeBuild

defaultConfig {        ...        externalNativeBuild {                cmake {                    cppFlags ""//cppFlags "-fexceptions -frtti"   ,在AndroidStudio新建项目->选择C++版本时,勾选•Exceptions Support和•Runtime Type Information Support时会有,                }        }  }

    注:   

    Exceptions Support:支持C++异常处理   

    Runtime Type Information Support:支持运行时类型识别, 程序能够使用基类的指针或引用来检查这些指针或引用所指的对象的实际派生类型  

  b、和defaultConfig 并行下的externalNativeBuild ,用于指定CMakeLists.txt的路径    

externalNativeBuild {    cmake {       path "CMakeLists.txt"       }}

  ②CMake的构建脚本

# 设置Cmake最小版本cmake_minimum_required(VERSION 3.4.1)# 编译libraryadd_library( # 设置library名称     native-lib     # 设置library模式,SHARED模式会编译so文件,STATIC模式不会编译     SHARED     # 设置原生代码路径     src/main/cpp/native-lib.cpp )# 定位libraryfind_library( # library名称    log-lib    # 将library路径存储为一个变量,可以在其他地方用这个变量引用NDK库    # 在这里设置变量名称    log ) # 关联librarytarget_link_libraries( # 关联的library    native-lib    # 关联native-lib和log-lib    ${log-lib} )

  ③Cpp代码和Android代码调用

   Cpp代码:  

#include 
#include
extern "C"JNIEXPORT jstringJNICALLJava_com_yl_ndkdemo_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str());}

  Android代码:  

public class MainActivity extends AppCompatActivity {     // 加载native-lib,不加lib前缀    static {     System.loadLibrary("native-lib");     }    @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);     setContentView(R.layout.activity_main);        // 将获取的字符串显示在TextView上    TextView tv = (TextView) findViewById(R.id.sample_text);    tv.setText(stringFromJNI());    }    /**     * native-lib中的原生方法     */    public native String stringFromJNI();}

  ④so文件的生成  

  在CMakeLists.txt中将library的编译模式设置为SHARED模式,点击AS的编译按钮,在app > build > intermediates > cmake > debug > obj目录下会生成不同CPU架构对应的so文件  

  不同架构的指定:

defaultConfig {    ...           ndk {        abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64", "mips", "mips64"    }}

  ⑤so文件的位置  

   在项目的app > src > main目录下创建jniLibs文件夹,将生成的so文件(带着CPU架构目录)拷贝到jniLibs文件夹中

 

 

参考:https://blog.csdn.net/kong_gu_you_lan/article/details/79091789

转载于:https://www.cnblogs.com/ZeGod/p/9993816.html

你可能感兴趣的文章
OSChina 五一劳动节乱弹 ——女孩子晚上不要出门,发生了这样的事情
查看>>
Spring--通过注解来配置bean
查看>>
pandas 十分钟入门
查看>>
nginx rewrite
查看>>
前端安全系列(一):如何防止XSS攻击?
查看>>
查看Linux并发连接数
查看>>
你是谁不重要,关键是你跟谁!
查看>>
CSS中规则@media的用法
查看>>
pychecker:分析你的python代码
查看>>
我的友情链接
查看>>
DNS显性+隐性URL转发原理
查看>>
我的友情链接
查看>>
网易有道 IP地址、手机号码归属地和身份证 查询接口API
查看>>
鼠标停留在GridView某一行时行的颜色改变
查看>>
系列3:WAS Liberty Profile hello mysql jdbc
查看>>
基础知识:python模块的导入
查看>>
Android MVC之我的实现
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
关于批处理-1
查看>>