2

ICU-Project.org ライブラリ (ICU4J v55.1)を Android アプリで使用しようとしていますが、これは Java カレンダーに代わる優れた代替手段 (日本語やイスラム暦など) を備えていましたが、jar ファイルは常に Eclipse またはアプリでクラッシュを引き起こします。

Android アプリでは使用できませんが、通常の Java プロジェクトでは 100% 正常に動作するため、何が問題なのかわかりません

初めて、jarファイルをlibフォルダーにコピーしてから、右クリック>ビルドパスに追加します

Androidエミュレーターでアプリを実行すると、このメソッドは以下のメッセージでIDEを強制終了します:

Unable to execute dex: Java heap space
Java heap space

以下に示すようにヒープスペースを増やしましたが、何も解決しませんでした:

--launcher.XXMaxPermSize
2048M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
2048m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms2048m
-Xmx2048m

2回目:jarファイルを削除し、から追加しました(MyAppを右クリック>プロパティ> Javaビルドパス>ライブラリタブ>外部jarを追加

[注文とエクスポート] タブで、jar のチェックが外されている

Android Emulator を実行すると動作しますが、アプリが以下のエラーでクラッシュします。

08-27 18:46:06.635: I/dalvikvm(295): Could not find method com.ibm.icu.util.Calendar.getInstance, referenced from method com.c.cx.Main.onCreate
08-27 18:46:06.635: W/dalvikvm(295): VFY: unable to resolve static method 13898: Lcom/ibm/icu/util/Calendar;.getInstance ()Lcom/ibm/icu/util/Calendar;
08-27 18:46:06.665: D/dalvikvm(295): VFY: replacing opcode 0x71 at 0x0009
08-27 18:46:06.665: D/dalvikvm(295): VFY: dead code 0x000c-002b in Lcom/c/cx/Main;.onCreate (Landroid/os/Bundle;)V
08-27 18:46:06.805: D/AndroidRuntime(295): Shutting down VM
08-27 18:46:06.805: W/dalvikvm(295): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
08-27 18:46:06.815: E/AndroidRuntime(295): FATAL EXCEPTION: main
08-27 18:46:06.815: E/AndroidRuntime(295): java.lang.NoClassDefFoundError: com.ibm.icu.util.Calendar
08-27 18:46:06.815: E/AndroidRuntime(295):  at com.c.cx.Main.onCreate(Main.java:15)
08-27 18:46:06.815: E/AndroidRuntime(295):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-27 18:46:06.815: E/AndroidRuntime(295):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
08-27 18:46:06.815: E/AndroidRuntime(295):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
08-27 18:46:06.815: E/AndroidRuntime(295):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
08-27 18:46:06.815: E/AndroidRuntime(295):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
08-27 18:46:06.815: E/AndroidRuntime(295):  at android.os.Handler.dispatchMessage(Handler.java:99)
08-27 18:46:06.815: E/AndroidRuntime(295):  at android.os.Looper.loop(Looper.java:123)
08-27 18:46:06.815: E/AndroidRuntime(295):  at android.app.ActivityThread.main(ActivityThread.java:4627)
08-27 18:46:06.815: E/AndroidRuntime(295):  at java.lang.reflect.Method.invokeNative(Native Method)
08-27 18:46:06.815: E/AndroidRuntime(295):  at java.lang.reflect.Method.invoke(Method.java:521)
08-27 18:46:06.815: E/AndroidRuntime(295):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
08-27 18:46:06.815: E/AndroidRuntime(295):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
08-27 18:46:06.815: E/AndroidRuntime(295):  at dalvik.system.NativeStart.main(Native Method)

ライブラリの私の使用法:

package com.c.cx;

import com.ibm.icu.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class Main extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Calendar cal = Calendar.getInstance();      
        Toast.makeText(getApplicationContext(), ""+cal.get(Calendar.YEAR), Toast.LENGTH_SHORT).show();

    }

}

私のJDKバージョン:1.6、1.7に変更しましたが、何も解決しませんでした。

判断する前に試してみてください。

4

1 に答える 1