如何避免剥离仅用于调试构建类型的AAR中打包的本机库?

piw*_*iwi 5 android gradle android-ndk

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

一切都在Android Studio之外完成。要打包.aar,我有一个目录,其中包含:

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

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

这里是build.gradleapp目录:

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
Run Code Online (Sandbox Code Playgroud)

默认情况下,所有AAR文件都包含该库的精简版本。组装AAR的Debug版本时,我不希望删除该库。

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

我的问题是AAR的调试版本和发行版都被剥离了。AAR的两个版本看起来确实有所不同,因为它们的大小不同(因此md5sum不同)。

我应该packagingOptions在哪里/如何将我的文件放在Gradle配置文件中,以便仅剥离发行版?谢谢

And*_*oom 6

打包选项在下面指定,然后是类似或等的buildTypes配置。示例:DebugRelease

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

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