本文已参与「新人创作礼」活动,一起开启掘金创作之路。
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没有启动或者已经被解绑了。