如何避免仅针对调试版本类型剥离AAR中打包的本机库?

时间:2018-02-16 15:10:46

标签: android gradle android-ndk

我有一个为Android构建的C ++库,我将其打包为Android存档(.aar),以及一些Java类和Manifest。

一切都在Android Studio之外完成。要打包.aar,我有一个包含以下内容的目录:

  • app/src/main/jniLibs/arm64-v8a/:带库的目录
  • app/src/main/java:包含Java类的目录

该目录还包含清单和Gradle文件。

以下是build.gradle目录中的app

apply plugin: 'com.android.library'

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.2"

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 27
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    testImplementation 'junit:junit:4.12'
    implementation 'com.android.support:appcompat-v7:27.0.2'
}

apply plugin: 'maven-publish'

publishing {
    publications {
        fooapp(MavenPublication) {
            groupId 'com.example'
            artifactId 'fooapp'
            version "develop"
            artifact('build/outputs/aar/app-release.aar')
        }
    }
    repositories {
        maven {
            mavenLocal()
        }
    }
}

publishToMavenLocal.dependsOn assemble

默认情况下,所有AAR文件都包含库的剥离版本。我不希望在组装AAR的Debug版本时剥离库。

我发现我可以使用packagingOptions来禁用剥离,因此我尝试在配置文件的packagingOptions { doNotStrip "**/*/*.so" }范围内添加debug {...}

我的问题是AAR的调试版和发布版都被剥离了。 AAR的两个版本似乎有所不同,因为它们的大小不同(因此具有不同的md5sum)。

在哪里/如何将packagingOptions放入Gradle配置文件中,以便仅剥离发布版本?感谢

1 个答案:

答案 0 :(得分:3)

buildTypes下指定包装选项,然后在DebugRelease等配置下指定。 示例:

buildTypes {
    debug {
        packagingOptions {
            doNotStrip '**/*.so'
        }
    }
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        packagingOptions {
            doNotStrip '**/*.so'
        }
    }
}

注意:您在指定的路径中添加了一个额外的目录/*/。