代码之家  ›  专栏  ›  技术社区  ›  piwi

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

  •  9
  • piwi  · 技术社区  · 7 年前

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

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

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

    该目录还包含manifest和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的调试版本时剥离库。

    我发现我可以使用 packagingOptions 禁用剥离,所以我尝试添加 packagingOptions { doNotStrip "**/*/*.so" } debug {...} 配置文件的作用域。

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

    在哪里/如何放置 包装选项 在Gradle配置文件中,以便仅剥离发布版本?谢谢

    1 回复  |  直到 7 年前
        1
  •  4
  •   AndrewBloom    4 年前

    包装选项在下面指定 buildTypes 然后配置如下 Debug Release 等 例子:

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

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