android - 如何在 android ICS 上使用 'exec app_process' 启动 jar

标签 android process jar classloader

我有 3 台设备。

1.基于cm9(android 4.0.4)

2.htcg14(安卓4.0.3)

3.moto me525基于miui(android 2.2)

它们都是 Root过的。

我在设备 1 和 3 的终端中执行了下面的代码,该过程运行正常。 但是设备 2,它不起作用。

su
export CLASSPATH=/sdcard/foo.jar
exec app_process /system/bin xx.xx.Test '$@'

日志

W/dalvikvm(12364): Exception Ljava/lang/NullPointerException; thrown while initializing Ljava/lang/System;
W/dalvikvm(12364): Exception Ljava/lang/ExceptionInInitializerError; thrown while initializing Ljava/lang/ClassLoader$SystemClassLoader;
W/dalvikvm(12364): WARNING: system class loader is NULL (setting main ctxt)
W/dalvikvm(12364): Warning: tracked references remain post-initialization
W/dalvikvm(12364): MAIN reference table (0xf9a388) dump:
W/dalvikvm(12364):   Last 1 entries (of 1):
E/dalvikvm(12364): Class lookup Ljava/lang/Daemons; attempted with exception pending
W/dalvikvm(12364): Pending exception is:
I/dalvikvm(12364): java.lang.ExceptionInInitializerError:
I/dalvikvm(12364):     at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
I/dalvikvm(12364):     at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm(12364): Caused by:
I/dalvikvm(12364): java.lang.ExceptionInInitializerError:
I/dalvikvm(12364):     at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:100)
I/dalvikvm(12364):     at java.lang.ClassLoader.access$000(ClassLoader.java:65)
I/dalvikvm(12364):     at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81)
I/dalvikvm(12364):     at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
I/dalvikvm(12364):     at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm(12364): Caused by:
I/dalvikvm(12364): java.lang.NullPointerException:
I/dalvikvm(12364):     at java.util.Hashtable.put(Hashtable.java:365)
I/dalvikvm(12364):     at java.lang.System.initSystemProperties(System.java:286)
I/dalvikvm(12364):     at java.lang.System.getProperties(System.java:260)
I/dalvikvm(12364):     at java.lang.System.getProperty(System.java:425)
I/dalvikvm(12364):     at java.lang.System.getProperty(System.java:406)
I/dalvikvm(12364):     at java.lang.System.<clinit>(System.java:90)
I/dalvikvm(12364):     at java.lang.ClassLoader.createSystemClassLoader(ClassLoader.java:100)
I/dalvikvm(12364):     at java.lang.ClassLoader.access$000(ClassLoader.java:65)
I/dalvikvm(12364):     at java.lang.ClassLoader$SystemClassLoader.<clinit>(ClassLoader.java:81)
I/dalvikvm(12364):     at java.lang.ClassLoader.getSystemClassLoader(ClassLoader.java:125)
I/dalvikvm(12364):     at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm(12364): DALVIK THREADS:
I/dalvikvm(12364): (mutexes: tll=0 tsl=0 tscl=0 ghl=0)
I/dalvikvm(12364): "main" prio=5 tid=1 RUNNABLE
I/dalvikvm(12364):   | group="main" sCount=0 dsCount=0 obj=0x40aa1490 self=0xf99d30
I/dalvikvm(12364):   | sysTid=12364 nice=0 sched=0/0 cgrp=default handle=1074107592
I/dalvikvm(12364):   | schedstat=( 0 0 0 ) utm=18 stm=7 core=0
I/dalvikvm(12364):   at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm(12364): 
E/dalvikvm(12364): VM aborting
F/libc    (12364): Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1)
I/DEBUG   ( 4218): debuggerd: 2012-08-02 14:29:57
I/DEBUG   ( 4218): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   ( 4218): Build fingerprint: 'htc_asia_tw/htc_pyramid/pyramid:4.0.3/IML74K/391535.6:user/release-keys'
I/DEBUG   ( 4218): pid: 12364, tid: 12364  >>> app_process <<<
I/DEBUG   ( 4218): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d

当我在 java 中执行这些代码时,设备 1 和 2 不工作。它们有相同的错误。关于设备 3,我不知道结果,因为有人取回了他的设备。

帮助!有什么想法吗?

最佳答案

似乎在启动 dalvikvm 时,您的 LD_LIBRARY_PATH 没有在环境中正确设置。 在 ICS 和 JB 中,dalvikvm 要求 LD_LIBRARY_PATH 在其中有特定的路径。默认是 /vendor/lib:/system/lib,尽管通常 /system/lib 就足够了。否则你会看到异常。

您可以尝试在脚本中的 su 命令之后添加 export LD_LIBRARY_PATH=/vendor/lib:/system/lib

如果您的 euid 与您的 uid 不匹配,LD_LIBRARY_PATH 可能会从环境中删除。您可以在 su 之后使用 idid -r 来检查它们是否匹配。您还可以检查 /system/bin/mksh 是否设置了 setuid,因为这也可能导致问题。

关于android - 如何在 android ICS 上使用 'exec app_process' 启动 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11773506/

相关文章:

java - 我们需要在 finally block 中将流程变量设置为 null 吗?

c# - File.Delete 无法删除文件,因为该文件正在被另一个进程使用。不知道如何解决这个问题

Java 图像加载未显示在 jar 中

java - docker 运行 nginx 加 jar

android - 什么是App多行文字共享 Intent

java - 使用 NFC 标签打开应用程序时无法获取 NDEF_DISCOVERED 操作

java - Android 更改 XML 布局 更改数据字段

android - 使用喷气背包导航按返回总是返回起始目的地

java - 如何将字符串变量作为 shell 脚本参数传递?

java - Gradle 与 Maven 中的依赖路径差异