android studio2.3如何编译动态库的过程详解
发布时间 - 2026-01-11 03:00:47 点击率:次前言

最近在工作中需要编译android下的动态库,本以为是一件简单的事,没想到因为工具,以及google本身被墙的原因,折腾了好久。
在windows外的平台搞事情,寿命都得缩短。
过程如下
一种方案是用eclipse+ndk+adt插件,总之是eclipse下适配android ndk的一套东西,我搜了一些文档,看到一大堆冗余的名字,文件,感觉不对味,放弃。
另一种方案是android studio,初看觉得是大公司出品,且针对的是自家系统的IDE,能保持个一贯性,没想到各个版本差别挺大,一时换一套编译底层,一时换一套构建系统,菜单变换也大,姑且算你迭代很快,不过都出来这么多年了,为啥就不能像visual studio看齐?搞得我在网上搜各种文档还得仔细区分版本,特别是你不熟悉时,简直是斗智斗勇。
1、下载android-ndk,安装。
2、下载android studio 2.3,安装过程会提示你选择ndk目录以及sdk目录,自带了android sdk,建议就用它自带的sdk,不然十有八九又搞出事情。
3、安装好后启动,界面上第一行是创建新工程,创建后会卡上10几分钟进不去,因为android studio需要下载gradle,而国内是下载不了的,于是她妹的卡了,连个提示都没有,vpn重连也没用。所以得去gradle官 网下,这里你还得选择gradle版本,如何查看版本,又是一件蛋疼的事。我是去到C:\Users\用户名\.gradle\wrapper\dists下看到gradle-3.3-all文件夹,选择了下载3.3-all版本,然后把下载到的压缩文件放到 C:\Users\用户名\.gradle\wrapper\dists\gradle-3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9下,才终于顺利通过这一步。
4、创建工程界面,选择c++ support。
5、进去之后,你还有2个东西要下。去到菜单栏tools/android/sdkmanager打开,默认会选中左边导航栏的android sdk选项,右边界面有3个标签sdk platform,sdk tools,sdk update sites,选择中间的sdk tools, 下载cmake,lldb。稍后将用cmake构建c/c++文件。2.3之前的版本还需要配置gradle关联到CMakeLists.txt文件,现在不需要了,所以你如果网上搜到一大堆配置文档就跳过吧。
6、下载后,经常会便秘,你很可能需要重启android studio, 不然新下的库找不到,同步是没有用的。
7、接下来需要配置路径了。首先左边是project视图,在文件树下找到local.properties,追加ndk的路径,虽然你已经在创建工程时选过,但这里还是得填:
ndk.dir=D\:\\sdk\\Android\\android-ndk-r14b
8、接下来添加c/c++源码文件,你在左边的project视图下,找到app/src/main/cpp文件夹,你的源码需要放到这个目录下,去硬盘上找到对应的目录把代码拷进去。
然后在视图右键点击app目录,应该有个synchronize ‘app'选项,点击同步,在cpp下应该可以刷出来你新加的源码了。这里如果是新建工程,记得把native-lib.cpp示例文件删除,不要直接在硬盘删除,通过 ide里右键点击delete,不然很可能又抽一次疯。
你以为完了?远着呢。在src目录下,找到CMakeLists.txt文件,手动添加你的.c或.cpp文件,没错,就是这么任性,你有多少个c文件,就要加多少行如下:
add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). src/main/cpp/lapi.c src/main/cpp/lauxlib.c src/main/cpp/lbaselib.c )
如以上在add_library下添加源码。然后你还得添加头文件目录如下:
# Specifies a path to native header files. include_directories(src/main/cpp/)
与add_library并列,这里根据你的源码文件目录一个一个添加吧。我在右键选项里发现有new,创建新文件,有import,导入eclipse工程,就是没有add exisiting files选项加入已存在源码...
9、接下来你可能需要更改动态库名,还是在CMakeLists.txt文件里搜索native-lib,都替换为你需要的名字,具体含义自己去搞清楚吧,不赘述了。
10、最右边的垂直标签条,点击build variants,把debug更换为release,编译release版本。
11、点击菜单栏build/make moudle...,应该能生成.so文件了。位置在..\app\build\intermediates\cmake\release\obj下。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# android
# studio编译
# studio编译so
# Studio 编译报错:compileSdkVersion ''android-24'' requi
# Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库
# 完美解决Android Studio集成crashlytics后无法编译的问题
# Android Studio gradle 编译提示‘default not found’ 解决办法
# 使用Android studio创建的AIDL编译时找不到自定义类的解决办法
# Mac OS下为Android Studio编译FFmpeg解码库的详细教程
# Android Studio打包jar及aar包的方法
# Android studio中生成引用.aar和.jar的方法详解
# android studio编译jar包或者aar包的方法教程详解
# 还得
# 我在
# 文档
# 去到
# 右键点击
# 的是
# 我是
# 没想到
# 是在
# 有个
# 目录下
# 又是
# 就不
# 找不到
# 为你
# 你在
# 这么多
# 网上
# 右键
# 你不
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何实现API版本控制_Laravel API版本化路由设计策略
个人网站制作流程图片大全,个人网站如何注销?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel如何处理和验证JSON类型的数据库字段
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
Linux系统命令中screen命令详解
移动端脚本框架Hammer.js
html如何与html链接_实现多个HTML页面互相链接【互相】
制作旅游网站html,怎样注册旅游网站?
JS经典正则表达式笔试题汇总
WordPress 子目录安装中正确处理脚本路径的完整指南
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
Laravel用户密码怎么加密_Laravel Hash门面使用教程
如何在万网ECS上快速搭建专属网站?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
佛山企业网站制作公司有哪些,沟通100网上服务官网?
Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
轻松掌握MySQL函数中的last_insert_id()
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
高端建站如何打造兼具美学与转化的品牌官网?
如何用美橙互联一键搭建多站合一网站?
Laravel怎么实现模型属性的自动加密
如何确保西部建站助手FTP传输的安全性?
香港服务器如何优化才能显著提升网站加载速度?
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
如何在万网主机上快速搭建网站?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
进行网站优化必须要坚持的四大原则
JavaScript模板引擎Template.js使用详解
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Android Socket接口实现即时通讯实例代码
Laravel集合Collection怎么用_Laravel集合常用函数详解
如何在阿里云域名上完成建站全流程?
laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
七夕网站制作视频,七夕大促活动怎么报名?
浅谈redis在项目中的应用
Laravel怎么使用Intervention Image库处理图片上传和缩放
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何在Windows服务器上快速搭建网站?
如何快速重置建站主机并恢复默认配置?
如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】

