2013-06-29 86 views
2

我有一個具有核心模塊的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?

回答

0

您可以爲它創建一個額外的普通Java項目,並且可以將它添加爲Android的依賴項。換句話說,你可以使用構建工具,比如Ant,Maven爲這個項目生成jar,你可以將這個jar附加到/ libs文件夾,然後它會自動合併到你的Android項目中。我假設你正在使用Eclipse IDE。

+0

好的,但如果jar包含標準的JVM .class文件,這是由dalvik VM執行的嗎? – Antonio

+0

是的。嘗試一下並分享你的結果。 –

+0

無法運行與jar文件相關的第一行代碼:無法找到類 – Antonio

相關問題