2013-11-21 43 views
28

我遇到了很大的麻煩,試圖讓我的應用程序項目建立。我主要的應用程序模塊和庫項目模塊如下所示:Android工作室 - 應用程序與圖書館項目未能建立

Project Structure

這是爲每個模塊的gradle.build:

主要應用:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 
apply plugin: 'android' 
repositories { 
    mavenCentral() 
} 
android { 
    compileSdkVersion 19 
    buildToolsVersion '19.0.0' 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 19 
    } 
    buildTypes { 
     release { 
      runProguard true 
      proguardFile getDefaultProguardFile('proguard-android-optimize.txt') 
     } 
    } 
    productFlavors { 
     defaultFlavor { 
      proguardFile 'proguard-rules.txt' 
     } 
    } 
} 
dependencies { 
    compile 'com.android.support:support-v13:19.0.+' 
    compile 'com.google.android.gms:play-services:4.0.+' 
    compile project(':libraries:datetimepicker') 
} 

這一個是爲圖書館項目:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 
apply plugin: 'android-library' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 19 
    buildToolsVersion "19.0.0" 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 19 
    } 
    release { 
     runProguard true 
     proguardFile 'proguard-rules.txt' 
     proguardFile getDefaultProguardFile('proguard-android-ptimize.txt') 
    } 
} 

dependencies { 
    compile 'com.android.support:support-v4:19.0.+' 
} 

最後,這是項目settings.gradle文件。

include ':App', ':libraries:datetimepicker' 

我能夠成功導入從庫包到我的應用程序代碼,並使用它們,但是當我嘗試編譯,我得到以下幾點:

Gradle: Execution failed for task ':App:compileDefaultFlavorDebug'. 
> Compilation failed; see the compiler error output for details. 

E:\blah\blah\MyClass.java 
Gradle: error: cannot find symbol class DatePickerDialog 
Gradle: error: package DatePickerDialog does not exist 
Gradle: error: cannot find symbol class DatePickerDialog 
Gradle: error: cannot find symbol class DatePickerDialog 
Gradle: error: cannot find symbol variable DatePickerDialog 
Gradle: error: method does not override or implement a method from a supertype 

我一直在試圖解決這已經3天了,並已經用盡了幾乎所有我能在這裏找到的類似問題解決方案。我對開發Android非常有信心,對gradle不太自信,並且可能做了一些明顯錯誤的事情。

一些額外的信息:

  • 過Android Studio v0.3.6
  • Android SDK中構建的工具啓示錄19
  • 搖籃1.8版

關於如何解決此問題的任何想法?

回答

65

當Gradle構建庫項目時,即使構建主應用程序的調試類型(這是bug),它也會構建發佈類型。在你的庫項目中,你爲你的發佈構建類型配置了Proguard,而Proguard正在混淆這些符號名稱,使它們對你的應用程序不可見。

既然你控制了庫代碼,最好的辦法就是不要在你的庫構建中運行Proguard,而只是爲你的主應用程序的發佈版本運行它。它會混淆所有代碼,包括依賴關係。

如果您確實想要獨立混淆庫代碼,則需要設置Proguard規則以公開庫的公共符號,即DatePickerDialog

+0

傳說!完美地工作! – Gyroscope

+1

第二段是我的一天。 – sschrass

+0

這麼多,我改變設置minifyEnabled爲假,並建立成功 – weigan

0

只是明確告訴你的庫項目不能被添加/修改部分

android/buildTypes/debug 
庫項目的構建

精縮 gradle這個。gradle這個文件中像這樣(minifyEnabled假是關鍵):

android { 
... 
    buildTypes { 
     debug { 
      debuggable true 
      minifyEnabled false 
     } 
... 
    } 
... 
} 

注:

在這裏,我也指示明確 gradle這個讓我的 '調試' 建立可調試(可調試真)。

相關問題