11

このエラーは Stackoverflow で数回発生しました。この質問の他の質問を参照します。

私のプロジェクトは、 Android Maven プラグインを使用してライブラリを含める Android アプリケーションですが、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

現在、これには複数の解決策が提案されています。

  1. 「ビルド パス」->「ビルド パスの構成...」に移動して、プライベート ライブラリを実際にエクスポートするかどうかを確認します。 2. [注文とエクスポート] タブで、[Android プライベート ライブラリ] オプションをオンにします。働くこと。」そのオプションをチェックしてもらいましたが、とにかくエラーが発生しました。
  2. ProGuard がクラスを取り除かないことを確認してください: 私の知る限り、私は proguard を使用していません。一見すると、ProGuard を積極的に使用する必要がありますが、そこだけではありません... 私はしませんでした。( Androidサイトで「ProGuardの実行は完全にオプションです」と書かれています。)project.propertiesを確認したところ、そこにあるproguard行がコメントアウトされています。
  3. lib外部ライブラリのフォルダーに名前を付けないでくださいlibs。私は地元の図書館のためにそうしました。Maven ライブラリはもちろん、Maven が配置する場所に存在します。潜在的に、これらすべての jar を取得して、maven リポジトリーからlibs... に配置し、maven の使用を停止することができます。これはうまくいくかもしれませんが、解決策を提示することはほとんどありません。
  4. Build Path から Double Libs を削除します。これは、3 で説明した問題とほぼ同じです。ただし、ここでのポイントは、「単一のライブラリの異なるバージョンを使用することはできません」ということです。一部のライブラリは他のライブラリを提供することが知られているため、1 つが私のローカル フォルダーにあり、maven を介して追加されたライブラリの 1 つによって提供される可能性があります。2 つのライブラリをローカルに含めます。1 つは公開されていないため、提供される場合はandroid-support-v4.jar になります。jar を削除し、プロジェクトを消去して再度エクスポートしましたが、変更はありません。
  5. これは実際には Eclipse の問題であるという提案がなされました。おそらく再起動が役立つかもしれないので、そうしました。無駄に。bin削除とgenフォルダーの有無にかかわらず試しました。
  6. スペルミス
  7. m2e プラグインの使用(既に実行中)

うまくいかなかったその他のアイデア:

Java バージョン: Java 1.5 の使用に責任があると思われるものの 1 つ。ただし、1.6 が推奨されますが、1.5 で機能するはずです。1.6に切り替えても何も変わりません。

Maven 経由で含まれるライブラリはエクスポート/dexed されません:もう 1 つの問題は、Maven の依存関係がフォルダーに dexed Libraries として表示されないことbin/dexedLibsです。これは後で問題になると思いますが、これらのライブラリを使用するすべてのクラスをプロジェクトから削除しましたが、エラーは残ります。

この問題は、Maven の使用に何らかの形で関連していることは明らかです。新しいプロジェクトを作成すると、プロジェクトを maven プロジェクトに変換し、ライブラリをpom.xml使用するクラスがない場合でも、.xml を介してライブラリを追加するまで、すべて正常に動作します。

EDITさらなる調査:別の新しいプロジェクトを作成すると、最初の「正しい時計->構成-> mavenに変換」で、変更した後でも何もインポートされないことがわかりましたpom.xml. 次に、「maven の性質を無効にして」から「maven に変換」します。すべてのライブラリがインポートされ、エラーが発生するようになりました。pom.xmlを変換する前にプロジェクトに含めると、同じエラーが発生します。

奇妙なことに、「右クリック-> maven-> mavenの性質を無効にする」とすべてのmavenライブラリとファイルを削除しても、問題は残ります。

これはすべて、mavenに変換した後、新しいサンプルプロジェクト(Eclipseによって作成された標準アクティビティとxmlのみ)でも発生し、mavenライブラリがプロジェクトにあるため、明らかに私のコードにはまったく関係がありません...

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>

もう 1 つのアイデアは、ここで説明されているように、特定の Android アーキタイプを使用して Maven プロジェクトを作成することでした。ただし、「アーキタイプからプロジェクトを作成できません」というエラーが常に発生するため、これは機能していないようです (図を参照)。Android プロジェクトではないため、Rx 参照を解決せず、ライブラリを dex しません...

日食のエラーメッセージ

何か案は?

4

1 に答える 1

0

私は同じ問題を抱えていました。maven-android-plugin独自の方法でコンパイルされるため、maven コマンドのみに依存し、(デバッグを除く) 何にも IDE を使用しないことをお勧めします。

ローカル jar ファイルのインストール

ローカル ライブラリの jar ファイル (Maven ではオンラインで利用できない) をローカル リポジトリにインストールできます。

たとえば、ここでは、オンラインで利用できないファイルをマシンのローカル リポジトリにコピーandroid.jar4.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 cleanmvn install、および を実行してみてくださいmvn:android deploy

Maven プロジェクトはmvn、IDE などを使用せずにコマンド ラインから実行できる場合にのみ有効です。

于 2013-07-21T05:43:38.060 に答える