uni-app 安卓本地打包应用会直接崩溃或者卡死
uni-app 安卓本地打包应用会直接崩溃或者卡死
测试过的手机:
小米14 安卓15;荣耀 Magic6 安卓 15;vivo s15; vivo s19; vivo y200i.
操作步骤:
- 应用打开之后直接崩溃就会卡死或者崩溃,或者点登录的时候崩溃。抓取到的日志如上。
预期结果:
- 不卡死界面或者崩溃。
实际结果:
- 卡死界面或者崩溃。
bug描述:
安卓插件版本:
Android-SDK@4.36.82272_20241127
应用为安卓本地化插件,应用启动之后会卡死或者崩溃。
错误日志:
12-03 11:24:23.683 D/nativeloader(12396): Load /data/app/~~x8tKy2NVhzQITpGiDC-jOA==/com.ctfojt.jgzst-eWGaPsMeE_NnyHKs8sgV5A==/lib/arm64/libbreakpad-core.so using ns clns-8 from class loader (caller=/data/app/~~x8tKy2NVhzQITpGiDC-jOA==/com.ctfojt.jgzst-eWGaPsMeE_NnyHKs8sgV5A==/base.apk): ok
12-03 11:24:23.684 I/platform(12396): ClassNotFoundException io.dcloud.common.cs.DL getInstance
12-03 11:24:23.684 I/SWAP_SCENE( 2615): Delete memcg fail.
12-03 11:24:23.685 W/System.err(12396): java.lang.NoSuchFieldException: UTSHooksClassArray
12-03 11:24:23.685 W/System.err(12396): at java.lang.Class.getField(Class.java:2337)
...
12-03 14:27:22.207 W/Resources( 8785): Drawable com.ctfojt.jgzst:drawable/dcloud_circle_white_progress has unresolved theme attributes! Consider using Resources.getDrawable(int, Theme) or Context.getDrawable(int).
12-03 14:27:22.207 W/Resources( 8785): java.lang.RuntimeException
...
报错日志都是警告日志,不是崩溃的原因。看一下还有没有其他的日志。
或者提供一下安装包我们这边试一下
不管是zip和apk都无法上传成功,是不是上传附件的功能出错了?
可以上传到云盘在分享出来
通过网盘分享的文件:UNI49497FD_1203141535.apk
链接: https://pan.baidu.com/s/1VLrEm9Zhs45Oz_8gH6j6lQ?pwd=czww 提取码: czww
请问下有结果了吗?
应用的build.gradle发一下,下面发的这个只是library的
plugins {
id ‘com.android.library’
}
android {
namespace ‘com.sdp.etrust.sdk.plugin’
compileSdk 32
defaultConfig {
minSdk 19
targetSdk 32
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}e
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
compileOnly fileTree(dir: ‘libs’, include: [’*.jar’])
// 将aar导入
compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])
compileOnly fileTree(dir: '../app/libs', include: ['etrust-sdkv1.2.0.aar'])
// 导入依赖
compileOnly 'androidx.recyclerview:recyclerview:1.0.0'
compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'
compileOnly 'androidx.appcompat:appcompat:1.0.0'
compileOnly 'com.alibaba:fastjson:1.2.83'
compileOnly 'com.alibaba:fastjson:1.1.46.android'
compileOnly 'androidx.core:core:1.1.0'
compileOnly 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
}
plugins {
id ‘com.android.application’
}
android {
namespace ‘com.sdp.etrust.sdk.uniapp’
compileSdk 32
defaultConfig {
applicationId “com.sdp.etrust.sdk.uniapp”
minSdk 19
targetSdk 32
versionCode 1
versionName “1.0”
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation ‘androidx.appcompat:appcompat:1.4.1’
implementation ‘com.google.android.material:material:1.5.0’
implementation ‘androidx.constraintlayout:constraintlayout:2.1.3’
testImplementation ‘junit:junit:4.13.2’
androidTestImplementation ‘androidx.test.ext:junit:1.1.3’
androidTestImplementation ‘androidx.test.espresso:espresso-core:3.4.0’
}
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id ‘com.android.application’ version ‘7.2.1’ apply false
id ‘com.android.library’ version ‘7.2.1’ apply false
}
这个问题我这边无法复现,需要咱们这边配合一下。1:临时先去掉应用登录vpn的逻辑,去掉之后看还会不会崩溃。2:如果还会崩溃,麻烦提供一个能复现的原生项目,可以发百度云,项目压缩之前需要向clean一遍,减少包的体积。
在处理uni-app安卓本地打包应用崩溃或卡死的问题时,通常需要从多个角度进行排查,包括代码逻辑、资源加载、第三方库兼容性等。以下是一些常见的排查思路和代码示例,帮助你定位并解决问题。
1. 检查AndroidManifest.xml配置
确保AndroidManifest.xml
文件中的配置正确无误,特别是与权限和网络相关的配置。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.uniapp">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
... >
<!-- 其他配置 -->
</application>
</manifest>
2. 优化代码和资源加载
确保应用中的资源(如图片、音频等)大小适中,避免在UI线程中进行大量数据处理或I/O操作。
// 使用Promise或async/await处理异步操作
function loadResourcesAsync() {
return new Promise((resolve, reject) => {
// 模拟资源加载
setTimeout(() => {
resolve("Resources loaded");
}, 1000);
});
}
async function initApp() {
try {
await loadResourcesAsync();
console.log("App initialized");
} catch (error) {
console.error("Error loading resources:", error);
}
}
initApp();
3. 检查第三方库兼容性
如果使用了第三方库,确保它们与当前uni-app和Android SDK版本兼容。可以尝试更新或替换不兼容的库。
4. 使用try-catch捕获异常
在可能抛出异常的代码块中使用try-catch
语句,以便捕获并处理异常,防止应用崩溃。
try {
// 可能抛出异常的代码
someRiskyOperation();
} catch (error) {
console.error("Caught an error:", error);
// 可以进行错误处理,如显示错误提示等
}
5. 查看日志输出
使用Android Studio的Logcat查看应用运行时日志,分析崩溃或卡死时的日志输出,定位问题所在。
// 在Android Studio的Terminal中运行以下命令查看日志
adb logcat | grep "your_app_package_name"
6. 内存泄漏检测
使用Android Studio的Profiler工具检测内存泄漏,确保应用没有内存泄漏问题。
总结
以上步骤和代码示例提供了一些基本的排查思路和解决方法。如果问题依然存在,可能需要更深入地分析代码和日志,或者考虑与uni-app社区或专业开发者寻求帮助。