Android 中build.gradle文件是两个

  • app/build.gradle
  • project/build.gradle

app/build.gradle

app/build.gradle
* 上图① ② ③ ④ ⑤分别为:项目类型(应用或者是一个libary)、Android编译版本、manifest上的基本配置、创建类型、外部依赖
详细介绍:
apply plugin: 'com.android.application'// 声明是Android程序android {    //版本配置    compileSdkVersion 26//是你SDK的版本号。    buildToolsVersion "26.0.2"//是你构建工具的版本,其中包括了打包工具aapt、dx等等    defaultConfig {        //应用的包名在安卓设备和商店中是作为应用的唯一标识,所以,一旦发布了应用程序,就不应该再修改,否则将被视为完全不同的应用        applicationId "com.suchengkeji.andeoid.gradlerdemo"        //SDK配置        minSdkVersion 21//app运行所需的最低sdk版本.低于minSdkVersion的手机将无法安装        targetSdkVersion 26 //应用的兼容模式        versionCode 1//整数值,代表应用程序代码的相对版本,也就是版本更新过多少次。        versionName "1.0"//字符串值,代表应用程序的版本信息,需要显示给用户。        // dex突破65535的限制        multiDexEnabled true//下面有介绍    }    buildTypes {        release {            // 是否进行混淆(设置是否使用优化打包)            minifyEnabled false            //设置为true后,生成的APK会去掉未使用的资源,减少APK的体积             shrinkResources true             //是否启动zipAlign优化             zipAlignEnabled false            // 混淆文件的位置(设置proguard文件(用于混淆代码))            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    // 编译libs目录下的所有jar包    compile fileTree(dir: 'libs', include: ['*.jar'])    //编译所添加的外部依赖库    compile 'com.android.support:appcompat-v7:26.0.0-alpha1'    compile 'com.android.support.constraint:constraint-layout:1.0.2'    // 编译libray模块    compile project(':libray')    // 编译extras目录下的librayTwo模块(如果模块在某(extras)目录下)    compile project(':extras:librayTwo')}

