FinalCode Readerder app打开pdf失败,高通平台却可以打开的分析

打开pdf失败,弹出dialog显示“Tool for carrying out the fraud… … ”

异常时TraceView可以看到onItemClick事件处理在App中的方法。
在这里插入图片描述Traceview
最终有会调用Dialog .show,弹出显示框,且调用了两次,其异常stack如下:
*

show:302, Dialog (android.app)
c:-1, FileManagerActivity (jp.co.daj.finalcode.reader.file_manager)
a:-1, b (jp.co.daj.finalcode.reader.file_manager)
onItemClick:-1, s$2 (android.support.v4.app)
performItemClick:330, AdapterView (android.widget)
performItemClick:1190, AbsListView (android.widget)
run:3198, AbsListView$PerformClick (android.widget)
run:4116, AbsListView$3 (android.widget)
handleCallback:883, Handler (android.os)
dispatchMessage:100, Handler (android.os)
loop:214, Looper (android.os)
main:7356, ActivityThread (android.app)
invoke:-1, Method (java.lang.reflect)
run:492, RuntimeInit$MethodAndArgsCaller (com.android.internal.os)
main:930, ZygoteInit (com.android.internal.os)
show:302, Dialog (android.app)
show:1131, AlertDialog$Builder (android.app)
a:-1, c (jp.co.daj.finalcode.reader.b)
a:-1, c (jp.co.daj.finalcode.reader.b)
run:-1, FileManagerActivity$c$1 (jp.co.daj.finalcode.reader.file_manager)
handleCallback:883, Handler (android.os)
dispatchMessage:100, Handler (android.os)
loop:214, Looper (android.os)
main:7356, ActivityThread (android.app)
invoke:-1, Method (java.lang.reflect)
run:492, RuntimeInit$MethodAndArgsCaller (com.android.internal.os)
main:930, ZygoteInit (com.android.internal.os)

解决Build.TAGS = test-keys 问题
正常log:
09-18 17:55:33.874 14202 16515 D Checker : Check start
09-18 17:55:33.895 14202 16515 D Checker : Files : /sbin/su
09-18 17:55:33.895 14202 16515 D Checker : Files : /system/sbin/su
09-18 17:55:33.895 14202 16515 D Checker : Files : /product/bin/su
09-18 17:55:33.895 14202 16515 D Checker : Files : /apex/com.android.runtime/bin/su
09-18 17:55:33.895 14202 16515 D Checker : Files : /system/bin/su
09-18 17:55:33.896 14202 16515 D Checker : Files : /system/xbin/su
09-18 17:55:33.896 14202 16515 D Checker : Files : /odm/bin/su
09-18 17:55:33.896 14202 16515 D Checker : Files : /vendor/bin/su
09-18 17:55:33.896 14202 16515 D Checker : Files : /vendor/xbin/su

异常log:
09-18 03:01:08.575 6027 6189 D Checker : Check start
09-18 03:01:08.584 6027 6189 D Checker : Contains : Build.TAGS = test-keys
09-18 03:01:08.704 6027 6027 D FileManagerActivity$c$1.run:35: ######## DEVICE IS ROOTED ########

根据APP 源码分析正常时不会打印Contains : Build.TAGS = test-keys ,异常时打印,说明是Build.TAGS 返回的字符串有问题。根据堆栈找到
a:-1, c (jp.co.daj.finalcode.reader.b)方法其中有打印log **######## DEVICE IS ROOTED ########**的代码。正常时是不会走到这里的,

app code
所以进一步看 a:-1, b (jp.co.daj.finalcode.reader.file_manager)方法,又会掉h()方法,且有打印Contains : Build.TAGS = test-keys。获取的str=Build.TAGS,如果str 包含”test-key”,就会出这个问题。

app code
打开frameworks/base/core/java/android/os/Build.java,发现是读取的ro.build.tags 这个属性。

在这里插入图片描述
在这里插入图片描述

