uni-app 谷歌审核提示与Kotlin不相容问题会导致当机

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

uni-app 谷歌审核提示与Kotlin不相容问题会导致当机

产品分类

uniapp/App

开发环境信息

项目 信息
PC开发环境操作系统 Windows
PC开发环境版本号 Windows 11 家庭中文版 21H2
HBuilderX类型 正式
HBuilderX版本号 4.44
手机系统 Android
手机系统版本号 Android 14
手机厂商 vivo
手机机型 iQOO Neo8
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

App下载地址

https://app.liuyingyong.cn/build/download/5d97a4a0-cbe1-11ef-9ae0-bf1209f39dfc

示例代码

"google" : {
    "minSdkVersion" : 23,
    "targetSdkVersion" : 34,
    "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],
    "permissions" : [
        "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
        "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
        "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
        "<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
        "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
        "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
        "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
        "<uses-permission android:name=\"android.permission.CAMERA\"/>",
        "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
        "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
        "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
        "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
        "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
        "<uses-feature android:name=\"android.hardware.camera\"/>",
        "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
        "<uses-permission android:name=\"android.permission.INTERNET\" />"
    ]
}

预期结果

打包上传到google市场正常

实际结果

打包上传到google市场“异常”

bug描述

您的应用程式使用了 Kotlin 的 removeFirst()removeLast() 函数,在 Android 14 以下版本的设备上会导致应用崩溃。具体位置如下:

  • io.dcloud.uts.StringKt$$ExternalSyntheticApiModel0utline0.m$1
  • io.dcloud.uts.stringKt$$ExternalSyntheticApiModel0utline0.m

为避免崩溃,建议将所有 removeFirst()removeLast() 函数调用替换为 removeAt(0)removeAt(list.lastIndex)

图片


3 回复

针对您提到的uni-app在谷歌审核时遇到的与Kotlin不相容问题导致当机的情况,这通常涉及到Android原生代码与uni-app框架之间的兼容性问题。虽然uni-app主要使用Vue.js进行开发,但在某些情况下,可能需要集成原生Android代码或插件,这时就可能遇到Kotlin或Java代码的兼容性问题。

以下是一个基本的示例,展示如何在uni-app项目中集成一个使用Kotlin编写的Android原生模块,并确保其不会引发当机问题。请注意,这只是一个基础示例,实际情况可能更复杂,需要根据具体的错误日志和代码进行调整。

步骤 1: 创建Kotlin原生模块

首先,在Android Studio中创建一个新的Kotlin模块,例如一个MyKotlinModule,并编写一个简单的功能,如:

// MyKotlinModule.kt
package com.example.mykotlinmodule

import android.content.Context
import android.widget.Toast

class MyKotlinModule {
    fun showToast(context: Context, message: String) {
        Toast.makeText(context, message, Toast.LENGTH_SHORT).show()
    }
}

步骤 2: 编译并生成AAR文件

在Android Studio中,编译该模块并生成AAR文件。这个文件将包含Kotlin编译后的代码,可以在uni-app项目中引用。

步骤 3: 在uni-app项目中集成AAR文件

将生成的AAR文件复制到uni-app项目的native/plugins/android/libs目录下(如果没有这些目录,请手动创建)。

步骤 4: 修改manifest.jsonapp.json

manifest.json中,添加对原生插件的引用:

"nativePlugins": {
    "MyKotlinModule": {
        "package": "com.example.mykotlinmodule.MyKotlinModule",
        "methods": ["showToast"]
    }
}

app.json中,确保启用了原生插件支持。

步骤 5: 调用原生模块

在uni-app的Vue组件中,通过plus.android.importClassplus.android.runtimeMainActivity()来调用Kotlin模块的方法:

const MyKotlinModule = plus.android.importClass('com.example.mykotlinmodule.MyKotlinModule');
const context = plus.android.runtimeMainActivity();
const module = new MyKotlinModule();
module.showToast(context, 'Hello from Kotlin!');

注意事项

  • 确保Kotlin模块的API版本与uni-app项目兼容。
  • 检查并处理任何可能的异常,以避免应用崩溃。
  • 仔细阅读谷歌审核指南,确保所有原生代码都符合其要求。

通过上述步骤,您应该能够在uni-app项目中成功集成Kotlin原生模块,并避免由于兼容性问题导致的当机。

回到顶部