Android Studio 打包AAR和第三方靜態庫

來源:互聯網
上載者:User

標籤:enc   target   ++   int   c++   devices   ice   gets   開啟   

需求

現在有一個第三方庫libstatic_add.a和對應的標頭檔static.h,要求封裝一個Module,該Module依賴這個靜態庫,要求打包的Module包含該靜態庫。

方案建立Android Studio Library  Project

建立Project時,記得添加"Include C++ Support",如果沒有安裝CMake,LLDB和NDK的話,記得安裝一下。

項目建立好後,包括以下目錄和檔案(部分目錄或檔案是後面添加的):

build.gradle配置

 針對app模組的build.gradle進行如下配置:

//改為libraryapply 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 2018ndk.dir=D\:\\NanRi\\Android\\android-ndk-r16bsdk.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庫

 

 

Android Studio 打包AAR和第三方靜態庫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.