添加Eclipse“Android Library”项目并通过Maven构建

时间:2012-03-29 18:13:58

标签: android maven cocos2d-android

我正在尝试将cocos2d包含到预先存在的应用中。我已经用Eclipse方式做了一些事情,例如设置“isLibrary”并将库项目添加到Eclipse中的构建路径,并且我的应用程序pom.xml中具有以下依赖项:

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

我认为这会解决这个问题,但是当我构建时,图书馆似乎不会被包含在内。我知道这一点,因为当我启动一个Activity,SimpleGame,引用cocos2d源中的一个类时,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) ...

我正在寻找两件事:

1)一种可靠的方法来查看某个类/ jar /是否已打包到我的apk中,因为在我的应用中达到这一点的步骤现在很长很复杂

2)主应用程序或库项目的Manifest或pom.xml中的某些内容似乎缺失 - 需要向Maven发出信号以获取此其他项目 - 这是什么?

我正在使用该插件的Maven 3.0.4和3.0.0-alpha-13,为8级及以上版本构建。

2 个答案:

答案 0 :(得分: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:\ Progr   am Files \ Android \ android-sdk-r16 \ platform-tools \ lib \ dx.jar, - index, - 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 \ code \ gson \ gson \ 1.7.1 \ gson-1.7.1.jar,...... ...]

Android库项目实际上是作为cocos2d_android-1.0.0-SNAPSHOT.apklib与其他常规jar库存档一起使用。


  

2)主应用程序或库项目的Manifest或pom.xml中的某些内容似乎缺失 - 需要向Maven发出信号以获取此其他项目 - 这是什么?

它是ApkLib,它只是Android库项目的zip存档(src /,res /,AndroidManifest.xml等)。我们通常使用依赖的Android项目创建/实现我们自己的Android库项目作为多模块maven项目,但是,如果您需要参考由其他开发人员编写的Android库项目,则不需要这样做。感谢开发人员,android-maven-plugin已经支持非Maven Android库项目,请查看Compatible with non-Maven Android Library Projects

  

生成的.apklib文件将具有标准Android / Eclipse库项目的布局。这意味着无论您的Maven布局如何,.apklib文件中的布局都将是源代码在“src /”而不是“src / main / java /”中,但在Android / Maven应用程序中使用时仍然可以正确解释项目。这与非Maven开发人员的库项目兼容,这对于发展Android开发人员社区非常重要。

     

使用其他非Maven开发人员库

     

这也意味着我们可以使用任何外部Android库项目zip文件(来自非Maven开发人员)并在其上执行mvn install:install-file ...并开始将其用作依赖项。

     

与非Maven开发者分享您的.apklib

     

要与非Maven开发者共享您的.apklib文件,如果将其重命名为.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>
    
  4. 在android-maven-plugin网站上查看Samples,了解如何正确使用apklib。

答案 1 :(得分:1)

范围不应为provided。提供的意思是:

  

提供 - 这很像编译,但表明你期望JDK   或者在运行时提供它的容器。它只适用于   编译和测试类路径,并且不具有传递性。

改为使用compile

额外提示:由于compile是默认设置,因此您可以删除<scope>provided</scope>行。