将公共项目属性移动到Android Studio中的全局Gradle项目

时间:2014-04-10 15:30:27

标签: android

我已将ADT android项目移至Android Studio。现在我有一个包含2个模块的项目。每个模块都有一个build.gradle文件,它定义了

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'

    lintOptions {
        checkReleaseBuilds false
    }
}

我想将此部分移动到我的项目的build.gralde文件中,以便它看起来像这样:

apply plugin: 'android'


// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'

    lintOptions {
        checkReleaseBuilds false
    }
}

allprojects {
    repositories {
        mavenCentral()
    }
}

但是,如果我从模块gradle文件中删除compileSdkVersion,我会得到gradle编译错误,该属性缺失。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我想你想搬家

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'

    lintOptions {
        checkReleaseBuilds false
    }
}

以下是我如何设置https://github.com/pieces029/test-project

的示例

答案 1 :(得分:0)

经过一些研究和相当多的试验和错误后,我在Android项目结构中完成了以下操作,以便在我的所有项目中定义和共享Android构建配置。

我的根项目是一个典型的Android应用程序,包含多项活动。它有一个子项Android项目,使用几乎相同的Android构建配置。我的项目使用以下目录结构:

root - builds an APK
  |
  +-- child - builds another APK

在root / build.gradle中,我定义了以下内容来配置我的共享Android构建配置。它使用之前在build.gradle中定义的ext属性。 ext块也包括在下面。关键是将apply plugin: 'com.android.application'放在allprojects{}的顶部或附近。

ext {
    androidBuildToolsVersion = '21.1.1'
    androidCompileSdkVersion = 21
    androidMinSdkVersion = 17
    androidTargetSdkVersion = 21
    languageLevel = JavaVersion.VERSION_1_7
}

allprojects {
    // Build time plugins go here
    apply plugin: 'com.android.application'

    // Android build tools version
    android.buildToolsVersion androidBuildToolsVersion
    // Android compilation target
    android.compileSdkVersion androidCompileSdkVersion

    // Configure AndroidManifest.xml
    android.defaultConfig {
        applicationId "com.root"
        minSdkVersion androidMinSdkVersion
        targetSdkVersion androidTargetSdkVersion
        versionCode 1
        versionName '1.0'
    }

    // Rename the APK's using this format: <project name>-<DEBUG|RELEASE>-<version>.apk
    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def oldFile = output.outputFile
            if(oldFile != null && oldFile.name.endsWith('.apk')) {
                def newFilename = "${project.name}-${variant.buildType.name.toUpperCase()}-${getAppVersionName()}"
                newFilename += ".apk"
                output.outputFile = new File(oldFile.parentFile, newFilename)
            }
        }
    }

    // Set the Android lint options
    android.lintOptions {
        // Abort the build if a lint error occurs
        abortOnError true
        // Disable warning for old gradle dependencies
        disable 'GradleDependency'
        // Disable the invalid package rule caused by ORMLite
        disable 'InvalidPackage'
        // Disable Typography warnings
        disable 'TypographyDashes'
        disable 'TypographyFractions'
        // Disable LabelFor EditText warnings
        disable 'LabelFor'
        // Disable IconLauncherShape
        disable 'IconLauncherShape'
        // Disable warning for missing icon density folder (xxxhdpi)
        disable 'IconMissingDensityFolder'
    }

    // Set the Java language level
    android.compileOptions {
        sourceCompatibility languageLevel
        targetCompatibility languageLevel
    }

    // Exclude the potential duplicate files contained inside open source libraries
    android.packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
    }

    // APK signing configuration
    android.signingConfigs {
        MobileApp {
            storeFile file("StoreFile.jks")
            storePassword "********"
            keyAlias "MobileAppKey"
            keyPassword "********"
        }
    }

    // Build types
    android.buildTypes {
        debug {
            signingConfig android.signingConfigs.MobileApp
        }
        release {
            signingConfig android.signingConfigs.MobileApp
        }
    }
}

root / settings.gradle包含它来构建子项目:

include ':ChildProject'

在我的根项目中使用上面的内容允许我的子项目中的build.gradle就像这样简单。子项目中未定义的任何内容都将从根项目中获取。

android {
    defaultConfig {
        applicationId "com.child"
    }
}