Android ARM32/64位调试问题及解决方法集锦

493 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、如何查看一个文件是32位还是64位。

答:使用 file 命令

file /system/bin/dalvikvm64

/system/bin/dalvikvm64: ELF shared object, 64-bit LSB arm64, dynamic (/system/bin/linker64), for Android 28, BuildID=17f49e4a4ec8b7f4ace738c1146fe0a6, stripped

注:file /system/bin/dalvikvm 是个符号链接,用来兼容之前32位 /system/bin/dalvikvm: symbolic link

file libchrome.so libchrome.so: ELF shared object, 32-bit LSB arm, for Android 28, BuildID=7b0eff684ce95745e2b2a3a2e0ad4398, stripped

2、如果查看一个apk是32位还是64位启动的

答:

(1)通过看父进程是zygote还是zygote64

(2) cat /proc/4215/maps |grep lib64

查看加载的.so库

ps -A|grep zygote

root 935 1 4312904 155112 poll_schedule_timeout 0 S zygote64 启动64位apk root 936 1 1632628 139536 poll_schedule_timeout 0 S zygote

u0_a11 1433 935 4483840 186160 SyS_epoll_wait 0 S com.android.systemui u0_a7 2178 935 4412148 105000 SyS_epoll_wait 0 S android.process.media bluetooth 2423 935 4400136 89040 SyS_epoll_wait 0 S com.android.bluetooth system 2983 935 4389644 79828 SyS_epoll_wait 0 S com.android.keychain u0_a8 3013 935 4395316 81680 SyS_epoll_wait 0 S android.ext.services u0_a1 15796 935 4396308 104332 SyS_epoll_wait 0 S android.process.acore

3、多次安装卸载修改调试某个Apk,如何清理缓存。

答:删除 /data/dalvik-cache/arm64 或 /data/dalvik-cache/armlib 目录下对应的文件。

4、报错 java.lang.ClassNotFoundException

java.lang.ClassNotFoundException: Didn't find class "com.target." on path: DexPathList[[zip file "/system/priv-app

zygote64 Rejecting re-init on previously-failed class java.lang.Class<com.>: java.lang.NoClassDefFoundError: Failed resolution of: $TargetClass;

答:查看SDK版本问题、缓存问题、.so库路径。

5. avc denied 错误

在Android 8.1 由于seLinux权限管理很严格,默认app 修改属性会报 avc denied 错误.

6.android.uid.system 同一个uid的应用不能32位和64位混着用。

解决方法: 1.在apk对应的android.mk中

LOCAL_DEX_PREOPT := nostripping 2. /device/qcom/msmxxxx/BoardConfig.mk, DEX_PREOPT_DEFAULT := nostripping

7. 怎样将apk安装成系统应用。

上传apk到目录 /system/app 或 /system/priv-app。

把apk中的.so库上传到 /system/lib或/system/lib64

8、java.lang.IllegalArgumentException: Service not registered

2021-12-18 21:40:24.102 8180-8180/com.app.servicetest E/AndroidRuntime: FATAL EXCEPTION: main Process: com.app.servicetest, PID: 8180 java.lang.IllegalArgumentException: Service not registered: com.app.servicetest.MainActivity$1@cfb68ff at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1887) at android.app.ContextImpl.unbindService(ContextImpl.java:1954) at android.content.ContextWrapper.unbindService(ContextWrapper.java:810) at com.app.servicetest.MainActivity.onClick(MainActivity.java:96) at android.view.View.performClick(View.java:8160) at android.widget.TextView.performClick(TextView.java:16222)

原因:unbindService 解绑的 Service没有启动或者已经被解绑了。