uni-app targetSdk设置29及以上,出现白屏

uni-app targetSdk设置29及以上,出现白屏

操作步骤:

  • 正常初始化(DCUniMPSDK.getInstance().initialize)成功后,打开UniMP(DCUniMPSDK.getInstance().openUniMP)

预期结果:

  • 正常加载UniApp

实际结果:

  • 仅加载了tabBar,其余部分白屏

bug描述:

  • targetSdk设置26-28没问题,能正常打开页面;设置29及以上,仅加载了tabBar,其余部分为白屏。
  • 项目环境参数:
    • agp: 8.1.0
    • kotlin: 1.8.20
    • JDK: 17
  • 附件为日志以及视频。

日志视频.zip


更多关于uni-app targetSdk设置29及以上,出现白屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

同样的问题,请问如何解决的?

更多关于uni-app targetSdk设置29及以上,出现白屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html


问题解决了吗

uni-app 项目中,将 targetSdkVersion 设置为 29 或更高版本时,出现白屏问题,通常是由于 Android 10(API 29)及以上版本引入的一些新的安全性和行为变更导致的。以下是一些可能的原因和解决方法:

1. 文件存储权限变更

Android 10 引入了 Scoped Storage,限制了应用对文件系统的访问。如果你的应用需要访问外部存储,可能需要适配新的存储模型。

解决方法:

  • AndroidManifest.xml 中添加以下权限:
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  • 如果你需要使用 Scoped Storage,请参考 Android 官方文档 进行适配。

2. WebView 的兼容性问题

uni-app 在某些情况下会使用 WebView 来渲染页面,而 Android 10 及以上版本对 WebView 的行为有一些变更,可能导致白屏。

解决方法:

  • 确保你的 WebView 配置正确,或者尝试更新 WebView 的版本。
  • AndroidManifest.xml 中添加以下配置:
    <application
        android:usesCleartextTraffic="true"
        ...>
    
    这允许应用使用明文流量(HTTP),某些情况下可能会解决 WebView 的加载问题。

3. Activity 启动模式问题

Android 10 及以上版本对 Activity 的启动模式有一些变更,可能导致某些情况下无法正常启动 Activity。

解决方法:

  • 检查你的 AndroidManifest.xml 中的 Activity 配置,确保启动模式正确。
  • 如果你使用了 singleInstancesingleTask 等启动模式,尝试更改为 standardsingleTop

4. 资源加载问题

某些资源(如图片、字体等)在 Android 10 及以上版本中可能无法正常加载,导致白屏。

解决方法:

  • 确保所有资源路径正确,并且资源文件存在于指定的位置。
  • 如果你使用了网络资源,请确保应用有正确的网络权限:
    <uses-permission android:name="android.permission.INTERNET"/>
    

5. 调试与日志

如果以上方法都无法解决问题,建议通过调试和日志来进一步排查问题。

解决方法:

  • 使用 Android Studio 的 Logcat 查看应用启动时的日志,寻找可能的错误信息。
  • uni-app 项目中,可以在 main.jsApp.vue 中添加一些调试日志,检查应用是否正常启动。

6. 降级 targetSdkVersion

如果暂时无法解决兼容性问题,可以考虑将 targetSdkVersion 降级到 28 或更低版本。

解决方法:

  • manifest.jsonbuild.gradle 中将 targetSdkVersion 设置为 28:
    "android": {
        "targetSdkVersion": 28
    }
回到顶部