Playstore 错误:App Bundle 包含本机代码,并且您尚未上传调试符号

fle*_*epp 81 google-play android-studio flutter

当我想向 Playstore 发布新的 Flutter 应用程序包时。我收到此错误消息:“此 App Bundle 包含本机代码,但您尚未上传调试符号。我们建议您上传符号文件,以便更轻松地分析和调试崩溃和 ANR。” 我找不到任何方法来解决这个问题。我是 flutter 的新手,发布应用程序并且有点绝望......任何帮助都会很棒。

当我按照https://developer.android.com/studio/preview/features#native-crash 中的建议将“android.defaultConfig.ndk.debugSymbolLevel = 'FULL'”(第 1 行)添加到 app/build.gradle 时-符号化。我在 Android Studio 终端中收到此错误。我使用这个命令“flutter build appbundle”。

终端错误:FAILURE:构建失败,出现异常。

  • 其中:构建文件 'C:\Users\filip\AndroidStudioProjects\ehbo\android\app\build.gradle' 行:1

  • 出了什么问题:评估项目“:app”时出现问题。

无法获取类型为 org.gradle.api.Project 的项目“:app”的未知属性“android”。

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

  • https://help.gradle.org获取更多帮助

BUILD FAILED in 3s Running Gradle task 'bundleRelease'... Running Gradle task 'bundleRelease'... Done 4,3s Gradle task bundleRelease failed with exit code 1

小智 217

重现后续步骤,此警告将会消失

  1. [YOUR_PROJECT]\build\app\intermediates\merged_native_libs\release\out\lib

对于某些人来说,路径可能[YOUR_PROJECT]\build\app\....并不[YOUR_PROJECT]\app\build\....像上面提到的那样。

注意里面有3个文件夹

  • ARM64-V8A
  • armeabi-v7a
  • x86_64
  1. 选择这 3 个文件夹并创建一个 .zip 文件。名字并不重要。

[请注意,我没有压缩 ./lib 文件夹]

  1. 上传这个新的 *.zip 文件作为符号文件。

最新更新,对于我们来说(2023 年 11 月 8 日),该文件夹存在于 [YOUR_PROJECT]\build\app\intermediates\merged_native_libs\release\out\lib 中

  • 对于任何想知道如何上传符号文件的人... https://support.google.com/googleplay/android-developer/answer/9848633?hl=en#zippy=%2Cupload-files-using-play-console (39认同)
  • 非常感谢!我愚蠢地认为 *.symbols 文件是“本机调试符号”需要上传的文件,而不是包含 *.so 文件的文件夹的 zip 文件。 (5认同)
  • 对我来说,该文件夹实际上位于: [YOUR_PROJECT]\build\app\intermediates\merged_native_libs\release\out\lib (2认同)

Sha*_*kle 39

在上传调试符号文件之前,您必须使用 Android Gradle 插件版本 4.1 或更高版本。

看起来它只会随 Android Studio 4.1 一起提供,因为我现在只能自动获得 Gradle 4.0.0。

所以我建议你返回经典的 Play 控制台,它会让你通过 :)

  • 唐,我认为你是对的。我也只能使用 Android Studio 4.0 升级到 4.0。 (2认同)
  • 我不这么认为,未来我们需要做一些改变。如果我想要新的 Play 管理中心该怎么办? (2认同)

Sha*_*kle 27

如果说 Flutter,看起来 Flutter 团队需要为 NDK 更改一些源文件,因为它不知道从哪里生成调试符号。

这是一个问题线程:https : //github.com/flutter/flutter/issues/60240