异常时查看设备ro.build.tags属性看看确实是test-keys
在这里插入图片描述于是到device中修改ro.build.tags属性值看看。

方法 1在如下文件中修改默认key的路径:
build/make/core/config.mk:765: DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey

方法2 在mk文件中配置property 直接强行设置成release-keys ,这里与实际用什么key无关。
device/rockchip/rk3368/tab10_rk68h_n3680/tab10_rk68h_n3680.mk:48: ro.build.tags = release-keys

分析到这里已经验证了user版本load是不会报这个错误的,不过,下一步目的是userdebug load需要正常运行apk,所以继续分析。
解决Exists : /system/xbin/su问题
新的问题是app卡在Exists : /system/xbin/su,那需要将/system/xbin/下的su文件去掉才能正常运行。
09-23 01:23:41.624 1760 1840 D Checker : Check start
09-23 01:23:41.649 1760 1840 D Checker : Files : /sbin/su
09-23 01:23:41.650 1760 1840 D Checker : Files : /system/sbin/su
09-23 01:23:41.650 1760 1840 D Checker : Files : /product/bin/su
09-23 01:23:41.651 1760 1840 D Checker : Files : /apex/com.android.runtime/bin/su
09-23 01:23:41.651 1760 1840 D Checker : Files : /system/bin/su
09-23 01:23:41.652 1760 1840 D Checker : Files : /system/xbin/su
09-23 01:23:41.652 1760 1840 D Checker : Exists : /system/xbin/su
09-23 01:23:41.751 1760 1760 D FileManagerActivity$c$1.run:35: ######## DEVICE IS ROOTED ########

/system/xbin/su这个文件是普通文件,非软链接。
tab10_rk68h_n3680:/ $ cd /system/xbin/
tab10_rk68h_n3680:/system/xbin $ ls -l
total 28
-rwxr-xr-x 1 root shell 15720 2021-09-22 08:34 io
-rwsr-x— 1 root shell 11520 2021-09-22 08:34 su

在system下找到su配置权限文件
system/core/libcutils/fs_config.cpp:200: { 04750, AID_ROOT, AID_SHELL, 0, “system/xbin/su” },

在vim system/extras/su/Android.mk 找到su mk 文件。

方案1 所以1是将su的输出路径设置修改为 system/xbin/vatron
vim system/extras/su/Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_CFLAGS := -Wall -Werror
LOCAL_SRC_FILES:= su.cpp
LOCAL_MODULE:= su
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)/vatron
include $(BUILD_EXECUTABLE)

修改后需要将/out/target/product/tab10_rk68h_n3680/system目录下的su 文件删除,或者执行make clean
然后再执行make -j16 ; ./mkimage.sh ; ./build.sh -u 命令。
烧写update.img后验证结果如下:
tanrong@tr-linux:/media/tanrong/Android/rk3368/tab10_rk68h_n3680$ adb shell
tab10_rk68h_n3680:/ $ cd /system/xbin/
tab10_rk68h_n3680:/system/xbin $ ls
io vatron

最终验证app能在user-debug 下正常运行。

方案二是在在如下路径中去除su的编译,直接不编译su模块
build/make/target/product/base_system.mk:368: su \

#如下PRODUCT_PACKAGES_DEBUG 是配置在eng or userdebug load中才需要编译的模块,这里可以把su 去掉,就实现在user-debug版本不再编译su模块。
build/make/target/product/base_system.mk:368
# Packages included only for eng or userdebug builds, previously debug tagged
PRODUCT_PACKAGES_DEBUG :=
adb_keys
arping
gdbserver
init-debug.rc
iotop
iw
logpersist.start
logtagd.rc
procrank
showmap
sqlite3
ss
strace
su
sanitizer-status
tracepath
tracepath6
traceroute6
unwind_info
unwind_reg_info
unwind_symbols \

经验证,方案二也不会在/system/xbin/下生成su文件。
不过这也会导致su命令在user-debug上不能正常运行,这里需要做取舍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值