android studio 2.3 编译动态库
工作需要编译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 2.3 编译动态库的更多相关文章
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!从此在andrid中自由使用 图像匹配、识别、检测
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. (原创:转载声明出处:http://www.cnblogs.com/lin ...
- android studio 使用 jni 编译 opencv 完整实例 之 图像边缘检测!
目录: 1,过程感慨: 2,运行环境: 3,准备工作: 4,编译 .so 5,遇到的关键问题及其解决方法 6,实现效果截图. ------------------------------------- ...
- ndk学习8: 编译动态库
目录: 手工编译动态库 ndk-build编译动态库(Eclipse环境) 手工编译静态库 老规矩还是先手工操作,知其然并知其所以然 需要用到的核心命令: gcc -g -c -fpic -W ...
- 【转】实践最有效的提高Android Studio运行、编译速度方案
原文:https://blog.csdn.net/xwh_1230/article/details/60961723 实践最有效的提高Android Studio运行.编译速度方案 最有效提升Andr ...
- Linux gcc编译(动态库,静态库)
1. linux 库路径: /lib , /usr/lib , /usr/local/lib 2.linux 编译静态库 a.编写源文件vi pr1.c void print1(){ print ...
- studio_ 优化Android Studio 启动、编译和运行速度?
http://www.admin10000.com/document/6842.html: 作为一名 Android 程序员,选择一个好的 IDE 工具可以使开发变得非常高效,很多程序员喜欢使用 Go ...
- 如何优化 Android Studio 启动、编译和运行速度?
作为一名 Android 程序员,选择一个好的 IDE 工具可以使开发变得非常高效,很多程序员喜欢使用 Google 的 Android Studio来进行开发,但使用起来有时会出现卡顿等问题.本文介 ...
- gcc 动态编译 动态库路径
gcc 动态编译(共享库) 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令优点:体积小,编译快缺点:依赖性高 代码如下: [root@74-82-173-21 ...
- Linux:编译动态库时遇到的错误relocation R_X86_64_32 against `a local symbol'
编译动态库时遇到如下错误: ... ... relocation R_X86_64_32 against `a local symbol' can not be used when making a ...
随机推荐
- Linux系统下基本命令
<Linux系统下基本命令> Linux系统下基本命令: 要区分大小写 uname 显示版本信息(同win2K的 ver) dir 显示当前目录文件,ls -al 显示包括隐藏文件(同wi ...
- JavaScript中异步编程
一 关于事件的异步 事件是JavaScript中最重要的一个特征,nodejs就是利用js这一异步而设计出来的.所以这里讲一下事件机制. 在一个js文件中,如果要运行某一个函数,有2中手段,一个就是直 ...
- C#获取当前时间详解
[转]C#获取当前日期时间(转) http://blog.163.com/ljq086@126/blog/static/549639712010112921658843/ 我们可以通过使用DataT ...
- innodb关键特性之double write
# 脏页刷盘的风险 两次写的原理机制 1.解决问题 2.使用场景 3.doublewrite的工作流程 4.崩溃恢复 # doublewrite的副作用 1.监控doublewrite负载 2.关闭d ...
- (转)eclipse导入Gradle项目
场景:最近在学习spring实战(第4版),下载完源码后发现不是maven工程,使用Gradle构建. 1准备工作 1.1 安装插件 打开eclipse,Help——Marketplace,搜索bui ...
- 【HTML】html5新属性-datalist
摘要: 为实现输入域自动填充的效果 方法一: jquery-ui的autocomplete方法, 不是jquery 自带的方法. 方法二: 采用html5新特性,datalist,例子如下:坏处很明显 ...
- CSS随笔2
1. css中: a:link { /*表示普通的,未被访问的链接状态*/ color: black;} a:visited { /*表示链接被访问过后的状态*/ color: bluev ...
- RobotFramework自动化测试框架的基础关键字(四)
1.1.1 如何使用for循环 不管在哪种编程语言中,for循环都是必不可少的,在Robot Framework中,我们也可以使用for循环来做遍历处理. 我们用for循环对一个列表进行 ...
- CentOS安装配置MySql数据库
CentOS版本7.2,MySql版本5.7 1.下载MySql安装源 wget https://dev.mysql.com/get/mysql57-community-release-el7 ...
- bzoj 3594: [Scoi2014]方伯伯的玉米田
3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec Memory Limit: 128 MB Submit: 1399 Solved: 627 [Submit][ ...