Android Studio 编译C/C++生成.so文件

这篇具有很好参考价值的文章主要介绍了Android Studio 编译C/C++生成.so文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前期准备:下载NDK、CMake

android 编译so文件,android studio,android,ide,Powered by 金山文档
方法一:使用AndroidStudio自动创建Native C/C++ 项目
  1. 创建新项目

android 编译so文件,android studio,android,ide,Powered by 金山文档

创建项目后,会默认生成两个文件和相关默认配置.

android 编译so文件,android studio,android,ide,Powered by 金山文档
  1. 若创建好C++项目后报错,则需要配置一下NDK路径

android 编译so文件,android studio,android,ide,Powered by 金山文档

如果上图配置页面显示无法配置,则需要在local.properties中手动配置NDK。

android 编译so文件,android studio,android,ide,Powered by 金山文档

3.点击 Build -> Make Project,编译完成后,可以在编译好后的build目录下查看生成的“.so”文件。

android 编译so文件,android studio,android,ide,Powered by 金山文档
方法二:ndk-build 编译C生成.so文件

1. 创建一个Java类并添加本地方法

public class NDKStudyTools{
    //创建一个native 方法
    public native static StringstringFromJIN();
}

2. 点击:Build -> make Project编译项目

3. 构建好后,buid 目录下会生成NDKStudyTools.class 文件(不同as 版本对应的详细目录会有不同,不过都在build 目录下,找下就有)

android 编译so文件,android studio,android,ide,Powered by 金山文档

4. 创建C++ .h 头文件

(1)打开Android Studio -> Terminal ,使用命令进入到项目main目录:cd app\src\main

    (2)使用命令创建 .h 的头文件(如果提示“找不到 javah 命令”,需要配置下jdk的环境变量)

javah -d jni -classpath ...\classes com.junker.study.c.yagain.NDKStudyTools.class
命令字段介绍:
javah:生成头文件
-d jni:在当前定位到的目录下创建一个 jni 文件夹
-classpath ...\classes 指定要生成头文件的字节码文件目录,即生成的 com.junker.study.c.yagain.NDKStudyTools.class 字节码目录
注意:这个 classes 文件目录可能太长,输入麻烦,我们可以找到 debug 文件夹,右键 copy path,复制文件目录即

       (3)回车之后,会在mian目录下创建一个jni文件夹并生成一个 "xxx.h"的头文件(头文件命名也是按照包名加字节码名的规范,以下划线连接)

android 编译so文件,android studio,android,ide,Powered by 金山文档

5. 在jni目录下创建一个 .c 文件并实现com_junker_study_c_yagain_NDKStudyTools.h 头文件中的本地方法

6. jni 目录下创建 .mk 文件

(1)创建 Android.mk 文件并添加配置(注意:不要在文件中添加注释字符,使用 ndk-build 命令编译时会报错)。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:=app
LOCAL_SRC_FILES:=ndk_test.c
include $(BUILD_SHARED_LIBRARY)

参数说明:(注:以下不用拷贝到文件中,此处只做说明)
LOCAL_PATH := $(call my-dir):
设置工作目录,它用于在开发tree中查找源文件。宏my-dir由Build System提供,会返回Android.mk文件所在的目录
include $(CLEAR_VARS):
CLEAR_VARS变量由Build System提供。指向一个指定的GNU Makefile,由它负责清理LOCAL_xxx类型文件,但不是清理LOCAL_PATH,所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能便面相互影响,这一操作必须有。
LOCAL_MODULE:=app:
模块必须定义,以表示Android.mk中的每一个模块,名字必须唯一且不包含空格,Build System会自动添加适当的前缀和后缀。例如,demo,要生成动态库,则生成libdemo.so。但请注意:如果模块名字被定义为libabd,则生成libabc.so。不再添加前缀。
LOCAL_SRC_FILES := ndk_test.c:
指定参与模块编译的C/C++源文件名。不必列出头文件,build System会自动帮我们找出依赖文件。缺省的C++源码的扩展名为.cpp。
include $(BUILD_SHARED_LIBRARY):
BUILD_SHARED_LIBRARY是Build System提供的一个变量,指向一个GUN Makefile Script。它负责收集自从上次调用include $(CLEAR_VARS)后的所有LOCAL_xxxxinx。并决定编译什么类型
1. BUILD_STATIC_LIBRARY:编译为静态库
2. BUILD_SHARED_LIBRARY:编译为动态库
3. BUILD_EXECUTABLE:编译为Native C可执行程序
4. BUILD_PREBUILT:该模块已经预先编译

(2)创建 Application.mk 文件并添加配置(注意:不要在文件中添加注释字符,使用 ndk-build 命令编译时会报错)。

APP_ABI := all

参数说明:(注:以下不用拷贝到文件中,此处只做说明)
APP_ABI := all
默认生成支持的多种类型.so

