Java 需要帮助在ubuntu上移植android以运行android应用程序吗

Java 需要帮助在ubuntu上移植android以运行android应用程序吗,java,android,ubuntu,dalvik,Java,Android,Ubuntu,Dalvik,我正在尝试将android移植到ubuntu(x86)上,以便运行 安卓APKs位于ubuntu之上。这是我到目前为止所拥有的 我用所有与android相关的选项构建了linux内核3.14.4- # # Android # CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y CONFIG_ASHMEM=y CONFIG_ANDROID_LOGGER=y CONFIG_ANDROID_TIMED_OUTPUT=y CONFIG_ANDROID_TIMED_G

我正在尝试将android移植到ubuntu(x86)上,以便运行 安卓APKs位于ubuntu之上。这是我到目前为止所拥有的

我用所有与android相关的选项构建了linux内核3.14.4-

#
# Android
#
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ASHMEM=y
CONFIG_ANDROID_LOGGER=y
CONFIG_ANDROID_TIMED_OUTPUT=y
CONFIG_ANDROID_TIMED_GPIO=y
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
CONFIG_ANDROID_INTF_ALARM_DEV=y
CONFIG_SYNC=y
CONFIG_SW_SYNC=y
CONFIG_SW_SYNC_USER=y
CONFIG_ION=y
我为x86构建了AOSP android,并复制了/system文件夹的内容 在我的机器的/system目录上(我创建了这个目录)。我是 能够使用dalvikvm运行简单的Java程序

/system/bin$ ./dalvikvm -cp ~/HelloWorld.zip HelloWorld
WARNING: linker: libdvm.so has text relocations. This is wasting
memory and is a security risk. Please fix.
Hello World!
但每当我尝试运行任何android应用程序时,我都会遇到问题。我试过了 要使用am命令运行浏览器应用程序,请执行以下操作-

/system/bin$ ./am start -a android.intent.action.MAIN -n
com.android.browser/.BrowserActivity
Aborted (core dumped)
export ANDROID_ROOT=/system
bootpath=/system/framework
export BOOTCLASSPATH=$bootpath/core.jar:$bootpath/ext.jar:$bootpath/framework.jar:$bootpath/android.policy.jar:$bootpath/services.jar
export ANDROID_DATA=/data
它使程序崩溃。我已经收集了这个命令的strace输出 无论我运行什么应用程序,我都会得到相同的“中止(内核转储)”

距离输出-

writev(10, [{"\5", 1}, {"dalvikvm\0", 9}, {"Unable to resolve
superclass of Lcom/android/commands/am/Am; (42)\0", 66}], 3) = 76
writev(10, [{"\5", 1}, {"dalvikvm\0", 9}, {"Link of class
'Lcom/android/commands/am/Am;' failed\0", 52}], 3) = 62
mprotect(0xb1d26000, 4096, PROT_READ|PROT_WRITE) = 0
writev(10, [{"\6", 1}, {"appproc\0", 8}, {"ERROR: could not find class
'com.android.commands.am.Am'\n\0", 58}], 3) = 67
writev(10, [{"\5", 1}, {"dalvikvm\0", 9}, {"JNI WARNING: JNI function
NewGlobalRef called with exception pending\0", 69}], 3) = 79
writev(10, [{"\5", 1}, {"dalvikvm\0", 9}, {"             in
Ldalvik/system/NativeStart;.main:([Ljava/lang/String;)V
(NewGlobalRef)\0", 87}], 3) = 97
writev(10, [{"\5", 1}, {"dalvikvm\0", 9}, {"Pending exception is:\0",
22}], 3) = 32
writev(10, [{"\4", 1}, {"dalvikvm\0", 9},
{"java.lang.NoClassDefFoundError: com/android/commands/am/Am\0", 59}],
3) = 69
writev(10, [{"\4", 1}, {"dalvikvm\0", 9}, {"\tat
dalvik.system.NativeStart.main(Native Method)\0", 50}], 3) = 60
writev(10, [{"\4", 1}, {"dalvikvm\0", 9}, {"Caused by:\0", 11}], 3) = 21
writev(10, [{"\4", 1}, {"dalvikvm\0", 9},
{"java.lang.ClassNotFoundException: Didn't find class
\"com.android.commands.am.Am\" on path: DexPathList[[zip file
\"/system/framework/am.jar\"],nativeLibraryDirectories=[/system/lib]]\0",
180}], 3) = 190
writev(10, [{"\4", 1}, {"dalvikvm\0", 9}, {"\tat
dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)\0",
75}], 3) = 85
writev(10, [{"\4", 1}, {"dalvikvm\0", 9}, {"\tat
java.lang.ClassLoader.loadClass(ClassLoader.java:497)\0", 58}], 3) =
68
writev(10, [{"\4", 1}, {"dalvikvm\0", 9}, {"\tat
java.lang.ClassLoader.loadClass(ClassLoader.java:457)\0", 58}], 3) =
68
writev(10, [{"\4", 1}, {"dalvikvm\0", 9}, {"\tat
dalvik.system.NativeStart.main(Native Method)\0", 50}], 3) = 60
命令似乎找不到com.android.commands.am.am类(或其超类) 而我在/system/framework/中有am.jar,它应该提供它

各种环境变量的设置如下-

/system/bin$ ./am start -a android.intent.action.MAIN -n
com.android.browser/.BrowserActivity
Aborted (core dumped)
export ANDROID_ROOT=/system
bootpath=/system/framework
export BOOTCLASSPATH=$bootpath/core.jar:$bootpath/ext.jar:$bootpath/framework.jar:$bootpath/android.policy.jar:$bootpath/services.jar
export ANDROID_DATA=/data
有人能帮忙吗?我似乎不知道出了什么问题

可以在此处查看完整的strace输出-


感谢查看kitkat发行版,
com.android.commands.am.am
的超类是
com.android.internal.os.BaseCommand
。您能否验证您的类路径中是否有这个文件(例如,dextump/dexlist jar文件,直到找到它为止)?崩溃似乎是由于本机代码中的一个错误导致的,它无法检查错误,并且当调用NewGlobalRef时,虚拟机正在变形,出现了一个挂起的异常。谢谢,我使用dexdump解决了我的错误。看起来BaseCommand类位于framework2.jar中。因此,在我将其添加到BOOTCLASSPATH之后,问题就消失了。现在我面临一个新问题,我在下面描述了它。