设置步骤如下:

  • 前提条件:安装 Android studio 4.1+ 和 Gradle 4.1+
  1. 在 SDK 管理器中安装 NDK (Side by Side) 在此处输入图片说明

  2. 在 local.properties 中写入 NDK 的路径 在此处输入图片说明

  3. 添加 app/build.gradle(最后一行)android.buildTypes.release.ndk.debugSymbolLevel = 'FULL' 在此处输入图片说明

  • 我遵循同样的方法,我得到了这个,*出了什么问题:评估项目“:app”时出现问题。> 无法获取 BuildType_Decolated{name=release, 的未知属性“ndk”, (2认同)

小智 26

您可以通过转到build\app\intermediates\merged_native_libs\release\out\libFlutter 项目内部来制作这些 zip 文件

并将文件夹压缩到symbols.zip,现在将其上传到 google play console


Pra*_*ani 19

根据Play 管理中心上的以下消息,Shakle给出的答案将没有用。

旧版 Play 管理中心将于 2020 年 11 月 2 日停用您已经在使用新版 Play 管理中心,因此您无需执行任何操作。如果您想最后一次检查它们,一些功能将消失。

这只是一个警告,没有别的。前进吧。

如果您不想收到任何警告,请转到此链接并按照以下步骤操作:

https://support.google.com/googleplay/android-developer/answer/9848633?hl=en

您可以按原样使用新版本的Play 商店


小智 9

我有类似的问题。真正对我有帮助的是:

  1. 确保您的 Android Gradle 插件版本为 4.1 或更高版本。
  2. 在 SDK 管理器中安装 NDK(并排)。
  3. 在 SDK 管理器中安装 CMake。
  4. 添加
    ndkVersion <ndkVersion>
    ndk {
      debugSymbolLevel 'FULL'
    }
Run Code Online (Sandbox Code Playgroud)

到应用程序/build.gradle

我的最后build.gradle

...
android {
  compileSdkVersion 30
  defaultConfig {
    applicationId "com.example.app"
    minSdkVersion 21
    targetSdkVersion 30
    versionCode 28
    versionName "1.0.59"
    ndkVersion "23.1.7779620"
    ndk {
      debugSymbolLevel 'FULL'
    }
  }
  buildTypes {
    release {
      minifyEnabled true
      shrinkResources true
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
  }

  configurations {
    compile.exclude group: 'com.google.zxing'
  }
}
...
Run Code Online (Sandbox Code Playgroud)

我希望这会对您有所帮助并节省您的时间


Kne*_*lon 8

如果您想解决此警告错误:此应用程序包包含本机代码,并且您尚未上传调试符号。我们建议您上传符号文件,以便更轻松地分析和调试崩溃和 ANR。确保还安装了 CMake

如果您的 gradle 版本高于 4.0,则会发生这种情况将此代码放入您的build.gradle文件中

android {
compileSdkVersion 28
defaultConfig {
    applicationId 'com.example.myproject'
    minSdkVersion 21
    targetSdkVersion 28
    versionCode 1
    versionName "1.0.0"
    ndk {
        debugSymbolLevel 'FULL'
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @LawrenceMacharia 不。我意识到我不在乎,一切都毫无意义。 (8认同)
  • 这个解决方案适用于我的 React-Native,但对于我的情况,我必须安装 CMake 并将我的 NDK 更新到版本 23.0.7599858,然后我在 build.gradle(app) 上更新它,最后遵循这个解决方案:https:// /stackoverflow.com/a/65367767/6674314 (2认同)
  • @acuriousguy 解决方案也适用于 React Native。确保安装 CMake:https://developer.android.com/studio/projects/install-ndk#kts 并将 debugSymbolLevel 设置为“FULL”而不是“SYMBOL_TABLE” (2认同)

Md *_*fat 6

简单的方法,转到 \build\app\intermediates\merged_native_libs\release\out\lib ,你会找到 3/4 个文件夹,压缩这些文件夹,从发布选项上传此 ZIP(上传符号文件)。捆绑审核后警告将消失。


Ada*_*ges 6

您可以将以下内容添加到您的app\build.gradle文件中,而不是创建和上传 zip 文件:

buildTypes {
    debug { 
        // This is just here for local testing and is optional.
        firebaseCrashlytics { 
            nativeSymbolUploadEnabled true
            unstrippedNativeLibsDir file("build/app/intermediates/merged_native_libs/debug/out/lib")
        }
        ndk {
            debugSymbolLevel 'SYMBOL_TABLE'
        }
    }
    release {
        // ..
        firebaseCrashlytics { // Insert this
            nativeSymbolUploadEnabled true 
            unstrippedNativeLibsDir file("build/app/intermediates/merged_native_libs/release/out/lib")
        }
        ndk {
            // replace with 'FULL' if you need more info,
            // but note that it will increase the file size of your appbundle dramatically.
            debugSymbolLevel 'SYMBOL_TABLE'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是一些供参考的文档: https://firebase.google.com/docs/crashlytics/ndk-reports#upload-symbols-external-dependency

如果您不清楚如何设置本机符号的自动上传,请尝试添加以下内容:

buildTypes { ... } // Your build types from the above snippet.

tasks.whenTaskAdded { task ->
    if (task.name.startsWith('assemble') && task.name != "assembleReleaseAndroidTest"
            && task.name != "assembleDebugAndroidTest") {
        String taskName = "uploadCrashlyticsSymbolFile" + task.name.substring('assemble'.length())
        task.finalizedBy taskName
        doFirst {
            println "Running Gradle task '$taskName'..."
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有关构建 gradle 任务的更多信息: https ://docs.gradle.org/current/userguide/tutorial_using_tasks.html

另外,请确保您的 IDE 的 SDK 管理器中安装了 NDK 和 CMAKE。

希望有帮助!