博客
关于我
Android Studio NDK 如何生成so
阅读量:507 次
发布时间:2019-03-07

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

Android Studio NDK 如何生成 SO 文件

通过 Android NDK (Native Development Kit) 您可以将 C/C++ 代码集成到 Android 应用程序中。想要了解如何在 Android Studio 中使用 NDK 生成 SO 文件(Shared Object 文件)呢?下面就让我们一步步了解吧。

加入 NDK 依赖

首先,您需要在项目中加入 NDK 依赖。可以通过以下几种方式完成:

  • 通过 SDK 套件管理

    • 打开 Android Studio
    • 选择 File > Settings > SDK Manager
    • 打开 یزм.ªAndroid NDK 下的某个版本,点击 Install 按钮
    • 安装完成后,NDK 会自动添加到您的项目中
  • 手动添加

    • 打开 build.gradle
    • scripts 部分添加 NDK 配置:
      buildscript {    repositories {        jcenter()    }    build directories {        ...    }}
  • 编写 C/C++ 代码

    接下来编写 NDK 支持的代码。我们需要创建一个 Java 类,并使用 NDK 注解,使其能够调用 C/C++ 函数。

    // cautioned: 一定要确保您的 Java 包命名与 C/C++ 源文件编译出的 shared library 包名一致package com.example.ndksample;public class MyNdkUtil {    // 注意:在 `static { System.loadLibrary("native-lib"); }` 中 native-lib 是生成出来的 .so 文件名    static {        System.loadLibrary("native-lib");    }    // 使用 NDK 注解标记 C/C++ 方法    @NativeMethod    public native String stringFromJNI();}

    编写 C/C++ 源文件

    编写一个与 stringFromJNI() 方法对应的 C/C++ 函数

    // src/org/first Cuban/MyNativeLib/NativeLib.cpp#include 
    #include
    extern "C"JNIEXPORT jstring JNICALLJava_com_example_ndksample_MyNdkUtil_stringFromJNI(JNIEnv *env, jobject instance) { char *helloStr = "Hello from C++warz.ndarray!"; // 这里添加了一个 有趣的注释 return env->NewStringUTF(helloStr);}

    编译生成 SO 文件

    现在我们需要使用 C++ 编译器来生成 SO 文件。以下是一些关键步骤:

  • Configuring Build…

    • 右键点击项目

    • 选择 Properties

    • 打开 Android 套件的 Ndk 选项卡

    • 确认 **CXX_COMPILE_COMMANDCXXLINK_COMMAND` 是否正确配置

  • 编译

    • 右键点击项目,选择 Menu contacting

    • 选择 Compile

    • 确认 Compiling src/.../NativeLib.cpp

    • 系统会自动生成 SO 文件(比如 lib/armeabi-v7a/native-lib.so

  • 验证

    • 启动 Android Studio 的仿真环境或连接实际设备
    • 在 MainActivity 中添加调用:
  • // MainActivity.java@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    TextView tv = (TextView) findViewById(R.id.hello);        // 初始化 NDK 类    MyNdkUtil myNdkUtil = new MyNdkUtil();    tv.setText(myNdkUtil.stringFromJNI());}
    1. 添加使用权限(如果有需要)

      在 AndroidManifest.xml 中添加权限:

    2. 导入 SO 文件到项目中

      最后,需要将 SO 文件导入项目的 libs 目录中:

      • 将 SO 文件复制到项目的 app/src/debug/jniLibs/armeabi-v7a/
      • 确保 CMakeLists.txt 中配置合适的 SONAMEINSTALL_DIR

      通过以上步骤,您应该能成功使用 NDK 生成并使用 SO 文件。要更好地适合您的项目,建议将所有 Java 文件打包成 JAR 格式,以及把相应的 SO 文件一起分发给使用者。

      记住,所有东西都需要以正确的结构编译和签名。如果遇到错误,具体错误信息通常能指出哪里出了问题。

    转载地址:http://tlfjz.baihongyu.com/

    你可能感兴趣的文章
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLog类库使用探索——详解配置
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>
    NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
    查看>>
    NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
    查看>>