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 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,使用压缩工具打开,可以看到如下:

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

原文地址:https://www.cnblogs.com/wuchaodzxx/p/9046370.html

时间: 2024-07-29 22:44:42

Android Studio 打包AAR和第三方静态库的相关文章

Android Studio 打包及引用 aar

Android Studio 打包及引用 aar 1. 简述 在比较大的 Android 项目的开发中,我们经常会遇到工程.jar 包等等之间相互引用的方式.一般我们通过在 gradle 文件中配置依赖来解决,比如: Gradle 的一些基本依赖配置方式如下: compile fileTree(dir: 'xxx', include: ['*.jar', "*.xxx"]):将某个目录下所有符合扩展名的文件作为依赖: compile 'com.xx.xx:ProjectName:Ver

android开发 NDK 编译和使用静态库、动态库 (转)

在eclipse工程目录下建立一个jni的文件夹 在jni文件夹中建立Android.mk和Application.mk文件 Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk. Application.mk文件: 定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库).APP_PLATFORM := android-9(使用

关于Android Studio打包混淆以及上传mapping文件

关于android Studio打包混淆以及上传mapping文件 转载请注明出处: http://blog.csdn.net/u014163726?viewmode=contents 本文出自Wrh的博客 打包 android studio的打包很简单 然后如果已经有keystore的一路next下去,如果没有的可能需要先创建keystore,最后我们就会得到一个apk文件 混淆 现在网上关于反编译的博客很多了,我在此就不多做介绍了,放上个传送门传送门 那么我们已经知道了反编译是如此的简单,我

android开发 NDK 编译和使用静态库、动态库

在eclipse工程目录下建立一个jni的文件夹. 在jni文件夹中建立Android.mk和Application.mk文件. Android.mk文件: Android提供的一种makefile文件,用来指定诸如编译生成so库名.引用的头文件目录.需要编译的.c/.cpp文件和.a静态库文件等.详见附件中的Android.mk. Application.mk文件: 定义了项目的一些细节,比如APP_ABI := x86(编译X86平台库).APP_PLATFORM := android-9(

Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)

最近需要从内存流中直接播放音频,想到了使用第三方音频播放库bass.在windows上可以很方便的使用相应动态库(具体参考万一的博客),但在iOS上却没有相应的使用介绍,准确的说是没有用于Firemonkey上的示例.在它官方论坛找到一个用于OSX的Demo,通过分析和测试,研究出了Firemonkey在iOS开发上使用第三方静态库的流程和方法. 下面以在Delphi XE10上使用bass的静态库libbass.a为例. 1.获取要使用的静态库libbass.a文件,将libbass.a文件放

Android 混淆打包不混淆第三方jar包

项目因为要发布,所以要混淆打包. 混淆打包流程: 1.在proguard-project.txt文件中添加不需要混淆的类和第三方的jar包 这个是保持自己包中不需要混淆的类,如果有些类调用了jni也不需要混淆,不然会出错.还有如果项目中有其他项目作为library引入,那这些项目的一些类也不能混淆. 这个是保持项目中的第三方jar不混淆 另外加上上面几句话,不然会在控制台中报warning警告 2.在project.properties文件中把proguard.config=${sdk.dir}

Android Studio 查找aar依赖的顺序

Android Studio 查找aar依赖的顺序: Searched in the following locations: file:/E:/android_studio/sdk/extras/m2repository//netframe-debug//netframe-debug-.pom file:/E:/android_studio/sdk/extras/m2repository//netframe-debug//netframe-debug-.aar file:/E:/android

android studio 打包报错:Generate Signed APK: Errors while building APK. You can find the errors in the 'Messages' view.

找到app文件下的build.gradle文件,之后在该文件中的android加入如下代码即可: android {...... lintOptions { checkReleaseBuilds false abortOnError false}} android studio 打包报错:Generate Signed APK: Errors while building APK. You can find the errors in the 'Messages' view. 原文地址:http

android studio打包weexplus项目常见错误

android studio打包weexplus项目时,gradle失败报错: ERROR: Unable to resolve dependency for ':[email protected]/compileClasspath': Could not download eventbus.jar 解决办法:下载不到相应的类库,添加镜像源 在project  build.gradle更改为 allprojects {    repositories {        maven {