l***@hongyangsoft.com
l***@hongyangsoft.com
  • 发布:2023-09-28 16:40
  • 更新:2023-09-28 16:40
  • 阅读:364

【报Bug】Android-x86 8.1 r6以系统APP权限安装使用原生插件的APP无法启动

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: Windows 10 21H2

HBuilderX类型: 正式

HBuilderX版本号: 3.8.12

手机系统: Android

手机系统版本号: Android 8.1

手机厂商: 模拟器

手机机型: Android-x86 8.1 r6

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

打包原生库时候用的build.gradle

apply plugin: 'com.android.library'  

android {  
    compileSdkVersion 29  
    defaultConfig {  
        minSdkVersion 16  
        targetSdkVersion 28  

        testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'  

    }  

    buildTypes {  
        release {  
            minifyEnabled false  
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
        }  
    }  
    namespace 'com.hongyang.hongyangplugins'  

}  

repositories {  
    flatDir {  
        dirs 'libs'  
    }  
}  

dependencies {  
    compileOnly fileTree(dir: 'libs', include: ['*.jar'])  

    compileOnly fileTree(dir: '../app/libs', include: ['uniapp-v8-release.aar'])  

    compileOnly 'androidx.recyclerview:recyclerview:1.0.0'  
    compileOnly 'androidx.legacy:legacy-support-v4:1.0.0'  
    compileOnly 'androidx.appcompat:appcompat:1.0.0'  
    implementation 'com.alibaba:fastjson:1.2.83'  
    implementation 'com.facebook.fresco:fresco:1.13.0'  

    /*implementation 'com.android.support:appcompat-v7:28.0.0'  
    testImplementation 'junit:junit:4.12'  
    androidTestImplementation 'com.android.support.test:runner:1.0.2'  
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'*/  
}  

原生插件使用的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
    android:sharedUserId="android.uid.system" android:installLocation="internalOnly">  
    <!--<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />  
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>  
    <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/>-->  

    <application>  
        <!--<receiver android:name=".common.BootBroadcastReceiver"  
            android:exported="true">  
            <intent-filter android:priority="1000">  
                <action android:name="android.intent.action.BOOT_COMPLETED"/>  
                <action android:name="android.intent.action.QUICKBOOT_POWERON" />  
                <category android:name="android.intent.category.LAUNCHER" />  
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>  
        </receiver>-->  
    </application>  
</manifest>

代码没有什么特殊的,很传统的PowerManager开关机的代码,以及自启动的代码。
签名用的是AOSP下8.1分支的安卓系统签名生成的keystore签名(运行在System分区下必要的签名)。

操作步骤:

首先正常打包原生插件和相应的安装包
然后ADB运行安装指令,例如

adb push D:\Download\__UNI__6E3A09F_0928105935.apk /system/app/__UNI__6E3A09F_0928105935.apk  
adb shell chmod 777 /system/app/__UNI__6E3A09F_0928105935.apk

然后重启安卓系统,安卓系统会自动安装放置在/System/app和/System/prvi-app分区的apk文件,然后应用就被装上了

预期结果:

因为有自启动代码(上面例子为后期测试人为注释掉了自启动接收器代码)存在,所以开机应该会自动进入这个APP,并且展示界面

实际结果:

也确实自启了APP,但是不知道什么原因无法正常启动APP,手动点击已安装应用中的APP也是一样的结果,就是上面的报错

bug描述:

巨奇怪,使用了自行开发的原生插件的APP使用ADB使用安装System应用的方式的时候,应用启动失败,logcat查看报下列错误:

09-28 15:46:55.668 D/AndroidRuntime( 5029): Shutting down VM
09-28 15:46:55.668 E/AndroidRuntime( 5029): FATAL EXCEPTION: main
09-28 15:46:55.668 E/AndroidRuntime( 5029): Process: uni.UNI6E3A09F, PID: 5029
09-28 15:46:55.668 E/AndroidRuntime( 5029): java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/system/priv-app/UNI6E3A09F_0928105935.apk"],nativeLibraryDirectories=[/system/lib64/UNI6E3A09F_0928105935, /system/lib64, /system/vendor/lib64, /system/lib64, /system/vendor/lib64]]] couldn't find "libbreakpad-core.so"
09-28 15:46:55.668 E/AndroidRuntime( 5029): at java.lang.Runtime.loadLibrary0(Runtime.java:1011)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at java.lang.System.loadLibrary(System.java:1657)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at com.sample.breakpad.BreakpadInit.<clinit>(BreakpadInit.java:6)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at com.sample.breakpad.BreakpadInit.initBreakpad(BreakpadInit.java:10)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at io.dcloud.common.util.NativeCrashManager.initNativeCrash(Unknown Source:7)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at io.dcloud.application.DCLoudApplicationImpl.onCreate(Unknown Source:7)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at io.dcloud.application.DCloudApplication.onCreate(Unknown Source:2)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5740)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at android.app.ActivityThread.-wrap1(Unknown Source:0)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at android.os.Handler.dispatchMessage(Handler.java:106)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at android.os.Looper.loop(Looper.java:164)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at android.app.ActivityThread.main(ActivityThread.java:6494)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at java.lang.reflect.Method.invoke(Native Method)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:463)
09-28 15:46:55.668 E/AndroidRuntime( 5029): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
09-28 15:46:55.670 W/ActivityManager( 2740): Force finishing activity uni.UNI6E3A09F/io.dcloud.PandoraEntry
09-28 15:46:55.674 I/ActivityManager( 2740): Showing crash dialog for package uni.UNI6E3A09F u0

但是普通模式下ADB install指令安装就没有什么问题,是不是System APP打包需要额外的技巧啊?

2023-09-28 16:40 负责人:无 分享
已邀请:

要回复问题请先登录注册