android - 如何避免剥离打包在 AAR 中的 native 库仅用于调试构建类型?

标签 android gradle android-ndk

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

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

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

  • 该目录还包含 list 和 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
    

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

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

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

    我可以在哪里/如何放置我的packagingOptions在 Gradle 配置文件中,以便只删除发布版本?谢谢

    最佳答案

    打包选项在 buildTypes 下指定然后像 Debug 这样的配置或 Release等等
    例子:

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

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

    关于android - 如何避免剥离打包在 AAR 中的 native 库仅用于调试构建类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829644/

    相关文章:

    android - Gradle Android 构建系统 NDK 问题

    android-studio - Android NDK,错误 :(165, 0) 原因:找不到 ndk-build 二进制文件

    android - 以编程方式清除浏览器缓存/历史记录

    android - 突出显示列表中的 TextView 项

    jenkins - Artifact被上传到Artifactory中的错误群组

    android - 无法从 Android-Studio 构建 react-native 项目

    android - 使用 Android Studio 设置 OpenFrameworks

    java - 如何显示开机动画预览?

    android - RecyclerView致命异常:main

    tomcat - 使用netbeans将gradle war部署到Tomcat中