5

cocos2d を既存のアプリに含めようとしています。「isLibrary」を設定し、ライブラリ プロジェクトを Eclipse のビルド パスに追加するなど、Eclipse の方法で作業を行いました。アプリの .xml には次の依存関係がありますpom.xml

<dependency>
    <groupId>cocos2d_android</groupId>
    <artifactId>cocos2d_android</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <scope>provided</scope>
</dependency>

これで問題は解決したと思いましたが、ビルドするとライブラリが含まれていないようです。これSimpleGameは、cocos2d ソース内のクラスの 1 つを参照して Activity を開始すると、Activity が終了し、DDMS で次のスタック トレースが取得されるためです。

E/AndroidRuntime(10621): FATAL EXCEPTION: main E/AndroidRuntime(10621): java.lang.NoClassDefFoundError: org.cocos2d.opengl.CCGLSurfaceView E/AndroidRuntime(10621): at com.xyz.game.SimpleGame.onCreate(SimpleGame.java:22) ...

私は2つのことを探しています:

1)特定のクラス/jar/何かがapkにパッケージ化されているかどうかを確認する信頼できる方法。現在、アプリでこのポイントに到達するための手順は長く複雑です

2) メイン アプリまたはライブラリ プロジェクトのいずれかのマニフェストまたは pom.xml 内の何かが欠落しているようです - この他のプロジェクトを選択するように Maven に通知するために必要な何か - それは何ですか?

私は Maven 3.0.4 と 3.0.0-alpha-13 のプラグインを使用しており、レベル 8 以上用にビルドしています。

4

2 に答える 2

4

1)特定のクラス/jar/何かがapkにパッケージ化されているかどうかを確認する信頼できる方法。現在、アプリでこのポイントに到達するための手順は長く複雑です

コマンドラインからプロジェクトをビルドします (つまり、mvn clean install)。maven は、ビルドのすべての単一フェーズ/ゴールで詳細なログを出力します。dex ゴールでは、次のように表示されます。

[INFO] --- android-maven-plugin:3.1.1:dex (default-dex) @ myproject ---
[INFO] C:\Program Files\Java\jdk1.6.0_21\jre\bin\java [- Xmx1024M、-jar、C:\Program Files\Android\android-sdk-r16\platform-tools\lib\dx.jar、--dex、--output=C:\workspace\myproject\target\classes.dex 、C:\workspace\myproject\target\classes、C:\maven\repository\cocos2d_android\cocos2d_android\1.0.0-SNAPSHOT\cocos2d_android-1.0.0-SNAPSHOT.apklib、C:\maven\repository\com\google\コード\gson\gson\1.7.1\gson-1.7.1.jar, ... ...]

Android ライブラリ プロジェクトは、実際には cocos2d_android-1.0.0-SNAPSHOT.apklib として、他の通常の jar ライブラリ アーカイブとともに dex 化されています。


2) メイン アプリまたはライブラリ プロジェクトのいずれかのマニフェストまたは pom.xml 内の何かが欠落しているようです - この他のプロジェクトを選択するように Maven に通知するために必要な何か - それは何ですか?

これは、Android ライブラリ プロジェクト (src/、res/、AndroidManifest.xml など) の単純な zip アーカイブである ApkLib です。通常、依存する Android プロジェクトをマルチモジュール Maven プロジェクトとして独自の Android ライブラリ プロジェクトを作成/実装しますが、他の開発者によって作成された Android ライブラリ プロジェクトを参照する必要がある場合は、これは必要ありません。開発者のおかげで、android-maven-plugin はすでに Maven 以外の Android ライブラリ プロジェクトをサポートしています。Maven 以外の Android ライブラリ プロジェクトとの互換性 を確認してください。

生成された .apklib ファイルには、標準の Android/Eclipse ライブラリ プロジェクトのレイアウトが含まれます。これは、Maven レイアウトに関係なく、.apklib ファイル内のレイアウトは、ソース コードが「src/main/java/」ではなく「src/」にあることを意味しますが、Android/Maven アプリケーションで使用すると正しく解釈されます。事業。これは、Maven 以外の開発者のライブラリ プロジェクトと互換性を持つためのものであり、Android 開発者コミュニティを成長させるために重要です。

他の非 Maven 開発者のライブラリを使用する

また、(Maven 以外の開発者からの) 外部 Android ライブラリ プロジェクトの zip ファイルを取得し、その上で mvn install:install-file ... を実行して、依存関係として使用を開始できることも意味します。

.apklib を Maven 以外の開発者と共有する

.apklib ファイルを Maven 以外の開発者と共有するには、名前を .zip に変更した方が快適に感じるでしょう。その後、単純にディレクトリに解凍して、そこから使用できます。

したがって、回避策は次のとおりです。

  1. Android ライブラリ プロジェクトを適切に zip アーカイブにパックし、名前を something.apklib に変更します。

  2. mvn install:install-file を使用して、something.apklib を Maven ローカル リポジトリにインストールします。

  3. ライブラリの依存関係を必要とする Android プロジェクトでは、以下を使用するだけです。

    <dependency>
      <groupId>cocos2d_android</groupId>
      <artifactId>cocos2d_android</artifactId>
      <version>1.0.0-SNAPSHOT</version>
      <type>apklib</type>
    </dependency>
    

android-maven-plugin ウェブサイトのサンプルをチェックして、apklib を適切に使用する方法を確認してください。

于 2012-03-29T21:37:41.987 に答える
1

スコープは であってはなりませんprovided。提供される手段:

provided - これは compile によく似ていますが、JDK またはコンテナーが実行時にそれを提供することを期待していることを示します。コンパイルおよびテスト クラスパスでのみ使用でき、推移的ではありません。

compile代わりに使用してください。

追加のヒント:compileがデフォルトであるため、行を削除できます<scope>provided</scope>

于 2012-03-29T19:44:14.840 に答える