КлассNotFoundException dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)

Эта ошибка возникла несколько раз в Stackoverflow, я буду ссылаться на другие вопросы в этом вопросе.

Мой проект - приложение для Android, использующее Android Maven Plugin, чтобы включать библиотеки, но также включая некоторые библиотеки локально, поскольку они не предоставляются через maven, Моя IDE - Eclipse. Я использовал этот учебник в основном для его настройки. Я новичок в maven.

Короче говоря, я не могу запустить приложение на своем телефоне. Когда я начинаю его, я получаю вышеуказанную письменную ошибку об активности, которая является моей начальной деятельностью под названием SubscriptionView. Вся трассировка ошибок ниже:

07-17 15:47:42.170: E/AndroidRuntime(20071): FATAL EXCEPTION: main
07-17 15:47:42.170: E/AndroidRuntime(20071): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.dynamixsspbridge/com.example.dynamixsspbridge.SubscriptionView}: java.lang.ClassNotFoundException: com.example.dynamixsspbridge.SubscriptionView
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2034)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.os.Looper.loop(Looper.java:137)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.main(ActivityThread.java:4921)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at java.lang.reflect.Method.invokeNative(Native Method)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at java.lang.reflect.Method.invoke(Method.java:511)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at dalvik.system.NativeStart.main(Native Method)
07-17 15:47:42.170: E/AndroidRuntime(20071): Caused by: java.lang.ClassNotFoundException: com.example.dynamixsspbridge.SubscriptionView
07-17 15:47:42.170: E/AndroidRuntime(20071):    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.Instrumentation.newActivity(Instrumentation.java:1068)
07-17 15:47:42.170: E/AndroidRuntime(20071):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2025)
07-17 15:47:42.170: E/AndroidRuntime(20071):    ... 11 more

Теперь для этого предлагается несколько решений:

Другие идеи, которые не выделялись:

Версия Java: В том, что я чувствую, может быть ответственным за использование Java 1.5. Однако, хотя рекомендуется 1.6, 1.5 должен работать. Переход на 1.6 тоже ничего не меняет.

Библиотеки, входящие в состав Maven, не экспортируются /dexed: Еще одна проблема, которую я вижу, заключается в том, что Maven Dependnecies не отображаются в виде библиотек с расширением в папке bin/dexedLibs. Хотя я считаю, что это будет проблемой в более позднее время, я удалил все классы, которые используют эти библиотеки из проекта, и ошибка остается.

Проблема явно связана с использованием Maven. Если я создаю новый проект, все будет хорошо работать, пока я не конвертирую проект в проект maven и не добавлю библиотеки через pom.xml, даже если у меня нет классов, использующих какие-либо библиотеки.

EDIT Дальнейшее исследование: создав еще один новый проект и обнаружив, что при первом "правильном такте → configure → конвертировать в maven" ничего не импортируется даже после того, как я изменил pom.xml. Затем я отключу maven nature, а затем "convert to maven" . Теперь все библиотеки импортируются и теперь происходит ошибка. Когда я включаю pom.xml в проект, прежде чем преобразовать ту же ошибку.

Как ни странно, если я тогда "right click- > maven- > disable maven nature" и удалю все файлы и файлы maven, проблема остается.

Все это также происходит со свежим образцом проекта (только активность stanard и xml, созданный eclipse) после того, как я конвертирую в maven и maven libs в проект, поэтому он, по-видимому, не связан с моим кодом вообще...

pom.xml выглядит следующим образом

    <project xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>DynamixSSPBridge</groupId>
  <artifactId>DynamixSSPBridge</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>DynamixSSPBridge</name>
  <properties>
        <java-version>1.6</java-version>
  </properties>
  <repositories>
        <repository>
            <id>itm-maven-repository-releases-site</id>
            <url>https://maven.itm.uni-luebeck.de/content/repositories/releases/</url>
        </repository>
    </repositories> 
  <dependencies>
      <dependency>
               <groupId>com.google.android</groupId>
               <artifactId>android</artifactId>
               <version>2.3.3</version>
               <scope>provided</scope> 
        </dependency>
        <dependency>
            <groupId>de.uniluebeck.itm</groupId>
            <artifactId>ncoap</artifactId>
        <version>1.0.1</version>
    </dependency> 
 </dependencies>
 <build>
  <finalName>${project.artifactId}</finalName>
  <sourceDirectory>src</sourceDirectory>
  <pluginManagement>
   <plugins>
    <plugin>
     <groupId>com.jayway.maven.plugins.android.generation2</groupId>
     <artifactId>android-maven-plugin</artifactId>
     <version>3.1.1</version>
     <extensions>true</extensions>
    </plugin>
   </plugins>
  </pluginManagement>
  <plugins>
   <plugin>
    <groupId>com.jayway.maven.plugins.android.generation2</groupId>
    <artifactId>android-maven-plugin</artifactId>
    <configuration>
     <sdk>
      <platform>9</platform>
     </sdk>
    </configuration>
   </plugin>
  </plugins>
 </build>
</project>
Еще одна идея заключалась в том, чтобы создать проект maven с определенным архетипом Android как описанный здесь. Однако это не работает, поскольку я всегда получаю ошибку "Невозможно создать проект из архетипа" (см. Рисунок). Создание проекта non android maven - еще одна неудачная попытка, поскольку он не является проектом андроида, он не разрешает ссылки R.x и не использует библиотеки dex...

Error message in eclipse

Любые идеи?

Ответ 1

У меня была такая же проблема. Я бы порекомендовал вам зависеть только от команд maven и не использовать IDE для чего-либо (кроме де-бинга), потому что maven-android-plugin компилирует материал по-своему.

Установка локальных файлов jar

Вы можете установить файлы локальных библиотек локальных библиотек (которые недоступны в режиме онлайн для Maven) в локальный репозиторий:

Например, здесь мы скопируем android.jar of 4.03, который недоступен в режиме онлайн, в локальный репозиторий на нашей машине:

mvn install:install-file \
 -Dfile=$ANDROID_HOME/platforms/android-15/android.jar \
 -DgroupId=com.google.android \
 -DartifactId=android \
 -Dversion=4.0.3 \
 -Dpackaging=jar \
 -DgeneratePom=true

Теперь мы можем включить его в POM:

  <dependency>
        <groupId>com.google.android</groupId>
        <artifactId>android</artifactId>
        <version>${platform.version}</version>
        <scope>provided</scope>
  </dependency>

Maven будет искать в локальном репозитории и использовать эти файлы jar.

Установка правильной области

Проблема не включенных классов (в моем случае) была вызвана неправильными <scope> зависимостями в POM. Итак, для всех зависимостей библиотек установите <scope> в compile.

Попробуйте запустить mvn clean, mvn install и mvn:android deploy.

Ваш проект Maven хорош только тогда, когда вы можете запустить его из командной строки mvn без какой-либо IDE или около того.