如何将调试符号添加到build.gradle

问题描述 投票:0回答:5

我已经创建了我的 Flutter 应用程序的 Android 版本。

然后我创建了一个内部测试版本。显示警告

此应用程序包包含本机代码,并且您尚未上传调试 符号。我们建议您上传一个符号文件以使您的崩溃 并且 ANR 更易于分析和调试。

基本上我要做的就是根据它们显示的链接将以下内容添加到 build.gradle 文件中。

android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }

我认为他们正在谈论的是 android/app/build.gradle。

不确定我必须在该文件中的哪个位置添加此行。

有人可以指出在哪里添加这一行吗?

android flutter debugging release android-app-bundle
5个回答
158
投票

要使用 ndk debugSymbolLevel 选项(如 docs 中所写),您需要一个 android gradle 插件 4.1 或更高版本。在撰写本文时,最新的 4.1 版本是 4.1.2

您还需要安装 ndk 和 cmake for android studio

在你的 android build.gradle 中,你需要设置 android gradle 插件版本 4.1.2:

buildscript {
    ...
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:4.1.2'
        ...
    }

然后在android/app build.gradle中添加:

...
android {
    ...
    // you see the ndk version in the android studio sdk-manager
    // have a look also here: https://stackoverflow.com/a/65747847/9481613
    ndkVersion "21.3.6528147" 
    ...
    buildTypes {
        release {
            ...
            ndk {
                debugSymbolLevel 'SYMBOL_TABLE'
            }
        }   
    }
}

然后运行时:

flutter build appbundle
一段时间后,它应该会完成,并且应用程序包的大小是原来的两倍。


53
投票

app/build.gradle 中有两个地方可以指定调试符号与应用程序的捆绑。如果您使用

android.defaultConfig.ndk.debugSymbolLevel
,它将应用于所有构建类型(即调试和发布构建)。另一方面,如果您使用
android.buildTypes.release.ndk.debugSymbolLevel
它将仅适用于您的发布版本。

这些选项必须按照您正确的猜测添加到您的

app/build.gradle
文件中。当您看到此点符号中的构建属性时,它实际上对应于
build.gradle
中的嵌套块,看起来有点像这样:

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId 'com.example.foo'
        minSdkVersion 23
        targetSdkVersion 28
        versionCode 42
        versionName "4.0.2"
        ndk {
            debugSymbolLevel 'SYMBOL_TABLE'
        }
    }
    // Rest of the file
}

HTH


4
投票

使用Android 4.1及以上版本,目前4.1 RC 3和4.2 Canary 13可用,同样使用com.android.tools.build:gradle 4.1及以上版本,您可以从这里搜索合适的版本

然后在应用程序 build.gradle 文件中的 android -> defaultConfig 中使用此行

    ndk { debugSymbolLevel 'FULL' }

0
投票

如果所有解决方案都不起作用,您还可以从 Android Studio 的项目模板创建示例 JNI 应用程序。构建它并检查它是否构建成功并安装在设备上。

我检查了它的应用程序 build.gradle 文件并比较了我的 Flutter 的 build.gradle。所以我添加了这个以使其工作:

defaultConfig {

    // append below:
    externalNativeBuild {
            cmake {
                cppFlags "-std=c++17"
            }
        }
}


0
投票

在谷歌文档中进行了大量研究后,尝试将 gradle 与 ndk 和/或 cmake 一起使用,我无法使 gradle 在 AAB 中添加本机调试符号!

ps:我在 Mac 中使用 gradle 8.3 和 android studio kotlin 项目。

然后,我创建了另一个解决方案并且它有效!

如何:

  1. 创建您的未签名 AAB 文件
  2. 解压它
  3. 在 BUNDLE-METADATA 中创建 debugsymbols 文件夹
  4. 将调试本机文件从 lib 复制到上一个文件夹
  5. 将文件压缩到新的 AAB 文件
  6. 使用 apksigner 签署 AAB
  7. 使用bundletool进行测试
  8. 将其推送到 Playstore,您可以在那里看到调试符号!

更详细的说明如下:

AAB file created here: Artefacts/app-envDev-release.aab
unzip app-envDev-release.aab -d temp_aab
cd temp_aab/
cd BUNDLE-METADATA/
mkdir -p com.android.tools.build.debugsymbols
cd com.android.tools.build.debugsymbols
cp -r ../app/build/intermediates/merged_native_libs/envProdRelease/out/lib/ ./
cd ..
cd ..
zip -r ../new_app.aab * -x "*.DS_Store"
cd ..
/Users/MYUSER/Library/Android/sdk/build-tools/34.0.0/apksigner sign --ks /PATH_TO_MY_KEYSTORE/keystore.jks --min-sdk-version 30 new_app.aab
java -jar bundletool-all-1.16.0.jar validate --bundle new_app.aab

最终结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.