I'm making a new Android project, with the standard 'app'
module, as well as a library project (let's call it 'custom_lib'
). In the app
's build.gradle
file, I link the module as such :
dependencies { compile project(':custom_lib') }
When I trigger the build process (Menu Build
> Make Project
), I get the following output in the Gradle console
Executing tasks: [clean, :app:compileDebugSources, :custom_lib:compileDebugSources] Configuration on demand is an incubating feature. :app:clean :custom_lib:clean :app:preBuild :app:preDebugBuild :app:checkDebugManifest :app:preReleaseBuild :custom_lib:compileLint :custom_lib:copyReleaseLint UP-TO-DATE :custom_lib:mergeReleaseProguardFiles UP-TO-DATE :custom_lib:preBuild :custom_lib:preReleaseBuild :custom_lib:checkReleaseManifest :custom_lib:prepareReleaseDependencies :custom_lib:compileReleaseAidl :custom_lib:compileReleaseRenderscript :custom_lib:generateReleaseBuildConfig :custom_lib:generateReleaseAssets UP-TO-DATE :custom_lib:mergeReleaseAssets :custom_lib:generateReleaseResValues UP-TO-DATE :custom_lib:generateReleaseResources :custom_lib:packageReleaseResources :custom_lib:processReleaseManifest :custom_lib:processReleaseResources :custom_lib:generateReleaseSources :custom_lib:compileReleaseJava :custom_lib:processReleaseJavaRes UP-TO-DATE :custom_lib:packageReleaseJar :custom_lib:compileReleaseNdk :custom_lib:packageReleaseJniLibs UP-TO-DATE :custom_lib:packageReleaseLocalJar UP-TO-DATE :custom_lib:packageReleaseRenderscript UP-TO-DATE :custom_lib:bundleRelease :app:prepareComAndroidSupportAppcompatV72102Library :app:prepareComAndroidSupportSupportV42102Library :app:prepareTestDoubleBuildCustom_libUnspecifiedLibrary :app:prepareDebugDependencies :app:compileDebugAidl :app:compileDebugRenderscript :app:generateDebugBuildConfig :app:generateDebugAssets UP-TO-DATE :app:mergeDebugAssets :app:generateDebugResValues UP-TO-DATE :app:generateDebugResources :app:mergeDebugResources :app:processDebugManifest :app:processDebugResources :app:generateDebugSources :app:compileDebugJava :app:compileDebugNdk :app:compileDebugSources :custom_lib:preDebugBuild :custom_lib:checkDebugManifest :custom_lib:prepareDebugDependencies :custom_lib:compileDebugAidl :custom_lib:compileDebugRenderscript :custom_lib:generateDebugBuildConfig :custom_lib:generateDebugAssets UP-TO-DATE :custom_lib:mergeDebugAssets :custom_lib:generateDebugResValues UP-TO-DATE :custom_lib:generateDebugResources :custom_lib:packageDebugResources :custom_lib:processDebugManifest :custom_lib:processDebugResources :custom_lib:generateDebugSources :custom_lib:compileDebugJava :custom_lib:compileDebugNdk :custom_lib:compileDebugSources BUILD SUCCESSFUL Total time: 2.184 secs
What puzzles me is that the build mechanism triggers a Debug build (as the first line says), but almost immediately, Gradle uses the task :app:preReleaseBuild
which make my custom_lib
module to be built with the Release configuration.
And then, after the app is fully built, Gradle compiles my module with the Debug configuration.
So my questions are :
EDIT :
app/build.gradle :
apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { applicationId "com.deezer.testdoublebuild" minSdkVersion 8 targetSdkVersion 21 versionCode 1 versionName "1.0" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { debug{ debuggable true } release { debuggable false minifyEnabled false } } } dependencies { compile project(':custom_lib') }
custom_lib/build.gradle :
apply plugin: 'com.android.library' android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { applicationId "com.deezer.mylibrary" minSdkVersion 8 targetSdkVersion 21 versionCode 1 versionName "1.0" } compileOptions { sourceCompatibility JavaVersion.VERSION_1_7 targetCompatibility JavaVersion.VERSION_1_7 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { }
Note : I'm using Android Studio 1.0 RC 1 / Gradle 2.2, and reproduced this issue by creating a new project from scratch, add an empty Android Library module, and "voila"
If gradle --version works, but all of your builds fail with the same error, it is possible there is a problem with one of your Gradle build configuration scripts. You can verify the problem is with Gradle scripts by running gradle help which executes configuration scripts, but no Gradle tasks.
Android Studio projects contain a top-level project Gradle build file that allows you to add the configuration options common to all application modules in the project. Each application module also has its own build. gradle file for build settings specific to that module.
Put this in your app dependencies:
dependencies { debugCompile project(path: ':custom_lib', configuration: "debug") releaseCompile project(path: ':custom_lib', configuration: "release") }
and in your library's build.gradle add:
android { defaultConfig { defaultPublishConfig 'release' publishNonDefault true } }
Then the library will be built in the same mode as the app. Contrary to previous revisions of this answer, I've confirmed a flavor is not required on the library (this may be due to Gradle or Android plugin versions - I'm using Gradle 2.14 and Android plugin 2.1.0 and did not require it).
Edit: You may have trouble if you don't clean/rebuild after modifying the gradle files, as outlined in this answer here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With