我已经创建了我的 Flutter 应用程序的 Android 版本。
然后我创建了一个内部测试版本。显示警告
此应用程序包包含本机代码,并且您尚未上传调试 符号。我们建议您上传一个符号文件以使您的崩溃 并且 ANR 更易于分析和调试。
基本上我要做的就是根据它们显示的链接将以下内容添加到 build.gradle 文件中。
android.buildTypes.release.ndk.debugSymbolLevel = { SYMBOL_TABLE | FULL }
我认为他们正在谈论的是 android/app/build.gradle。
不确定我必须在该文件中的哪个位置添加此行。
有人可以指出在哪里添加这一行吗?
要使用 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
一段时间后,它应该会完成,并且应用程序包的大小是原来的两倍。
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
如果所有解决方案都不起作用,您还可以从 Android Studio 的项目模板创建示例 JNI 应用程序。构建它并检查它是否构建成功并安装在设备上。
我检查了它的应用程序 build.gradle 文件并比较了我的 Flutter 的 build.gradle。所以我添加了这个以使其工作:
defaultConfig {
// append below:
externalNativeBuild {
cmake {
cppFlags "-std=c++17"
}
}
}
在谷歌文档中进行了大量研究后,尝试将 gradle 与 ndk 和/或 cmake 一起使用,我无法使 gradle 在 AAB 中添加本机调试符号!
ps:我在 Mac 中使用 gradle 8.3 和 android studio kotlin 项目。
然后,我创建了另一个解决方案并且它有效!
如何:
更详细的说明如下:
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
最终结果: