uni-app 安卓本地打包应用会直接崩溃或者卡死

发布于 1周前 作者 yuanlaile 来自 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  
...

13 回复

报错日志都是警告日志,不是崩溃的原因。看一下还有没有其他的日志。
或者提供一下安装包我们这边试一下


您好! 1、上传apk好像存在问题,我这边上传到一半就直接显示一个红x,不管是apk或者打成zip都无法上传。我这边使用百度云测试截取了一些日志,麻烦可以看下。 2、我看RuntimeException 是运行时异常,这个应该会导致崩溃吧。 3、目前只有部分设备会崩溃,我这个崩溃的日志是 荣耀 Magic6 安卓 15的崩溃。

不管是zip和apk都无法上传成功,是不是上传附件的功能出错了?

可以上传到云盘在分享出来

通过网盘分享的文件:UNI49497FD_1203141535.apk 链接: https://pan.baidu.com/s/1VLrEm9Zhs45Oz_8gH6j6lQ?pwd=czww 提取码: czww

请问下有结果了吗?

我这边在一些云端测试机上能复现这个问题,需要咱这边提供一下build.gradle,我这边用相同的环境试一下。

应用的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社区或专业开发者寻求帮助。

回到顶部