Android Studio 打包AAR和第三方静态库
需求
现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库。
方案
创建Android Studio Library Project
创建Project时,记得添加"Include C++ Support",如果没有安装CMake,LLDB和NDK的话,记得安装一下。
项目创建好后,包括以下目录和文件(部分目录或文件是后面添加的):
build.gradle配置
针对app模块的build.gradle进行如下配置:
//改为library apply plugin: 'com.android.library'//读取local.properties里的配置属性add_static_lib.dir,该属性指明libstatic_add.a静态库所在目录 Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) def add_static_lib = properties.getProperty('add_static_lib.dir')android {compileSdkVersion 27defaultConfig {minSdkVersion 16targetSdkVersion 27versionCode 1versionName "1.0"testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"//添加下面ndk {abiFilters 'armeabi-v7a'// these platforms cover 99% percent of all Android devices}externalNativeBuild {cmake {//添加下面arguments '-DANDROID_PLATFORM=android-14','-DANDROID_TOOLCHAIN=clang','-DANDROID_ARM_NEON=TRUE','-DANDROID_STL=gnustl_static',"-DPATH_TO_ADD_STATIC_LIB:STRING=${add_static_lib}"cFlags '-O3', '-fsigned-char' // full optimization, char data type is signedcppFlags '-fsigned-char', "-I${add_static_lib}"}}}//添加下面sourceSets {main {jniLibs.srcDirs = ['src/main/cpp']}}//添加下面externalNativeBuild {cmake {path 'src/main/cpp/CMakeLists.txt'}}//添加下面sourceSets.main {jni.srcDirs = []jniLibs.srcDir 'src/main/libs'}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}} }dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'com.android.support:appcompat-v7:27.1.1'implementation 'com.android.support.constraint:constraint-layout:1.1.0'implementation 'com.android.support:design:27.1.1'testImplementation 'junit:junit:4.12'androidTestImplementation 'com.android.support.test:runner:1.0.2'androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
local.properties配置
针对app模块的local.propertise进行如下配置:
## This file must *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. #Wed May 16 13:05:05 CST 2018 ndk.dir=D\:\\NanRi\\Android\\android-ndk-r16b sdk.dir=C\:\\Users\\suning\\AppData\\Local\\Android\\Sdk//添加如下,指明libstatic_add.a静态库所在目录
add_static_lib.dir=D\:\\NanRi\\Android\\Android-Studio-Project\\ModuleProject\\app\\src\\main\\libs\\
CMakeLists.txt配置
针对app模块下的src\main\cpp\CMakeLists.txt配置如下:
cmake_minimum_required(VERSION 3.4.1)set(PATH_TO_ADD_STATIC_LIBCACHE STRING "" )message(${ANDROID_ABI})file(GLOB CPP_FILES "*.cpp")add_library(native-libSHARED${CPP_FILES} )include_directories(src/main/cpp) include_directories(${PATH_TO_ADD_STATIC_LIB})target_link_libraries(native-libandroidOpenSLES${PATH_TO_ADD_STATIC_LIB}/libstatic_add.a )
导出AAR
导出的AAR所在路径为“app\build\outputs\aar\app-debug.aar”
可以将app-debug.aar改为app-debug.zip,使用压缩工具打开,可以看到如下:
打开jni文件夹,可以看到里面包含了一个armeabi-v7a文件夹,该文件夹包含了libnative-lib.so库
转载于:https://www.cnblogs.com/wuchaodzxx/p/9046370.html
Android Studio 打包AAR和第三方静态库相关推荐
- android打包规范包含第三方库aar,Android Studio 打包AAR和第三方静态库(示例代码)
需求 现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库. 方案 创建Andro ...
- 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )
文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...
- android studio 打包aar 与 引入aar包
一.android studio 打包arr 1. aar包是Android studio 下打包Android工程中src.res.lib后生成的aar文件(与Jar包最大的不同是Jar包不包含资源 ...
- android studio打包aar心得
2019独角兽企业重金招聘Python工程师标准>>> 在比较大的 Android 项目的开发中,我们经常会遇到工程.jar 包等等之间相互引用的方式.一般我们通过在 gradle ...
- android jni通过cmake使用第三方静态库和动态库
google 官方现在推荐使用cmake来构建jni. 本人正好工作需要使用第三方的静态库和动态库,写此文 权当做个记录. 首先修改app的build.gradle文件 ndk {abiFilter ...
- android服务器打包jar,Android Studio打包apk,aar,jar包方法
文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独有的类库包,而jar包是java ...
- android使用fat-aar打包,本地aar和第三方依赖库以及遇到的问题
android使用fat-aar打包,本地aar和第三方依赖库以及遇到的问题 为什么会用到fat-aar 如何使用 打出来的aarlib中存在多个架构,例如x86\x86_64 我在打包okhttp和 ...
- Android studio 更新aar库无效问题解决
Android studio 更新aar库无效问题解决 前言 清缓存 解决 完事 前言 最近开发库的时候带有关联库,也就是每个SDK都依赖了中间的SDK.在我修改了中间SDK的时候,打包成aar,放到 ...
- Android NDK 使用第三方静态库(转)
源:Android NDK 使用第三方静态库 转载于:https://www.cnblogs.com/LittleTiger/p/4556382.html
- (转载)Android studio 导入或依赖第三方库失败
Android studio 导入或依赖第三方库失败 原文链接 在使用第三方库的时候,需要添加很多仓库,以保证可以能正确快速的下载到我们所需要的类库,但是经常会出现各种问题. 以下为个人问题总结 首先 ...
最新文章
- 8款审核AWS帐户安全性的免费工具,你值得拥有
- 哈佛大学研发水下机器人,Science Robotics发表 | AI日报
- 2.1.3 码元、波特、速率、带宽
- 由小游戏跳一跳想到的
- lucene join解决父子关系索引
- AI:Algorithmia《2021 enterprise trends in machine learning 2021年机器学习的企业趋势》翻译与解读
- linux io 分析,Linux 下的I/O性能分析 iotop
- 微信开发基础 获取用户OpenID 列表
- php调用无参数函数可以传入参数
- matlab busy 如何看进度,matlab solve 之后不出结果不报错,状态一直显示busy
- 练手:微博热搜小爬虫
- PostgreSQL的notify 与listen (三)
- 一种对云主机进行性能监控的监控系统及其监控方法
- 外卖侠cps V5.6版本小程序源码_支持多种CPS收益和流量主收益
- 消费者生产者问题,哲学家问题
- CPU寻址能力的理解
- Hibernate写代码流程小结
- CyberDuck是一个很棒的 FTP SFTP图形化工具
- 【按键精灵】实战案例教你POST请求字符串相似度比较
- 老师用计算机教我们画画拼音,《汉语拼音13 ang eng ing ong》第二课时教学设计3...
热门文章
- Python开发人员最喜欢的工具
- 这本值得你认真一读的畅销书特价了
- python编译安装没有c扩展_python – 为什么我在安装simplejson时得到“C扩展无法编译”?...
- 代码平台Github半年发布125项更新,私库无限免费开启(附步骤)
- 【转】onAttachedToWindow()在整个Activity生命周期的位置及使用
- 软件架构师的修炼之道
- 將字串轉換為日期型數據的例子
- How to improve software performance with NEON
- 【转】子弹短信内部技术分享:Redis
- 算法面试题(python)——如何找出数组中出现一次的数