Gradle Maven插件“安装”任务不适用于Android库项目

我想安装Android库项目到本地的Maven仓库。 这里是build.gradle

buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android-library' apply plugin: 'maven' version = "1.0.0-SNAPSHOT" group = "com.example" repositories { mavenCentral() } android { compileSdkVersion 18 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 9 targetSdkVersion 18 } } 

当我运行:

 gradle install -i 

它卡在这里:

 Executing task ':project:installTest' due to: Task has not declared any outputs. Starting process 'command 'd:\android-sdk-windows\platform-tools\adb.exe''. Working directory: D:\Projects\java\....... Command: d:\android-sdk-windows\platform-tools\adb.exe install -r D:\Projects\java\.......\build\apk\project.apk An attempt to initialize for well behaving parent process finished. Successfully started process 'command 'd:\android-sdk-windows\platform-tools\adb.exe'' > Building > :project:installTest 

所以我首先注意到的是,它试图以一些奇怪的原因将它部署在APK设备上。

我做错了什么,或者它只是Android的库插件不兼容的Maven插件?

  • Android Gradle库依赖于使用Nexus的库依赖项
  • Maven:在应用程序中使用Java 8库,使用retrolambda-maven-plugin和DEX-ed使用android-maven-plugin
  • Gradle无法通过公司代理连接到maven repo - 需要通过Sencha / Cordova进行configuration
  • Gradle和Android支持库
  • 如何将Maven添加到现有的IntelliJ Android项目中
  • Gradle构建工具找不到play-services-tasks.aar? 为什么?
  • Android APK签名存在什么样的陷阱?
  • Android APK签名有什么样的秘密?
  • 编辑:请参阅github页面( https://github.com/dcendents/android-maven-gradle-plugin )了解最新的说明,并find正确的版本使用。 原来的说明不适用于最新的gradle版本。

    原帖:

    我已经修改了maven插件与android库项目兼容。 在github上查看项目: https : //github.com/dcendents/android-maven-gradle-plugin

    configuration你的android库项目来使用它:

     buildscript { repositories { mavenCentral() } dependencies { classpath 'com.github.dcendents:android-maven-plugin:1.0' } } apply plugin: 'android-library' apply plugin: 'android-maven' 

    那么你应该可以使用安装任务将aar安装到你的本地maven仓库中。

    希望这有助于,如果你发现插件的问题,请让我知道Github,我会解决它。

    在CyclingSir的答案详细阐述,我build议添加一个单独的“installArchives”任务。 这也应该照顾拿起你的自定义文物(例如来源)。

     apply plugin: 'maven' task installArchives(type: Upload) { description "Installs the artifacts to the local Maven repository." configuration = configurations['archives'] repositories { mavenDeployer { repository url: repositories.mavenLocal().url } } } 

    请注意,使用Gradle Android插件v0.5.5, gradle install仍会尝试在设备上安装某些东西。

    如果您不想使用自定义插件,则有一个更简单的解决scheme。 相反,只需使用其他名称重新创build安装任务即可。 我把它叫做installArchives 。 将下面的代码添加到您的build.gradle

     task installArchives(type: Upload) { description "Installs the artifacts to the local Maven repository." repositories.mavenInstaller { configuration = configurations.default pom.groupId = 'my.group' pom.artifactId = 'my-artifact' pom.version = '1.0.0' } } 

    您现在可以运行gradle installArchives来安装您的aar本地。

    更新2014-11-26

    下面的答案在编写的时候是合理的,当时Android Build Tools的版本是0.5.5。 现在很可能已经过时,可能不再工作了。

    我已经亲自将我的项目转换为使用android-maven-plugin ,如上面的答案中所述,该插件也可以与最新版本的Android构build工具一起使用。

    来自2014年2月的原始答复

    作为AAR发布

    如果您不介意使用旧版本的com.android.tools.build:gradle (即0.5.4),则可以使用此博客文章中描述的方法。 不是根据adt-dev邮件列表中的讨论 ,这在0.5.5中不起作用。

    build.gradle添加到您的build.gradle

     apply plugin: 'maven-publish' // load bundleRelease task // this will not load the task in 0.5.5 android.libraryVariants publishing { publications { maven(MavenPublication) { artifact bundleRelease } } } 

    要发布到您的本地maven回购,请调用此命令:

     gradle publishToMavenLocal 

    作为JAR发布

    如果您的Android库没有自定义资源并且可以作为JAR发布,那么您可以使用下面的build.gradle ,即使在0.5.5下也可以。

     // build JAR file task androidReleaseJar(type: Jar, dependsOn: assembleRelease) { from "$buildDir/classes/release/" } apply plugin: 'maven-publish' publishing { publications { maven(MavenPublication) { artifact androidReleaseJar } } } 

    要发布到您的本地maven回购,请调用此命令:

     gradle publishToMavenLocal 

    我刚刚通过定义一个上传档案来解决这个问题: Gradle documentation 52.6.2。 部署到Maven仓库

     uploadArchives { repositories { mavenDeployer { repository(url: "file://${System.env.HOME}/.m2/repository/") } } } 

    调用

     gradle uploadArchives 

    部署人工制品(在我本地)Maven回购。 我没有find一个简单和更灵活的方式来指定本地回购的URL与例如mavenLocal()但上述适合我的需要。