android studio2.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下。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android Studio 3.0 原生支持kotlin 例子详解

    安卓虽然已经成为了移动设备第一操作系统,且影响力也延伸到了汽车和tv端,不过对于谷歌来说,需要依靠Java来做安卓开发一直是一个心病,因为Oracle公司因为java和谷歌在安卓系统上的诉讼搞得心力憔悴. 现在好了,谷歌官方正式支持Kotlin(官方网站 https://kotlinlang.org/,居然没被墙)成为官方认可的安卓开发第一语言,而且从Android Studio 3.0开始,将直接集成Kotlin而无需安装任何的插件.这个语言是由JetBrains去年发明的,它受到欢迎,主要是

  • 浅谈Android Studio3.0更新之路(遇坑必入)

    序言:作为这个世界上走在最前沿的生物"猿",怎么能对新事物一无所知呢,10月26日,随着Android 8.1 Oreo的预览版发布,Android Studio3.0正式版也发布了,作为Android开发的猿们我们应该早就知道谷歌在今年5月的开发者大会上就说了要支持Kotlin语言,所以这次更新一个比较大的点就在于支持Kotlin语言了,下面就跟着LZ的脚步来探索一下AS3.0吧 相信很多人很早就体验过谷歌爸爸放出来的体验版本了,虽然说正式版已经出了,但是很多人也不敢轻易贸然的更新,

  • Android Studio3.0新特性及安装图文教程

    Android Studio是Android的官方IDE.它是专为Android而打造,可以加快您的开发速度,帮助您为每款Android设备构建最优应用. 它提供专为Android开发者量身定制的工具,其中包括丰富的代码编辑.调试.测试和性能分析工具. 一.Android Studio3.0新特性 (1).核心IDE更改 我们将基础IDE从IntelliJ 2016.2升级到2017.1.2,在2016.3和 2017.1中增加了许多新功能, 包括参数提示,语义突出显示,搜索中的即时结果等等.

  • 详解Androidstudio3.0 关于Gradle报错的问题(小结)

    前言 升级Android Studio to 3.0 canary 1版本后,之前一个正常的Project,一直报错,报错内容如下 Error:Failed to complete Gradle execution. Cause: The version of Gradle you are using (3.3) does not support the forTasks() method on BuildActionExecuter. Support for this is available

  • Android Studio升级到3.0 Terminal 中文显示异常解决

    遇到这个问题的话应该是平时终端用的是zsh造成的,如果不是的话,那我也没办法,至少我是这么解决的,希望也可以帮到你. 具体Bug如下所示 内心有一万匹草泥马呼啸而过,捣豉了很久,最终在某群中问了下得到了答案,解决途径如下. 打开~/.zshrc文件,找到如下两行. # You may need to manually set your language environment # export LANG=en_US.UTF-8 我们把第二行取消注释即可,保存之后重启AS即可,熟悉的中文又出现在终

  • 浅谈Android Studio 3.0 的一些小变化

    前言 一大早还在北京拥挤的地铁里,我的CTO闫哥在微信里给我发了一条信息:Android Studio 3.0发布了. 为什么会这么关注Android Studio 3.0 的版本发布呢?主要是因为公司即将开发的新app准备使用Kotlin语言,而Android Studio 3.0 已经把Kotlin的语言支持内置进去了,这样就省去了很多的麻烦,如果你还没接触过Kotlin语言,可以去百度一下 他们的官网,如果你现在使用的Java语言,那么你真是太幸运了,因为Kotlin对于你来说,将会非常简

  • 详解升级Android Studio3.0时遇到的几个问题

    今天收到了Android Studio3.0更新推送,在升级过程中遇到几个问题,在这里把问题和解决方法记录下,方便要升级的童鞋.如果还有童鞋遇到不同的问题,也可以评论下我做下记录 1.gradle打包,自定义apk名称代码报错(Cannot set the value of read-only property 'outputFile' ) 报错 Error:(56, 0) Cannot set the value of read-only property 'outputFile' for

  • android studio2.3如何编译动态库的过程详解

    前言 最近在工作中需要编译android下的动态库,本以为是一件简单的事,没想到因为工具,以及google本身被墙的原因,折腾了好久. 在windows外的平台搞事情,寿命都得缩短. 过程如下 一种方案是用eclipse+ndk+adt插件,总之是eclipse下适配android ndk的一套东西,我搜了一些文档,看到一大堆冗余的名字,文件,感觉不对味,放弃. 另一种方案是android studio,初看觉得是大公司出品,且针对的是自家系统的IDE,能保持个一贯性,没想到各个版本差别挺大,一

  • C语言编程gcc如何生成静态库.a和动态库.so示例详解

    目录 一.什么是静态库和动态库 二.gcc生成.a静态库和.so动态库 1.生成静态库(.a) 1.1编辑生成例子程序hello.h.hello.c和main.c 1.2将hello.c编译成.o文件 1.3由.o文件创建静态库 1.4在程序中使用静态库 1.5验证静态库的特点 2.生成动态库(.so) 2.1由.o文件创建动态库文件 2.2在程序中使用动态库 三.实例 1.实例1 1.1代码 1.2 静态库.a文件的生成与使用 1.3 动态库.so文件的生成与使用 2.实例2 2.1代码 2.

  • Android动态使用VectorDrawable过程详解

    目录 导言 案例演示 问题解决 接上篇继续,讲解使用动态的VectorDrawable 上篇链接: Android三种方式生成矢量图之VectorDrawable类使用详解 导言 VectorDrawable有两个优点,一个是缩放不失真,另一个是使PNG的体积,大幅度减小,那么如果仅仅只有这两个优点,其实我是并不需要使用VectorDrawable,或者说,这并不能成为我们使用VectorDrawable的重要原因. 那我们使用它的重要原因是什么呢? 那就是VectorDrawable可以使用动

  • Android Studio3.2中导出jar包的过程详解

    1.)说明. 本项目是来自github上的一个项目roottools (https://github.com/Stericson/RootTools),这里只是想本地编译后输出下jar包供自己进行使用. 2.)操作步骤. 步骤1)按之前你熟悉的方式进行开发待输出为jar的项目. 步骤2) 一般的gradle设置,比如gradle版本,android sdk的编译,目标,最小要求版本..还有compileOptions的jdk版本设置等. 步骤3)gradle中的apply plugin设置: a

  • android中使用react-native设置应用启动页过程详解

    一.背景 在我们使用react-native进行编写代码的时候,当启动应用的时候,我们会看到如下界面 然而,这样的启动界面是非常的不又好,那么我们该怎么进行处理启动界面呢?有如下两种方案 二.方案 1.使用第三方库(react-native-splash-screen) 2.ios系统设置(仅适用ios系统,在这里不做讲解) 三.具体实现方式 一).react-native-splash-screen 1.安装 npm i react-native-splash-screen --save 2.

  • Spring JDK动态代理实现过程详解

    这篇文章主要介绍了Spring JDK动态代理实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1. 创建项目 在 MyEclipse 中创建一个名称为 springDemo03 的 Web 项目,将 Spring 支持和依赖的 JAR 包复制到 Web 项目的 WEB-INF/lib 目录中,并发布到类路径下. 2. 创建接口 CustomerDao 在项目的 src 目录下创建一个名为 com.mengma.dao 的包,在该包下

  • Python绘制动态水球图过程详解

    先来看看绘制的动态水球图: 没有安装PyEcharts的,先安装PyEcharts: # 安装pyecharts模块,直接安装就是最新的版本pip install pyecharts 安装好PyEcharts之后,就可以将需要使用的模块进行导入: from pyecharts import options as optsfrom pyecharts.charts import Liquid 水球图数据很简单,就是一个完成率数字,所以不用定义或导入,也无需做转换. 接下来就可以绘制水球图了: c

  • Python使用eval函数执行动态标表达式过程详解

    英文文档: eval(expression, globals=None, locals=None) The arguments are a string and optional globals and locals. If provided, globals must be a dictionary. If provided, localscan be any mapping object. The expression argument is parsed and evaluated as

  • Activiti如何动态获取流程图过程详解

    本文中使用的activiti版本是5.22.0 一.绘图原理 activiti中提供了一个可以用来绘制流程图的类DefaultProcessDiagramGenerator,这个类在5.22.0及以上的版本中 是以一个单独jar包的方式提供的,所以还需要引入相应的依赖. <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-image-generator</artifactI

  • Android notifyDataSetChanged() 动态更新ListView案例详解

    有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sc

随机推荐