示例图:

android 编译so文件,android studio,android,ide,Powered by 金山文档

7. 生成so库

(1) 使用 Terminal 命令进入到项目jni目录:cd app\src\main\jni

(2)使用 ndk-build 命令生成 so 库( 如果提示没有,需要配置下ndk的环境变量)

8、使用so库

(1)为了能加载 app.so 库,需要在主module下的 build.gradle 文件夹的 android 下添加如下代码:

sourceSets{
    main() {
        jniLibs.srcDirs =['src/main/libs']
        jni.srcDirs =[] //disable automatic ndk-build call, which ignore our Android.mk
    }
}

(2)在 NDKStudyTools.java 中加载 so 库(注:库名称不需要写 libapp,只用写 app,也就是去掉lib前缀)

public class NDKStudyTools{
    // 动态导入 so 库
    static {
        System.loadLibrary("app");
    }
    //创建一个native 方法
    public native static StringstringFromJIN();
}

(3)验证使用,跑一跑run文章来源地址https://www.toymoban.com/news/detail-596150.html

android 编译so文件,android studio,android,ide,Powered by 金山文档

到了这里,关于Android Studio 编译C/C++生成.so文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Studio 进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库

    1.首先认识一下NDK。 (1)什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,

    2024年02月11日
    浏览(35)
  • Android Studio生成.jks文件

    字面意思可以理解为java的密钥库,是一个用来存放密钥和证书的仓库。而keytool就是密钥和证书的管理工具,它把key(密钥)和certificate(证书)存放在一个叫keystore的文件中。具体内容可以参考JKS_密钥对生成与读取方法。 1、打开android studio软件,点击上方Build - Generate Signe

    2024年02月02日
    浏览(28)
  • Android so库开发——Android Studio调用so库(二)

            在 Android Studio生成自己的so库 中已经创建了自己的so库,这是一个JNI规范的so库,可以直接将so库放到libs中,并按照上面文章中MainActivity中的调用方法使用。 1、build.gradle(app)配置 2、加载so库中方法         在Sudio中方法名虽然显示红色,但不影响使用。 3、

    2024年02月09日
    浏览(36)
  • Android studio打包生成jar包文件

    将应用模块application转换成库模块library后生成jar包 1、首先打开build.gradle文件,注意这里是module目录下的,在这个文件我们需要做两个操作: 将com.android.application改成com.android.library 注释掉applicationId 2、打开清单文件AndroidManifest.xml 首先将application配置的属性去掉 然后再去掉

    2024年02月01日
    浏览(29)
  • Android Studio 生成 keystore 签名文件及打包验证流程

    Android应用必须进行 数字签名 才可以发布,也就是我们平时所说的使用证书打包然后上传市场,其中数字证书的私钥由应用开发者持有。 生成签名的方式有很多种,今天我们来讲如何通过AS创建签名流程。 1、在菜单栏中,依次点击 Build - Generate Signed Bundle/Apk...(生成签名) 2、

    2024年02月01日
    浏览(37)
  • Android Studio 创建项目不自动生成BuildConfig文件

    今天在AS上新建项目发现找不到BuildConfig文件,怎么clear都不行。通过多方面查找发现原来gradle版本不同造成的,Gradle 8.0默认不生成 BuildConfig 文件。 如上图,8.0版本是没有source文件夹 上图是低于8.0版本有source文件夹 针对这个问题,有两种解决办法        方法一:降低Gr

    2024年01月22日
    浏览(38)
  • IDE - Android Studio/Xcode历史版本下载

    最近升级开发工具老是遇到各种兼容性问题导致需要降回老版本,Xcode历史版本下载方便倒还好,Android Studio就麻烦了,一开始找到的官方历史版本下载还不全。这里整理一些历史版本信息方便下载,后续会持续更新。 历史版本数据来源Android Studio官方(语言必须选English,不

    2024年02月09日
    浏览(43)
  • Android SDK 上手指南|| 第三章 IDE:Android Studio速览

    Android Studio是Google官方提供的IDE,它是基于IntelliJ IDEA开发而来,用来替代Eclipse。不过目前它还属于早期版本,目前的版本是0.4.2,每个3个月发布一个版本,最近的版本由2014年1月发布。 Android Studio包括了所有开发Android app所需要的工具,但是它并不成熟,所以如果需要稳定还

    2024年02月11日
    浏览(39)
  • Android Studio项目打包生成可安装在自己手机上的App安装包文件

    点击上方 “ 码农的后花园 ”, 选择 “ 星标 ”  公众号 精选文章,第一时间送达 Android 打包 其实我们现在Android手机上所有的应用都是.apk文件,只不过分为系统自带和第三方,一个.apk文件本质其实就对应于你手机上的一个应用App程序,比如支付宝,淘宝。 .apk文件就是一个

    2024年02月05日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包