Android支持库与Maven的设置
我对Android很陌生。
我正在为Android应用程序(它在一个现有的多模块项目中)设置一个maven模块,该模块使用Google支持库(v4,v7,v13)。 使用maven工作的最合适的方法是什么?
我希望我的项目能够与Jenkins(Maven)一起构build,所以我不能链接任何IDE特定的项目或任何非Maven依赖的方式。
在jenkins任何组合maven / gradle的选项也是可以接受的。
不幸的是这些库不在中央Maven仓库中。 所以你必须使用maven-android-sdk-deployer( 链接 )将库安装到你的Maven仓库中。 然后将所需的库添加到您的pom.xml文件中,如自述文件中所述。
除了maven-android-sdk-deployer之外 ,如果你总是安装Android SDK,像我这样的Google extras,你可以在你的项目POM文件中定义一个本地仓库,让Maven从这个本地仓库下载依赖项。
这背后的理由是,Google已经在maven资源库兼容的目录布局中释放了额外的插件。 对于我自己的机器来说,就是这样的:
jerry-mac-mini:android jerry$ pwd /Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android jerry-mac-mini:android jerry$ tree m2repository m2repository ├── NOTICE.txt ├── com │ └── android │ └── support │ ├── appcompat-v7 │ │ ├── 18.0.0 │ │ │ ├── appcompat-v7-18.0.0.aar │ │ │ ├── appcompat-v7-18.0.0.aar.md5 │ │ │ ├── appcompat-v7-18.0.0.aar.sha1 │ │ │ ├── appcompat-v7-18.0.0.pom │ │ │ ├── appcompat-v7-18.0.0.pom.md5 │ │ │ └── appcompat-v7-18.0.0.pom.sha1 │ │ ├── 19.0.0 │ │ │ ├── appcompat-v7-19.0.0.aar │ │ │ ├── appcompat-v7-19.0.0.aar.md5 .............
所以,我只需要在POM文件中添加一些额外的行,而“env.ANDROID_HOME”是指向Android SDK安装path的环境variables。
<repositories> <repository> <id>android-support</id> <url>file://${env.ANDROID_HOME}/extras/android/m2repository</url> </repository> </repositories> ...... <dependency> <groupId>com.android.support</groupId> <artifactId>support-v4</artifactId> <version>19.0.1</version> </dependency>
完成这些步骤之后,Maven在我的ADT中启用了Eclipse和控制台,都很高兴地解决了所需的依赖关系,如下所示:
jerry-mac-mini:android-app-project jerry$ mvn dependency:tree [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building android-app-project 0.0.5-SNAPSHOT [INFO] ------------------------------------------------------------------------ Downloading: file:///Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android/m2repository/com/android/support/support-v4/19.0.1/support-v4-19.0.1.pom Downloaded: file:///Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android/m2repository/com/android/support/support-v4/19.0.1/support-v4-19.0.1.pom (403 B at 28.1 KB/sec) Downloading: file:///Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android/m2repository/com/android/support/support-v4/19.0.1/support-v4-19.0.1.jar Downloaded: file:///Users/jerry/adt-bundle-mac-x86_64-20130917/sdk/extras/android/m2repository/com/android/support/support-v4/19.0.1/support-v4-19.0.1.jar (621 KB at 16783.8 KB/sec) [INFO] [INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ android-app-project --- [INFO] team.apollo:android-app-project:apk:0.0.5-SNAPSHOT [INFO] +- com.google.android:android:jar:2.3.3:provided [INFO] | +- org.apache.httpcomponents:httpclient:jar:4.0.1:provided [INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.0.1:provided [INFO] | | \- commons-codec:commons-codec:jar:1.3:provided [INFO] | +- org.khronos:opengl-api:jar:gl1.1-android-2.1_r1:provided [INFO] | +- xerces:xmlParserAPIs:jar:2.6.2:provided [INFO] | \- org.json:json:jar:20080701:provided [INFO] +- com.android.support:support-v4:jar:19.0.1:compile [INFO] +- com.google.code.gson:gson:jar:2.2.2:compile [INFO] +- de.mindpipe.android:android-logging-log4j:jar:1.0.3:compile [INFO] \- log4j:log4j:jar:1.2.16:compile [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 1.339s [INFO] Finished at: Mon Mar 24 14:32:00 CST 2014 [INFO] Final Memory: 10M/325M [INFO] ------------------------------------------------------------------------
我刚刚遇到了同样的问题,最终在公共gitgub存储库中部署。
如果您仍然需要使用它,您可以执行以下任一操作:
将github存储库添加到您的pom.xml中的存储库部分:
<repository> <id>android.support-mvn-repo</id> <url>https://raw.github.com/kmchugh/android.support/mvn-repo</url> <snapshots> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> </snapshots> </repository>
然后你可以添加依赖如下:
<!-- Android Support Libraries --> <dependency> <groupId>uk.co.icatalyst</groupId> <artifactId>android-support-v4</artifactId> <version>18</version> <scope>compile</scope> </dependency>
或者,分叉存储库,然后可以使用自己的URL作为存储库URL。
[编辑]我更新了库,一个替代的依赖将是:
<dependency> <groupId>com.android.support</groupId> <artifactId>support-v4</artifactId> <version>18.0.0</version> <scope>compile</scope> </dependency>
而对于gridlayout:
<dependency> <groupId>com.android.support</groupId> <artifactId>gridlayout-v7</artifactId> <version>18.0.0</version> <scope>compile</scope> </dependency>
我只使用了maven提供的系统范围function
<dependency> <groupId>com.google.android</groupId> <artifactId>support-v4</artifactId> <version>19.0.1</version> <scope>system</scope> <systemPath>${env.ANDROID_HOME}/extras/android/support/v4/android-support-v4.jar</systemPath> </dependency>
我会build议保持Android artefacts作为您的主要MAVEN存储库的一部分。 使用这种方法,你将避免额外的configuration,因此任何mishmashes。 然后,您将可以使用简单的POM文件为您的所有客户端项目。
要做到这一点或执行这样的命令:
mvn install:install-file -DgroupId=com.google.android -Dversion=23.1.1 -Dpackaging=jar -DartifactId=support-v13 -Dfile=support-v13-23.1.1-sources.jar
或将./extras/android/m2repository/com/android/复制到存储库的./rootMavenRepo/com/google/android中。
感谢Google。 你现在可以做到这一点
- 确保存储库部分包含一个maven
allprojects { repositories { jcenter() maven { url "https://maven.google.com" } } }
- 将支持库添加到依赖项部分
dependencies { ... compile "com.android.support:support-core-utils:25.3.1" }