Android 内置APK 无法开机(开机后apk闪退)

介绍

在开发时我们会遇到一些客户提供应用来让我们内置到系统中,当我们内置后有事会导致无法开机,这是由于应用申请了一些敏感权限,我们只要通过log找到应用所需的权限并在白名单中添加即可。

如无法开机先刷正常软件打开 usb调试 成功连接usb后关机
刷入问题软件开机等待一会(烧录软件不要勾选userdata)
输入命令
adb logcat > D:/logs/boot.log
(waiting for device -)如出现括号内容则 ctry+c 重新执行
adb logcat > D:/logs/boot.log
直到进入recover 结束log
打开log 找关键字 whitelist 会提示包名和所需权限

log信息如下 明显是了包名

whitelist: {com.telosystems2.poc: android.permission.READ_LOGS, com.telosystems2.poc: android.permission.MOUNT_UNMOUNT_FILESYSTEMS}

路径:vendor/mediatek/proprietary/frameworks/base/data/etc/privapp-permissions-mediatek.xml

然后在此路径添如下
<privapp-permissions package="com.telosystems2.poc">
        <permission name="android.permission.READ_LOGS"/>
        <permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
</privapp-permissions>

以上步骤弄完后 如打开apk闪退 logcat 抓取apklog

FATAL EXCEPTION: main 12-27 18:53:40.594 4001 4001 E AndroidRuntime: Process: com.telosystems2.poc, PID: 4001 12-27 18:53:40.594 4001 4001 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/app/Instatalk/Instatalk.apk!/lib/armeabi-v7a/libairtalkee.so" needed or dlopened by "/apex/com.android.runtime/lib/libnativeloader.so" is not accessible for the namespace "classloader-namespace"

此时需要提取APK的so文件
将apk名改为.zip 无需解压 提取对应目录所有 so文件 拉入到 prebuilts
查看对应库是32/64位 进行编译

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := Instatalk
LOCAL_SRC_FILES := Instatalk.apk
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_DEX_PREOPT := false
LOCAL_ENFORCE_USES_LIBRARIES := false
#此处位32位编译命令
LOCAL_PREBUILT_JNI_LIBS_arm := $(subst $(LOCAL_PATH)/,,$(wildcard $(LOCAL_PATH)/*.so))
include $(BUILD_PREBUILT)

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不太正常的移动开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值