我有一個具有核心模塊的Android應用程序。將運行它的模塊編碼爲標準CLI Java很容易。將Android java代碼作爲標準java應用程序運行
但是,如果我在Android Eclipse項目中複製此代碼,則生成的字節代碼爲dalvik VM,並且與JRE不兼容。
如何容易在這種情況下開發...
有可能以某種方式代碼,推出在Android項目作爲標準JRE的項目嗎? 這是可能的代碼在一個單獨的標準項目中的代碼,幷包括一個jar文件或作爲依賴在android項目?
[編輯]
我試圖從Alécio的解決方案,我有建設兩個項目:
JVM項目與此代碼:
package jvm;
public class SimpleJvm {
public SimpleJvm() {
System.out.println("Ciao!") ;
}
public static void main(String[] args) {
SimpleJvm simple = new SimpleJvm() ;
}
}
打包成一個JAR文件中運行給出:
C:\Users\Antonio\Desktop>java -cp simplejvm.jar jvm.SimpleJvm
Ciao!
但在Android項目中使用它與此代碼(jar複製在庫目錄):
package com.simpleandroid ;
import android.os.Bundle ;
import android.app.Activity ;
import android.view.Menu ;
import jvm.SimpleJvm;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState) ;
setContentView(R.layout.activity_main) ;
SimpleJvm simple = new SimpleJvm() ;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu) ;
return true ;
}
}
給出:
07-05 16:51:33.386: E/dalvikvm(2102): Could not find class 'jvm.SimpleJvm', referenced from method com.simpleandroid.MainActivity.onCreate
...
07-05 16:51:33.686: E/AndroidRuntime(2102): FATAL EXCEPTION: main
07-05 16:51:33.686: E/AndroidRuntime(2102): java.lang.NoClassDefFoundError: jvm.SimpleJvm
07-05 16:51:33.686: E/AndroidRuntime(2102): at com.simpleandroid.MainActivity.onCreate(MainActivity.java:15)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.app.Activity.performCreate(Activity.java:5104)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.app.ActivityThread.access$600(ActivityThread.java:141)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.os.Handler.dispatchMessage(Handler.java:99)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.os.Looper.loop(Looper.java:137)
07-05 16:51:33.686: E/AndroidRuntime(2102): at android.app.ActivityThread.main(ActivityThread.java:5039)
07-05 16:51:33.686: E/AndroidRuntime(2102): at java.lang.reflect.Method.invokeNative(Native Method)
07-05 16:51:33.686: E/AndroidRuntime(2102): at java.lang.reflect.Method.invoke(Method.java:511)
07-05 16:51:33.686: E/AndroidRuntime(2102): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-05 16:51:33.686: E/AndroidRuntime(2102): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-05 16:51:33.686: E/AndroidRuntime(2102): at dalvik.system.NativeStart.main(Native Method)
我認爲原因是不同的.class文件格式......這有可能在日食以某種方式使用Dalvik的編譯罐子vm和jvm的jar?
好的,但如果jar包含標準的JVM .class文件,這是由dalvik VM執行的嗎? – Antonio
是的。嘗試一下並分享你的結果。 –
無法運行與jar文件相關的第一行代碼:無法找到類 – Antonio