瑞芯微Rockchip开发者社区
直播中

回头太晚

9年用户 794经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

怎样去解决RK3399 Android7.1强制使用32位库的问题呢

怎样去解决RK3399 Android7.1强制使用32位库的问题呢?

回帖(1)

叶恒

2022-3-9 11:04:13
  测试
  形式:RK33999999.1.Android
  7.1.1
  显示
  我们具有系统权限()的apk,由于该系统位因此而使用的操作系统:因此,只有 323232引导或出现其他类型uid=系统应用程序如KeyChain)(找不到的odex文件(类),导致报错,logProcess
  : com.android.keychain, PID: 1177
  java.lang.RuntimeException:无法实例化服务 com.android.keychain.KeyChainService:java.lang.ClassNotFoundException:在路径上找不到类“com.android.keychain.KeyChainService”:DexPathList [[zip 文件“/system/app/KeyChain/KeyChain. apk“],nativeLibraryDirectories=[/system/app/KeyChain/lib/arm64, /system/app/KeyChain/KeyChain.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /system/lib , /vendor/lib]]
  在 android.app.ActivityThread.handleCreateService(ActivityThread.java:3186)
  在 android.app.ActivityThread.-wrap5(ActivityThread.java)
  在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1577)
  在 android.os.Handler.dispatchMessage(Handler.java:102)
  在 android.os .Looper.loop(Looper.java:154)
  at android.app.ActivityThread.main(ActivityThread.java:6157)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit $MethodAndArgsCaller.run(ZygoteInit.java:912)
  在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
  引起:java.lang.ClassNotFoundException:在路径上找不到类“com.android.keychain.KeyChainService”:DexPathList[[zip file ”/system/app/KeyChain/KeyChain.apk“],nativeLibraryDirectories=[/system /app/KeyChain/lib/arm64, /system/app/KeyChain/KeyChain.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib, /system/lib, /vendor/lib]]
  在 dalvik .system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
  在 java.lang.ClassLoader.loadClass(ClassLoader.java:380)
  在 java.lang.ClassLoader.loadClass(ClassLoader.java:312)
  在 android.app.ActivityThread。
  android.app.ActivityThread.-wrap5( ActivityThread.java)处的 handleCreateService(ActivityThread.java:3183)
  在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1577)
  在 android.os.Handler.dispatchMessage(Handler.java:102)
  在 android.os.Looper.loop(Looper.java:154)
  在 android。 app.ActivityThread.main(Activity我们遇到
  的问题是,我们自己编写的应用是系统应用,使用了系统的systemuid,就是和setting的uid是一样的,而且我们是32位apk,setting是64位apk ,这样的日志开始发现的时候发现分析遇到设置不到lib库。。
  分析
  了系统,从7.1系统有一个新特性,就是相同uid的应用会使用相同的lib地址,以uid =系统的应用举例。如果使用lib64就都是lib64,如果是lib,不能32和64排。而指定32还是64是第一个解析到的uid=系统的应用动态所以当他第一个解析到我们的应用程序时,发现是指定 32 位,然后当其他运行时,他的类 ui=lib 就去 lib=64 下寻找,但是其他的,所以通过寻找找不到类报错的问题解决方案1)或者将部分库的方案(但是会出现找不到类报错的问题
  解决方案
  1)或者将3个库的部分解决方案(但是会帮助找到一个22位的解决方案)
  。 1.部分需要所以库只有32位找不到64位
  方案2.有的时候出问题的ap我们没有修改那么根本无法,所以也拒绝。就剩下的
  方案3:
  1.在apk的android.mk中
  LOCAL_DEX_PREOPT := nostripping
  2./device/rockchip/rk3399 /BoardConfig.mk,
  DEX_PREOPT_DEFAULT=nostripping
  3的英文版本时,不会是从apk里面生成odex的时候。下面的codek出来,这样可以查询lib类ex时解析apk中的classes.dex,不会报错。
  但是这样也有好处,会导致体积变大,没有其他更好的解决办法先这样解决吧。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分