2

我有一个具有核心模块的 Android 应用程序。编写作为标准 CLI Java 运行的模块很容易。

但是,如果我在 Android Eclipse 项目中复制此代码,则生成的字节码用于 dalvik VM,并且与 JRE 不兼容。

在这种情况下如何轻松开发......

有可能以某种方式将android项目中的代码作为标准JRE项目启动吗?是否可以在单独的标准项目中编写此代码并在 android 项目中包含一个 jar 文件或作为依赖项?

[编辑]

我已经尝试了 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项目中使用它(在libs目录中复制的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 文件格式...在 eclipse 中可以以某种方式使用 dalvik vm 编译 jar 和带有 jvm 的 jar?

4

2 回答 2

1

好的,所以我认为解决方案是使用 ant 或 maven 或类似的工具来构建两个不同的 jar 文件,一个与 jvm 兼容,一个与 dalvik 兼容。

起点可以是: http ://code.google.com/p/maven-android-plugin/wiki/GettingStarted

我不知道如何具体做到这一点,但我认为这在某种程度上是可能的。

于 2013-07-11T09:01:28.660 回答
0

您可以为其创建一个普通的额外 Java 项目,并将其添加为对 Android 的依赖项。换句话说,你可以使用构建工具,如 Ant、Maven 来为这个项目生成 jar,你可以将这个 jar 附加到 /libs 文件夹中,然后它会自动合并到你的 Android 项目中。我假设您使用的是 Eclipse IDE。

于 2013-06-29T14:50:03.437 回答