将 doNotStrip PackagingOptions 设置为特定的 buildType

Bru*_*osa 5 android gradle android-ndk

我的项目有 3 种不同的 buildType,我只需要其中一种即可保留其本机库的调试信息。我正在使用com.android.tools.build:gradle:3.1.4.

我尝试了以下

buildTypes {

   debug {
   ...
   }

   release {
   ...
   }

   unstripped {
       ...
       packagingOptions {
           doNotStrip '**/*.so'
       } 
   }
}
Run Code Online (Sandbox Code Playgroud)

但这使得所有 buildType 都保留未剥离的库版本。

我也尝试将doNotStrip模式更改为类似的内容,'**/unstripped/*.so'但这似乎对我没有帮助,因为文档说该路径与 APK 的根目录相关。

shi*_*hen 7

这是您的解决方法:

提供命令行选项“ doNotStrip

  1. 在下面添加到您的 app/build.gradle

    android {
        ...
        if (project.hasProperty("doNotStrip")) {
            packagingOptions {
                doNotStrip '**/*.so'
            }
        }
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用以下命令通过向命令提供选项来生成未剥离的 apkdoNotStrip

    ./gradlew assembleUnstripped -PdoNotStrip
    
    Run Code Online (Sandbox Code Playgroud)
  3. 对于其他构建类型,您仍然可以使用正常的构建命令。例如

    ./gradlew assembleDebug
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    ./gradlew assembleRelease
    
    Run Code Online (Sandbox Code Playgroud)

    但不要doNotStrip为命令提供选项。

  • 非常感谢!这几乎就是我最终要做的,实际上......但是,有可能做一些我最初尝试做的简单的事情吗?如果不可能,你能解释一下为什么吗?我是 Gradle 的新手,如果能了解更多信息会很高兴。 (2认同)

Bru*_*osa 3

自 Android Gradle 插件 (AGP) 版本7.0.0起,新语法支持用例。例子

androidComponents {
    onVariants(selector().withBuildType("debug")) {
        packaging.jniLibs.keepDebugSymbols.add("**/debugDoNotStrip.so")
    }
}
Run Code Online (Sandbox Code Playgroud)