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

需求

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

方案

创建Android Studio Library  Project

创建Project时,记得添加"Include C++ Support",如果没有安装CMake,LLDB和NDK的话,记得安装一下。

项目创建好后,包括以下目录和文件(部分目录或文件是后面添加的):

9a3f46ca62fd20a2b4f0434c99ef789d.png

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 27

defaultConfig {

minSdkVersion 16

targetSdkVersion 27

versionCode 1

versionName "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 signed

cppFlags ‘-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 false

proguardFiles 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_LIB

CACHE STRING ""

)

message(${ANDROID_ABI})

file(GLOB CPP_FILES "*.cpp")

add_library(

native-lib

SHARED

${CPP_FILES}

)

include_directories(src/main/cpp)

include_directories(${PATH_TO_ADD_STATIC_LIB})

target_link_libraries(

native-lib

android

OpenSLES

${PATH_TO_ADD_STATIC_LIB}/libstatic_add.a

)

导出AAR

导出的AAR所在路径为“app\build\outputs\aar\app-debug.aar”

可以将app-debug.aar改为app-debug.zip,使用压缩工具打开,可以看到如下:

af14f23f4ff66f8af2c7a35873fdefae.png

打开jni文件夹,可以看到里面包含了一个armeabi-v7a文件夹,该文件夹包含了libnative-lib.so库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564127.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 四种类型转换运算符

隐式类型转换是安全的,显式类型转换是有风险的,C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。 但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有…

Android leak内存,GitHub - jin870132/memoryleakdemo: 安卓内存泄露几种常见形式及解决方案...

安卓内存泄露几种常见形式及解决方案一.前言1.内存溢出与内存泄露内存溢出(oom),是指程序在申请内存时,没有足够的内存空间供其使用,出现oom;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。内存泄…

第二批鸿蒙手机排行,鸿蒙系统第二批升级机型有哪些 鸿蒙系统第二批升级机型名单一览...

华为6月2日召开开启鸿蒙发布会,很多华为手机的用户都想第一时间用上鸿蒙手机系统,今天就给大家带来鸿蒙系统第二批升级机型名单一览,一起来看看吧鸿蒙系统第二批升级机型名单一览具体机型:HUAWEI Mate20 SeriesHUAWEl nova 8 Seri…

VC2010 项目的创建

在VC2010中创建一个项目 1 . 创建新项目。打开我们的VC2010,点工具栏第一个按钮(New Project),或者菜单 File -> New -> Project…,或者按快捷键 CtrlShiftN,几种方式都可以。 2 . 在 “New Project…

html5教学案例撰写,怎样撰写教育教学案例

怎样撰写教育教学案例教学是教师的教和学生的学所组成的一种人类特有的人才培养活动。那么,怎样撰写教育教学案例呢?下面是小编收集整理的撰写教育教学案例的相关内容,希望对您有所帮助!1.撰写教育教学案例的思想准备要写好教育、教学案例,首…

error C2143: syntax error : missing ';' before '}'

我们在运行C程序的时候经常会遇到错误&#xff0c;如果你遇到了这个错误&#xff1a;error C2143: syntax error : missing ‘;’ before ‘}’&#xff0c;那麽我将帮你解决这个错误。 错误展示 完整代码 #include <stdio.h> #define exchange(a,b){int t; ta;ab;bt} …

VC2010运行C程序时黑框一闪就没

黑框一闪就没如何解决的呢&#xff1f; 首先我们要知道为什么黑框一闪就没 闪一下是因为它执行完输出函数(printf)后直接返回系统了。 解决办法 在程序里加一个system(“pause”)&#xff0c;这个是调用系统函数&#xff0c;到时候会显示"按任意键退出"。 使用方…

厦门大学计算机科学与技术学院考研分数线,2020年厦门大学计算机科学与技术考研经验分享...

原标题&#xff1a;2020年厦门大学计算机科学与技术考研经验分享大家好&#xff0c;我是育明考研小赵老师关于2020年厦门大学计算机科学与技术考研信息汇总&#xff0c;请参考一、院校介绍厦门大学(Xiamen University)&#xff0c;简称厦大(XMU)&#xff0c;是中华人民共和国教…

Redis ops详解

Redis缓存数据库的ops问题 我们使用Java操作Redis数据库的时候&#xff0c;往往会输出和ops相关的内容&#xff0c;下面给大家讲解一下ops相关的内容。 ops是什么&#xff1f; redis中的OPS 即operation per second 每秒操作次数。意味着每秒对Redis的持久化操作。 所以我们…

