2015-10-20 113 views
5

我有一個Android項目,使用本地版本的picasso library,我修改了幾種方法。然而,每當我試圖使用gradle build命令行建立我的項目,我總是得到一個錯誤,畢加索不存在:如何獲得gradle編譯本地版本的畢加索

$ ./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,它未能上運行,尤其是考慮我的compile project(':picasso')指令在我的build.gradle文件的依賴項部分。

這裏是我的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 

請注意,我不相信這與畢加索本身有什麼關係,因爲我看到了同樣的問題也要編譯本地版本android-autofittextview

任何人都可以告訴我如何得到gradle正確編譯和包含我的本地版本的畢加索?


瞎猜,但我不知道這有什麼關係的事實,我的Android庫項目正在建設.aar文件,而不是.jar文件,所以不知何故gradle這個無法識別這些作爲有效的依賴關係?

+0

確保picasso項目中的gradle文件與您的項目具有相同的compileSdkVersion和buildToolsVersion –

+0

@ eric247我只是確保它們匹配,沒有效果。 – esilver

+0

您使用的是Android Studio嗎? –

回答

0

我終於成功地構建了。畢加索有一個項目結構,其中有一個根目錄,然後有許多子目錄,每個子目錄代表不同的項目(畢加索,畢加索樣本,畢加索 - 波蘭)。我將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我的依賴不得不復制到孩子身上。似乎我應該能夠創建一個依賴父項目,理解我的意思是孩子/圖書館。

但最終我能夠使用這種方法來編譯它。