如何让gradle编译本地版本的毕加索

时间:2015-10-20 04:52:41

标签: android gradle

我有一个Android项目,它使用我在某些方面修改过picasso library的本地版本。但是,每当我尝试使用gradle build从命令行构建项目时,我总会收到Picasso不存在的错误:

$ ./gradlew build 
:compileLint
:copyDebugLint UP-TO-DATE
:mergeDebugProguardFiles UP-TO-DATE
:preBuild UP-TO-DATE
:preDebugBuild UP-TO-DATE
:checkDebugManifest
:prepareDebugDependencies
:compileDebugAidl UP-TO-DATE
:compileDebugRenderscript UP-TO-DATE
:generateDebugBuildConfig UP-TO-DATE
:generateDebugAssets UP-TO-DATE
:mergeDebugAssets UP-TO-DATE
:generateDebugResValues UP-TO-DATE
:generateDebugResources UP-TO-DATE
:packageDebugResources UP-TO-DATE
:processDebugManifest UP-TO-DATE
:processDebugResources UP-TO-DATE
:generateDebugSources UP-TO-DATE
:processDebugJavaRes UP-TO-DATE
:compileDebugJavaWithJavac
/Users/me/project/src/com/example/myproject/MyView.java:30: error: package com.squareup.picasso does not exist
import com.squareup.picasso.Picasso;

此外,当我使用--info时,我可以看到它正在组装任务,但picasso:checkpicasso:build错误地放在最后:

Tasks to be executed: [task ':compileLint', task ':copyDebugLint', task ':mergeDebugProguardFiles', task ':preBuild', task ':preDebugBuild', task ':checkDebugManifest', task ':prepareDebugDependencies', task ':compileDebugAidl', task ':compileDebugRenderscript', task ':generateDebugBuildConfig', task ':generateDebugAssets', task ':mergeDebugAssets', task ':generateDebugResValues', task ':generateDebugResources', task ':packageDebugResources', task ':processDebugManifest', task ':processDebugResources', task ':generateDebugSources', task ':processDebugJavaRes', task ':compileDebugJavaWithJavac', task ':packageDebugJar', task ':compileDebugNdk', task ':packageDebugJniLibs', task ':packageDebugLocalJar', task ':packageDebugRenderscript', task ':bundleDebug', task ':compileDebugSources', task ':assembleDebug', task ':copyReleaseLint', task ':mergeReleaseProguardFiles', task ':preReleaseBuild', task ':checkReleaseManifest', task ':prepareReleaseDependencies', task ':compileReleaseAidl', task ':compileReleaseRenderscript', task ':generateReleaseBuildConfig', task ':generateReleaseAssets', task ':mergeReleaseAssets', task ':generateReleaseResValues', task ':generateReleaseResources', task ':packageReleaseResources', task ':processReleaseManifest', task ':processReleaseResources', task ':generateReleaseSources', task ':processReleaseJavaRes', task ':compileReleaseJavaWithJavac', task ':packageReleaseJar', task ':compileReleaseNdk', task ':packageReleaseJniLibs', task ':packageReleaseLocalJar', task ':packageReleaseRenderscript', task ':bundleRelease', task ':compileReleaseSources', task ':assembleRelease', task ':assemble', task ':lint', task ':preDebugUnitTestBuild', task ':prepareDebugUnitTestDependencies', task ':processDebugUnitTestJavaRes', task ':compileDebugUnitTestJavaWithJavac', task ':compileDebugUnitTestSources', task ':mockableAndroidJar', task ':assembleDebugUnitTest', task ':testDebugUnitTest', task ':preReleaseUnitTestBuild', task ':prepareReleaseUnitTestDependencies', task ':processReleaseUnitTestJavaRes', task ':compileReleaseUnitTestJavaWithJavac', task ':compileReleaseUnitTestSources', task ':assembleReleaseUnitTest', task ':testReleaseUnitTest', task ':test', task ':check', task ':build', task ':android-autofittextview:assemble', task ':android-autofittextview:check', task ':android-autofittextview:build', task ':picasso:assemble', task ':picasso:check', task ':picasso:build']

我认为:picasso:(assemble|check|build)需要在:compileDebugJavaWithJavac之前运行,但它失败了,特别是在我的build.gradle文件的dependencies部分中给出了compile project(':picasso')指令

这是我的build.gradle文件:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.+'
    }
}

apply plugin: 'android-library'

android {
    compileSdkVersion 19
    buildToolsVersion '23.0.1'

    sourceSets {
      main {
          manifest.srcFile 'AndroidManifest.xml'
          java.srcDirs = ['src']
          resources.srcDirs = ['src']
          aidl.srcDirs = ['src']
          renderscript.srcDirs = ['src']
          res.srcDirs = ['res']
          assets.srcDirs = ['assets']
      }
    }

}

dependencies {
    repositories {
        mavenCentral()
    }

    compile project(':picasso')
    compile project(':android-autofittextview')
    compile 'org.apache.httpcomponents:httpmime:4.2.3'
}

这是我的settings.gradle文件:

include ':myproject'

include ':picasso'
project(':picasso').projectDir = \
  new File(settingsDir, '../../../Lib/picasso')

include ':android-autofittextview'
project(':android-autofittextview').projectDir = \
  new File(settingsDir, '../../../Interface/android-autofittextview')

这是我的gradle版本:

$ gradle --version

------------------------------------------------------------
Gradle 2.7
------------------------------------------------------------

Build time:   2015-09-14 07:26:16 UTC
Build number: none
Revision:     c41505168da69fb0650f4e31c9e01b50ffc97893

Groovy:       2.3.10
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_51 (Oracle Corporation 25.51-b03)
OS:           Mac OS X 10.10.5 x86_64

请注意,我不认为这与picasso本身有任何关系,因为我也在尝试编译本地版本的android-autofittextview时遇到同样的问题。

有谁能告诉我如何正确编译并包含我当地版本的毕加索?

在黑暗中拍摄,但我想知道这是否与我的android-library项目正在构建.aar文件而不是.jar文件这一事实有关,所以某种方式gradle无法识别这些作为有效的依赖项?

1 个答案:

答案 0 :(得分:0)

我终于能够成功构建。 Picasso有一个项目结构,其中有一个根目录,然后是许多子目录,每个子目录代表不同的项目(毕加索,毕加索样本,毕加索 - 波拉索)。我将projectDir设置为根picasso目录而不是实际的库子目录。因此,我改变了我的settings.gradle文件:

project(':picasso').projectDir = \
  new File(settingsDir, '../../../Lib/picasso')

到这个

project(':picasso').projectDir = \
  new File(settingsDir, '../../../Lib/picasso/picasso')

我在其他一个依赖项中做了类似的事情。因此,而不是:

project(':android-autofittextview').projectDir = \
  new File(settingsDir, '../../Interface/android-autofittextview')

我这样做了:

project(':android-autofittextview').projectDir = \
  new File(settingsDir, '../../Interface/android-autofittextview/library')

这很棘手,因为在后一个示例中,库目录中的build.gradle文件依赖于我必须将其复制到子项中的父build.gradle。好像我应该能够创建一个依赖于理解我的意思是子/库的父项目。

但最终我能够使用这种方法进行编译。