uni-app 谷歌审核提示与Kotlin不相容问题会导致当机
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)
。
针对您提到的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.json
和app.json
在manifest.json
中,添加对原生插件的引用:
"nativePlugins": {
"MyKotlinModule": {
"package": "com.example.mykotlinmodule.MyKotlinModule",
"methods": ["showToast"]
}
}
在app.json
中,确保启用了原生插件支持。
步骤 5: 调用原生模块
在uni-app的Vue组件中,通过plus.android.importClass
和plus.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原生模块,并避免由于兼容性问题导致的当机。