uni-app android原生插件targetsdkversion大于28白屏

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app android原生插件targetsdkversion大于28白屏

信息类别 详情
产品分类 uniapp/App
PC开发环境 Mac
PC操作系统版本 10.15.7
HBuilderX类型 正式
HBuilderX版本 4.23
手机系统 Android
手机系统版本 Android 13
手机厂商 三星
手机机型 SM-A13
页面类型 vue
vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

操作步骤:

开发远程Android插件本地使用SDK UniPlugin-Hello-AS 打包运行,targetSdkVersion =28 可以正常加载页面并运行展示,但是需要使用SDK 默认targetSdkVersion需要大于31 设置大于31之后,进入app后,加载时间较长并且页面白屏。页面可以展示tabbar,tabbar以上均为白屏页面。

预期结果:

android原生插件targetsdkversion 大于28也可以正常打开页面并调试。

实际结果:

android原生插件targetsdkversion 大于28白屏。

bug描述:

开发远程插件本地使用SDK UniPlugin-Hello-AS 打包运行,targetSdkVersion =28 可以正常加载页面并运行展示,但是需要使用SDK 默认targetSdkVersion需要大于31 设置大于31之后,进入app后,加载时间较长并且页面白屏。页面可以展示tabbar,tabbar以上均为白屏页面。打印日志看到 E WeexJSConnection catch: spinWaitPeer timeout 2024-03-09 02:36:12.141 31246-31302 WeexCore com.demo.alive E JSFramwork init start sender is null 2024-03-09 02:36:12.141 31246-31509 WeexCore com.demo.alive E IPCException server spinWaitPeer timeout 2024-03-09 02:36:12.141 31246-31302 WeexCore com.demo.alive E IPCFutexPageQueue.cpp:66,do munmap 2024-03-09 02:36:12.142 31246-31509 WeexCore com.demo.alive E IPCFutexPageQueue.cpp:66,do munmap 2024-03-09 02:36:12.146 31246-31302 WeexCore com.demo.alive E script_side_in_multi_process.cpp:43,InitFramework sender is null 2024-03-09 02:36:12.146 31246-31302 weex com.demo.alive E [WXBridgeManager] invokeInitFramework ExecuteJavaScript fail

有这样的报错。 设置29 30 31以上都是这个现象。只有28可以正常运行。


6 回复

顶一下。 麻烦回复一下


这个问题在4.36仍然存在

回复 艾思: 我尝试了您的方法升级webkit到1.5.0,还是存在白页问题,即使将webkit升级到最新的1.12.1也没有变化

回复 j***@qq.com: 你的离线sdk是多少,我用的是4.3.6

在处理uni-app中Android原生插件时,如果遇到targetSdkVersion大于28导致白屏的问题,通常是由于Android系统版本的兼容性问题或者插件本身在新版本Android系统上的适配问题。以下是一些可能的解决方案,主要通过代码和配置调整来尝试解决该问题。

1. 更新uni-app和HBuilderX

首先,确保你的uni-app和HBuilderX开发环境都是最新版本。新版本可能已经修复了一些与目标SDK版本相关的已知问题。

2. 修改AndroidManifest.xml

在Android原生插件的AndroidManifest.xml文件中,检查并更新targetSdkVersioncompileSdkVersion,确保它们与你的测试设备或目标设备的Android版本兼容。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.plugin">

    <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="30"
        android:compileSdkVersion="30" />
    
    ...
</manifest>

3. 检查插件的Activity配置

确保插件中声明的所有Activity都正确配置了theme,特别是在Android 10(API级别29)及以上版本中,对于透明或全屏Activity的处理有所不同。

<activity
    android:name=".YourPluginActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar">
    ...
</activity>

4. 动态权限请求处理

从Android 6.0(API级别23)开始,应用需要在运行时请求敏感权限。如果你的插件涉及到这些权限,确保在插件代码中正确处理了权限请求。

if (ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_CAMERA);
}

5. 调试和日志

使用Android Studio或Logcat来调试你的应用,查看是否有任何与白屏相关的错误日志。这些日志可以帮助你确定问题的具体原因。

adb logcat | grep "YourPluginKeyword"

6. 兼容性适配

如果问题依然存在,考虑在插件代码中添加兼容性适配逻辑,特别是针对Android 10及以上版本的新特性和限制。

通过上述步骤,你应该能够定位并解决uni-app中Android原生插件因targetSdkVersion大于28导致的白屏问题。如果问题依旧无法解决,建议查阅uni-app社区和官方文档,或者向插件开发者寻求帮助。

回到顶部