需求

现在有一个第三方库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和第三方静态库相关推荐

  1. android打包规范包含第三方库aar,Android Studio 打包AAR和第三方静态库(示例代码)

    需求 现在有一个第三方库libstatic_add.a和对应的头文件static.h,要求封装一个Module,该Module依赖这个静态库,要求打包的Module包含该静态库. 方案 创建Andro ...

  2. 【Android NDK 开发】NDK 交叉编译 ( Ubuntu 中交叉编译动态库 | Android Studio 中配置使用第三方动态库 )

    文章目录 I . 动态库 与 静态库 II . 编译动态库 III. Android Studio 使用第三方动态库 IV . Android Studio 关键代码 V . 博客资源 I . 动态库 ...

  3. android studio 打包aar 与 引入aar包

    一.android studio 打包arr 1. aar包是Android studio 下打包Android工程中src.res.lib后生成的aar文件(与Jar包最大的不同是Jar包不包含资源 ...

  4. android studio打包aar心得

    2019独角兽企业重金招聘Python工程师标准>>> 在比较大的 Android 项目的开发中,我们经常会遇到工程.jar 包等等之间相互引用的方式.一般我们通过在 gradle ...

  5. android jni通过cmake使用第三方静态库和动态库

    google 官方现在推荐使用cmake来构建jni. 本人正好工作需要使用第三方的静态库和动态库,写此文 权当做个记录. 首先修改app的build.gradle文件 ndk {abiFilter ...

  6. android服务器打包jar,Android Studio打包apk,aar,jar包方法

    文本我们将讲解android studio打包apk,aar,jar包的相关知识.apk包就是android系统的安装包,这里没什么好说的,aar包是android中独有的类库包,而jar包是java ...

  7. android使用fat-aar打包,本地aar和第三方依赖库以及遇到的问题

    android使用fat-aar打包,本地aar和第三方依赖库以及遇到的问题 为什么会用到fat-aar 如何使用 打出来的aarlib中存在多个架构,例如x86\x86_64 我在打包okhttp和 ...

  8. Android studio 更新aar库无效问题解决

    Android studio 更新aar库无效问题解决 前言 清缓存 解决 完事 前言 最近开发库的时候带有关联库,也就是每个SDK都依赖了中间的SDK.在我修改了中间SDK的时候,打包成aar,放到 ...

  9. Android NDK 使用第三方静态库(转)

    源:Android NDK 使用第三方静态库 转载于:https://www.cnblogs.com/LittleTiger/p/4556382.html

  10. (转载)Android studio 导入或依赖第三方库失败

    Android studio 导入或依赖第三方库失败 原文链接 在使用第三方库的时候,需要添加很多仓库,以保证可以能正确快速的下载到我们所需要的类库,但是经常会出现各种问题. 以下为个人问题总结 首先 ...

最新文章

  1. 8款审核AWS帐户安全性的免费工具,你值得拥有
  2. 哈佛大学研发水下机器人,Science Robotics发表 | AI日报
  3. 2.1.3 码元、波特、速率、带宽
  4. 由小游戏跳一跳想到的
  5. lucene join解决父子关系索引
  6. AI:Algorithmia《2021 enterprise trends in machine learning 2021年机器学习的企业趋势》翻译与解读
  7. linux io 分析,Linux 下的I/O性能分析 iotop
  8. 微信开发基础 获取用户OpenID 列表
  9. php调用无参数函数可以传入参数
  10. matlab busy 如何看进度,matlab solve 之后不出结果不报错,状态一直显示busy
  11. 练手:微博热搜小爬虫
  12. PostgreSQL的notify 与listen (三)
  13. 一种对云主机进行性能监控的监控系统及其监控方法
  14. 外卖侠cps V5.6版本小程序源码_支持多种CPS收益和流量主收益
  15. 消费者生产者问题,哲学家问题
  16. CPU寻址能力的理解
  17. Hibernate写代码流程小结
  18. CyberDuck是一个很棒的 FTP SFTP图形化工具
  19. 【按键精灵】实战案例教你POST请求字符串相似度比较
  20. 老师用计算机教我们画画拼音,《汉语拼音13 ang eng ing ong》第二课时教学设计3...

热门文章

  1. Python开发人员最喜欢的工具
  2. 这本值得你认真一读的畅销书特价了
  3. python编译安装没有c扩展_python – 为什么我在安装simplejson时得到“C扩展无法编译”?...
  4. 代码平台Github半年发布125项更新,私库无限免费开启(附步骤)
  5. 【转】onAttachedToWindow()在整个Activity生命周期的位置及使用
  6. 软件架构师的修炼之道
  7. 將字串轉換為日期型數據的例子
  8. How to improve software performance with NEON
  9. 【转】子弹短信内部技术分享:Redis
  10. 算法面试题(python)——如何找出数组中出现一次的数