Библиотеки Android в ADT: тип не может быть разрешен ошибка

#android

#Android

Вопрос:

По сути: проект библиотеки объявляет действие, проект реализации использует (подкласс) это действие, а тестовый проект использует реализованную версию. В этом сценарии мы обнаружили, что «Тип не может быть разрешен. На него косвенно ссылаются из файлов required .class «. При изменении на ADT r13 никаких проблем не обнаружено. Код для воспроизведения проблемы: в библиотеке:

 package com.r14.error.lib;
import android.app.Activity;
import android.os.Bundle;

public class R14ErrorLibActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
 

В реализации:

 package com.r14.error.imp;
import com.r14.error.lib.R14ErrorLibActivity;

public class R14ErrorImpActivity extends R14ErrorLibActivity {
}
 

В тесте:

 package com.r14.error.imp.test;    
import com.r14.error.imp.R14ErrorImpActivity;    
import android.test.ActivityUnitTestCase;

public class R14ErrorLibImpActivityTest extends ActivityUnitTestCase<R14ErrorImpActivity> {    
    public R14ErrorLibImpActivityTest() {
        super(R14ErrorImpActivity.class);
    }       
    private static final int ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING = 42;    
    public void testTest() {
        assertEquals(ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING, 42);
    }       
}
 

Ошибка:

 The type com.r14.error.lib.R14ErrorLibActivity cannot be resolved. It is indirectly referenced from required .class files
 

Если библиотека добавлена вручную 1 (действие не требуется в более старых версиях adt), ошибка сборки не отображается, но тест завершается с ошибкой:

 java.lang.RuntimeException: Exception during suite construction
at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:239)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
Caused by: java.lang.reflect.InvocationTargetException
at com.r14.error.imp.test.R14ErrorLibImpActivityTest.<init>(R14ErrorLibImpActivityTest.java:10)
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
at android.test.suitebuilder.TestMethod.instantiateTest(TestMethod.java:87)
at android.test.suitebuilder.TestMethod.createTest(TestMethod.java:73)
at android.test.suitebuilder.TestSuiteBuilder.addTest(TestSuiteBuilder.java:263)
at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:185)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:336)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3982)
at android.app.ActivityThread.access$2900(ActivityThread.java:119)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1901)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4363)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NoClassDefFoundError: com.r14.error.imp.R14ErrorImpActivity
... 19 more
 

Я работаю с Eclipse Indigo и ADT 15.

Спасибо за любую помощь!

Комментарии:

1. kyleclegg.com/eclipse-android-error-type-cannot-be-resolved

2. @Dr.nik: спасибо за подсказку. Если библиотека добавлена вручную (действие не требуется в старых версиях adt), ошибка типа сборки не отображается, но тест завершается неудачей с сообщением, добавленным в post.

Ответ №1:

Это уже проблема (21343) в проекте Android Open Handset Alliance. Если у вас такая же проблема, пожалуйста, отметьте эту проблему. Примечание: Проблема, похоже, исправлена в версии 17 инструментов Android SDK и плагина Eclipse ADT (мои собственные проекты, скомпилированные без взломов или ошибок).).

Ответ №2:

Та же проблема, о которой сообщается здесь:

http://code.google.com/p/android/issues/detail?id=21888

Вы можете попробовать этот хак! (найдено внутри проблемы):

Взломайте eclipse, чтобы заставить это работать, экспортировав библиотечные проекты в основной проект.