Android, класс не найден из импортированного файла JAR - PullRequest
11 голосов
/ 27 декабря 2011

Я включил jar-файл в свой проект Android, как описано в Как я могу использовать внешние JAR-файлы в проекте Android? .Используя оба метода, описанные MannyNS и Vinayak B. в этом посте, я получаю сообщение об ошибке «Не удалось найти класс 'test.libraryCalc.Calc", который является классом, предоставляемым библиотекой.Следующий код иллюстрирует проблему:

Пример класса, предоставляемый через библиотеку: Calc.java

package test.libraryCalc;

public class Calc {
    public int add(int a, int b){
        return a + b;
    }
}

LibraryTestActivity.java

package test.library;

import test.libraryCalc.Calc;
import android.app.Activity;
import android.os.Bundle;

public class LibraryTestActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Calc calc = new Calc();
        int c = calc.add(3, 4);
    }
}

Я экспортировал файл jar, содержащий Calc.java to LibraryTest \ libs \ calc.jar

enter image description here

и добавил ссылку на него с помощью кнопки «Добавить JAR ...» в пути компоновки Java LibraryTest

enter image description here Библиотека отображается в ссылочных библиотеках в LibraryTest

enter image description here

LibraryTest не имеет проблем со сборкой, но при ее запуске на эмуляторе в LogCat отображается следующее:

12-27 14:01:33.965: E/dalvikvm(747): Could not find class 'test.libraryCalc.Calc',               referenced from method test.library.LibraryTestActivity.onCreate
12-27 14:01:33.965: W/dalvikvm(747): VFY: unable to resolve new-instance 13   (Ltest/libraryCalc/Calc;) in Ltest/library/LibraryTestActivity;
12-27 14:01:33.995: D/dalvikvm(747): VFY: replacing opcode 0x22 at 0x0008
12-27 14:01:33.995: D/dalvikvm(747): VFY: dead code 0x000a-0013 in Ltest/library/LibraryTestActivity;.onCreate (Landroid/os/Bundle;)V
12-27 14:01:34.065: D/AndroidRuntime(747): Shutting down VM
12-27 14:01:34.065: W/dalvikvm(747): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
12-27 14:01:34.075: E/AndroidRuntime(747): FATAL EXCEPTION: main
12-27 14:01:34.075: E/AndroidRuntime(747): java.lang.NoClassDefFoundError: test.libraryCalc.Calc
12-27 14:01:34.075: E/AndroidRuntime(747):  at     test.library.LibraryTestActivity.onCreate(LibraryTestActivity.java:14)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.os.Handler.dispatchMessage(Handler.java:99)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.os.Looper.loop(Looper.java:123)
12-27 14:01:34.075: E/AndroidRuntime(747):  at android.app.ActivityThread.main(ActivityThread.java:4627)
12-27 14:01:34.075: E/AndroidRuntime(747):  at java.lang.reflect.Method.invokeNative(Native Method)
12-27 14:01:34.075: E/AndroidRuntime(747):  at java.lang.reflect.Method.invoke(Method.java:521)
12-27 14:01:34.075: E/AndroidRuntime(747):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
12-27 14:01:34.075: E/AndroidRuntime(747):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
12-27 14:01:34.075: E/AndroidRuntime(747):  at dalvik.system.NativeStart.main(Native Method)
12-27 14:06:34.170: I/Process(747): Sending signal. PID: 747 SIG: 9

Что нужно сделать, чтобы это заработало?Спасибо за все предложения.

1 Ответ

9 голосов
/ 27 декабря 2011

Я думаю, что проблема в том, что вы пытаетесь добавить банку, которая содержит код Android.Ты не сможешь это сделать.Чтобы включить код Android, вы должны создать библиотеку Android.Просто создайте проект Android и в разделе свойств проекта Android установите, что это проект библиотеки.После этого вы сможете добавить эту библиотеку в свои проекты.Для получения дополнительной информации о библиотеках Android вы можете прочитать здесь .

Обновление : я попробовал ваш код сейчас.Это работает в моем случае.Единственное отличие, которое я сделал, это то, что во время экспорта Jar я проверял Экспорт исходных файлов и ресурсов Java.Надеюсь, что это поможет вам.Попробуй!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...