Redis的6种数据类型

Redis 是一种基于内存的数据库&#xff0c;并且提供一定的持久化功能&#xff0c;它是一种键值&#xff08;key-value&#xff09;数据库&#xff0c;使用 key 作为索引找到当前缓存的数据&#xff0c;并且返回给程序调用者。 当前的 Redis 支持 6 种数据类型&#xff0c;它们…

Redis字符串深入

字符串是 Redis 最基本的数据结构&#xff0c;它将以一个键和一个值存储于 Redis 内部&#xff0c;它犹如 Java 的 Map 结构&#xff0c;让 Redis 通过键去找到值。Redis 字符串的数据结构如下图所示。 Redis 会通过 key 去找到对应的字符串&#xff0c;比如通过 key1 找到 v…

Redis哈希数详解

Redis 中哈希结构就如同 Java 的 map 一样&#xff0c;一个对象里面有许多键值对&#xff0c;它是特别适合存储对象的&#xff0c;如果内存足够大&#xff0c;那么一个 Redis 的 hash 结构可以存储 2 的 32 次方减 1 个键值对&#xff08;40 多亿&#xff09;。 一般而言&…

Redis链表结构深入

链表结构是 Redis 中一个常用的结构&#xff0c;它可以存储多个字符串&#xff0c;而且它是有序的&#xff0c;能够存储 2 的 32 次方减 1 个节点&#xff08;超过 40 亿个节点&#xff09;。 Redis 链表是双向的&#xff0c;因此即可以从左到右&#xff0c;也可以从右到左遍历…

家用使用计算机组装,不能再简单了!家用电脑DIY组装实操

【天极网DIY硬件频道】【天极网硬件频道】近期有网友对DIY组装电脑比较感兴趣&#xff0c;因为自从智能手机和平板电脑横行霸道之后&#xff0c;家中的PC电脑被使用的时间变少了许多&#xff0c;可是偶尔有工作需求或是别有任务等&#xff0c;所以大家依然是不会让电脑远离的。…

Redis集合深入

Redis 的集合不是一个线性结构&#xff0c;而是一个哈希表结构&#xff0c;它的内部会根据 hash 分子来存储和查找数据&#xff0c;理论上一个集合可以存储 2 的 32 次方减 1 个节点&#xff08;大约 42 亿&#xff09;个元素&#xff0c;因为采用哈希表结构&#xff0c;所以对…

Redis有序集合详解

有序集合和集合类似&#xff0c;只是说它是有序的&#xff0c;和无序集合的主要区别在于每一个元素除了值之外&#xff0c;它还会多一个分数。分数是一个浮点数&#xff0c;在 Java 中是使用双精度表示的&#xff0c;根据分数&#xff0c;Redis 就可以支持对分数从小到大或者从…

如何为你的网站启用HTTPS

步骤一&#xff1a;获取SSL/TLS证书 选择SSL证书提供商&#xff1a; 选择一家可信赖的SSL证书提供商。对于小型网站&#xff0c;JoySSL提供的免费证书是一个不错的选择。购买或申请证书&#xff1a; 根据你的网站需求&#xff0c;购买相应类型的SSL证书。证书的类型包括单域、…

Redis HyperLogLog常用命令

基数并不是存储元素&#xff0c;存储元素消耗内存空间比较大&#xff0c;而是给某一个有重复元素的数据集合&#xff08;一般是很大的数据集合&#xff09;评估需要的空间单元数&#xff0c;所以它没有办法进行存储&#xff0c;加上在工作中用得不多&#xff0c;我们要介绍一下…

Redis的基础事务

Redis 存在事务&#xff0c;尽管它没有数据库那么强大&#xff0c;但是它还是很有用的&#xff0c;尤其是在那些需要高并发的网站当中。 使用 Redis 读/写数据要比数据库快得多&#xff0c;如果使用 Redis 事务在某种场合下去替代数据库事务&#xff0c;则可以在保证数据一致性…

Redis事务回滚深入

对于 Redis 而言&#xff0c;不单单需要注意其事务处理的过程&#xff0c;其回滚的能力也和数据库不太一样&#xff0c;这也是需要特别注意的一个问题——Redis 事务遇到的命令格式正确而数据类型不符合&#xff0c;如图所示。 从图中可知&#xff0c;我们将 key1 设置为字符串…