要点:

  • Android程序声明处:apply plugin: 'com.android.application'是最新的写法,以前的写法是apply plugin: 'android'
  • compileSdkVersion:是你SDK的版本号。告诉Gradle用哪个AndroidSDK版本编译你的应用。使用任何新添加的 API 就需要使用对应版本的 Android SDK。
    • 修改 compileSdkVersio不会改变运行时的行为。当你修改了compileSdkVersion的时候,可能会出现新的编译警告、编译错误,但新的compileSdkVersion不会被包含到APK 中:它纯粹只是在编译的时候使用。
  • buildToolsVersion:是你构建工具的版本,其中包括了打包工具aapt、dx等等。这个需要你本地安装该版本才行,很多人导入新的第三方库,失败的原因之一是buildversion的版本不对,这个可以手动更改成你本地已有的版本或者打开SDKManager去下载对应版本
  • minSdkVersion:应用可以运行的最低要求,低于minSdkVersion的手机将无法安装。在开发时minSdkVersion也起到一个重要角色:lint 默认会在项目中运行,它在你使用了高于 minSdkVersion的API 时会警告你,帮你避免调用不存在的 API 的运行时问题(比如 minSdkVersion9但你使用了 sdkVersion 10 才有的API就会警告 )。
    • 如果只在较高版本的系统上才使用某些API,通常使用运行时检查系统版本的方式解决。 比如这样
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {    //......}if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT&&Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {    //.......}
  • applicationId:应用的包名在安卓设备和商店中是作为应用的唯一标识,所以,一旦发布了应用程序,就不应该再修改applicationId,否则将被视为完全不同的应用
    • application ID以前直接绑定到包名称; 因此一些Android API在其方法名称和参数名称中使用术语“包名称”,但这实际上是application ID。 例如,Context.getPackageName()方法返回application ID。 没有必要在app代码之外分享代码的真实包名。
    • 如果您正在使用WebView,请考虑在application ID中使用您的程序包名称作为前缀; 否则您可能会遇到问题applicationIdSuffix breaks some WebView use cases in apps的问题。
      *targetSdkVersion:是Android提供向前兼容的主要依据,在应用的targetSdkVersion没有更新之前系统不会应用最新的行为变化。
    • 随着 Android 系统的升级,某个系统的API或者模块的行为可能会发生改变,但是为了保证老 APK 的行为还是和以前兼容。只要APK的targetSdkVersion不变,即使这个APK安装在新Android系统上,其行为还是保持老的系统上的行为,这样就保证了系统对老应用的前向兼容性。
      *versionCode:整数值,代表应用程序代码的相对版本,也就是版本更新过多少次
    • 整数值有利于其它程序比较,检查是升级还是降级。你可以把这个值设定为任何想设的值,但是,你必须保证后续更新版的值要比这个大。系统不会强制要求这一行为,但是随着版本更新值也增加是正常的行为。
    • 一般来说,你发布的第一版程序的versionCode设定为1,然后每次发布都会相应增加,不管发布的内容是较大还是较小的。这意味着android:versionCode不像应用程序的发布版本(android:versionName)那样显示给用户。应用程序和发布的服务不应该显示这个版本值给用户。
  • versionName:字符串值,代表应用程序的版本信息,需要显示给用户。
    • 与android:versionCode一样,系统不会为了任何内部的目的使用这个值,除了显示给用户外。发布的服务也需要提取这个值来显示给用户。

buildTypes:构建类型,一般可以分为debug(主要用于开发阶段)和release(生产发布阶段)

        buildTypes {        release {            //是否进行混淆(设置是否使用优化打包)             minifyEnabled  false            //设置为true后,生成的APK会去掉未使用的资源,减少APK的体积             shrinkResources true             //是否启动zipAlign优化             zipAlignEnabled  false            // 混淆文件的位置(设置proguard文件(用于混淆代码))            proguardFilesgetDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'        }        debug {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }
  • zipAlignEnabled:AndroidSDK中包含一个“zipalign”的工具,它能够对打包的应用程序进行优化。在你的应用程序上运行zipalign,使得在运行时Android与应用程序间的交互更加有效率。因此,这种方式能够让应用程序和整个系统运行得更快。

配置多渠道打包(风格定制 )

android{    //配置多渠道打包(项目风格)    productFlavors {        huawei {            applicationId "com.suchengkeji.andeoid.gradlerdemo.huawei"        }        wandoujia {            applicationId "com.suchengkeji.andeoid.gradlerdemo.wandoujia"        }    }}

配置打包签名设置

 android{    signingConfigs {//签名的配置        debug {            storeFile file('H:\\configTest.jks')//签名文件路径            storePassword "123456"//签名密钥密码            keyAlias "configTest"//.jks文件别名            keyPassword "123456"  //签名公钥密码        }        release {            storeFile file('H:\\configTest.jks')//签名文件路径            storePassword "123456"            keyAlias "configTest"            keyPassword "123456"  //签名密码        }    }}
  • 配置完成打包签名设置后再buildTypes{}中的release{}中天机打包命令行(可选设置)设置后可以通过命令打包
    • gradlew assembleRelease:这个是打包所有渠道(风格)release版本
    • gradlew assembleBaiduRelease:只要打某个渠道的

    打包后的apk文件在app–>build–>outputs—>apk中

    使用gradlew时可能出现没有找到该命令,需要chmod 755 gradlew

打包命令行

project/build.gradle(根目录下的build.gradle)

  • 用于添加子工程或模块共用的配置项。
  • buildscript:配置此项目的构建脚本类路径。
  • repositories:配置该项目的存储库。
    • 支持java 依赖库管理(maven/ivy),用于项目的依赖。
    • 如果需要的话,从https://jcenter.bintray.com/下载code reposities。
  • dependencies:配置此项目的依赖关系。
    • 依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件
    • 定义classpath,gradle会从“repositories”中下载对应版本的Gradle。如果使用gradle wrapper的话,感觉这个配置会被忽略。Wrapper会自己去下载所使用的gradle版本。
    • **不要把你的应用程序依赖这里;他们属于个别模块build.gradle文件
  • allprojects:该配置会被应用到所有的子工程。
// 运行gradle clean时,执行此处定义的task。// 该任务继承自Delete,删除根目录中的build目录。// 相当于执行Delete.delete(rootProject.buildDir)。// gradle使用groovy语言,调用method时可以不用加()。task clean(type: Delete) {    delete rootProject.buildDir}

提下根目录下还有一个setting.gradle:

  • 作用就是导入子工程。它支持导入多个子工程,使整个工程支持multi-project的编译。
  • 调用include函数,将子工程app(目录名为app)导入进来。
    include ':app'(有多个时用逗号分开)

dex突破65535的限制

  • 首先是在defaultConfig节点使能多DEX功能


    dex.png
  • 然后就是在dependencies{}中引入multidex库文件
dependencies {    compile 'com.android.support:multidex:1.0.0'}
  • 最后就是你的AppApplication继承一下MultiDexApplication即可。

更多相关文章

  1. Android(安卓)studio 打包aar
  2. 签名keystore一系列
  3. tiny210 android 移植过程中的几个问题
  4. Android(安卓)APP更新_后台下载、自动安装
  5. android ListView增加Animation效果
  6. Android(安卓)sdk version and API level
  7. Android将String保存为SD卡中TXT文件的方法
  8. Android中全局搜索(QuickSearchBox)详解
  9. Ubuntu 14.04 下 android studio 安装 和 配置

随机推荐

  1. Android(安卓)平台的檔案讀寫方式
  2. 基于Platinum库的DMS实现(android)
  3. android animation 简单介绍
  4. Android(安卓)AIDL示例
  5. [ IOS-Cocos2d-x (Box2d)游戏开发之四] -C
  6. android handler介绍
  7. Android(安卓)Launcher2源码分析主布局文
  8. Android(安卓)获取cpu序列号
  9. ubuntu下载android源代码
  10. APK 的自我保护