首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加Eclipse "Android Library“项目并通过Maven进行构建

添加Eclipse "Android Library“项目并通过Maven进行构建
EN

Stack Overflow用户
提问于 2012-03-30 02:13:58
回答 2查看 5.3K关注 0票数 5

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

代码语言:javascript
复制
<dependency>
    <groupId>cocos2d_android</groupId>
    <artifactId>cocos2d_android</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <scope>provided</scope>
</dependency>

我以为这已经解决了这个问题,但是当我构建的时候,这个库似乎没有被包括在内。我之所以知道这一点,是因为当我启动一个活动SimpleGame,它引用了cocos2d源代码中的一个类时,该活动终止了,并且我在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)主应用程序或库项目的清单或pom.xml中似乎缺少一些东西-需要向Maven发出信号以选择另一个项目的东西-是什么?

我使用的是Maven 3.0.4和3.0.0-alpha-13的插件,是为8级以上构建的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-30 05:37:42

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

从命令行构建项目(即mvn全新安装),maven将在构建的每个单独阶段/目标中输出详细的日志,在dex目标中,您可以看到类似以下内容:

插件信息-android-maven-

:3.1.1:dex (default-dex) @ myproject

C:\maven\repository\cocos2d_android\cocos2d_android\1.0.0-SNAPSHOT\cocos2d_android-1.0.0-SNAPSHOT.apklib,C:\ Files\Android\android-sdk-r16\platform-tools\lib\dx.jar,\myproject\-Xmx1024M\ -jar,INFO:\Program Files\Java\jdk1.6.0_21\jre\bin\java -Xmx1024M,-jar,C:\Program am workspace --dex,INFO C:\Program Files\Java\jdk1.6.0_21\jre\bin\java-Xmx1024M,-jar,INFO:\Program workspace\myproject\target\classesC:\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)主应用程序或库项目的清单或pom.xml中似乎缺少一些东西-需要向Maven发出信号以选择另一个项目-它是什么?

它就是ApkLib,它是Android Library Project (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,他们可能会觉得更舒服。然后,他们可以简单地将其解压到一个目录中,并从那里使用它。

因此,解决方法是:

正确地将您的Android库项目打包到压缩包中,然后将其重命名为

使用mvn install:install-file.将

  1. 安装到something.apklib本地存储库中

  1. 在任何需要依赖库的安卓项目中,只需使用:

cocos2d_android cocos2d_android 1.0.0-快照apklib

在android-maven-plugin网站上查看Samples,看看如何正确使用apklib。

票数 4
EN

Stack Overflow用户

发布于 2012-03-30 03:44:15

作用域不应为provided。提供的方法:

提供了

--这与编译非常相似,但它表明您希望JDK或容器在运行时提供它。它只在编译和测试类路径上可用,并且是不可传递的。

请改用compile

额外提示:由于compile是缺省值,因此可以删除<scope>provided</scope>行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9931039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档