java - 将 android java 代码作为标准 java 应用程序运行

标签 java android eclipse adt dalvik

我有一个包含核心模块的 Android 应用程序。将运行它的模块编码为标准 CLI 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 项目中使用它(在 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 吗?

最佳答案

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

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

我不知 Prop 体怎么做,但我认为在某种程度上是可能的。

关于java - 将 android java 代码作为标准 java 应用程序运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17381351/

相关文章:

android跨度点击事件

java - 从字符串创建半三角形

java - 在两个链接表(通过 fk 链接)的第二个表中创建行不起作用

java.lang.NullPointerException 第 53 行

java - 处理图形错误

android - 在安卓中创建手势

android - 警报对话框 : Margin on top

java - JSF 入门 - Eclipse 上的 Richfaces

java - Eclipse项目 "locked"

java - 什么是 Java 中的对象字段初始化和构造函数顺序