Gradle

    xiaoxiao2021-03-25  158

    为什么要用Gradle?

    Gradle是比较先进的构建系统,也是一个很好的构建工具,允许通过插件自定义构建逻辑。 以下是为什么Android Studio选择Gradle的主要原因: 1.使用领域专用语言(Domain Specific Language)来描述和处理构建逻辑。(以下简称DSL) 2.基于Groovy。DSL可以混合各种声明元素,用代码操控这些DSL元素达到逻辑自定义。 3.支持已有的Maven或者Ivy仓库基础建设 4.非常灵活,允许使用best practices,并不强制让你遵照它的原则来。 5.其它插件时可以暴露自己的DSL和API来让Gradle构建文件使用。 6.允许IDE集成,是很好的API工具  

    基础配置

    Android Studio中有一个顶级的build.gradle文件,每一个module还有一个自己的build.gradle。这个文件是使用Groovy语法和Android Plugin for Gradle元素的配置文件。通常我们只需要修改module的build文件就可以了。 下面是一个简单的例子 apply plugin:'com.android.application' android{ compileSdkVersion 19 buildToolsVersion"19.0.0" defaultConfig{ applicationId"com.example.my.app" minSdkVersion 8 targetSdkVersion 19 versionCode 1 versionName"1.0" } buildTypes{ release{ minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } } } 第一句apply plugin: ‘com.android.application’说明在这个build文件中使用Android plugin for Gradle,有了这一句后,那些针对Android的元素才有意义。比如android{…}这个就是配置所有针对Android项目build时的选项。 compileSdkVersion:编译时用的sdk版本 buildToolsVersion:build工具的版本 defaultConfig:动态的在build时配置AndroidManifest.xml里的项目,defaultConfig里的配置可以覆盖manifest里的配置。 buildTypes:配置如何构建和打包你的App,默认有debug和release两个类型。 debug类型包含调试时的信息,并且有debug key签名。 release默认是不含签名的。本例中release版本用了ProGuard。 dependencies:配置此模块的依赖。

    依赖:

    dependencies{ // Module dependency compile project(":lib") // Remote binary dependency compile'com.android.support:appcompat-v7:19.0.1' // Local binary dependency compile fileTree(dir:'libs',include:['*.jar']) } 模块依赖: compile project(“:lib”),表明本模块依赖于lib模块,编译的时候系统会把lib模块包含进来 远程的二进制依赖: compile ‘com.android.support:appcompat-v7:19.0.1’ *当本地没有此依赖时会默认从Maven Central Repository下载相应的依赖。从哪里下载可以在顶级的build文件中配置。 *本地二进制依赖:**compile fileTree(dir: ‘libs’,include:[‘.jar’]),把jar包拷贝到/libs文件夹下,compile fileTree(dir: ‘libs’,include:[‘*.jar’])意思是,app/libs下的所有jar包都包含进来 ProGuard ProGuard的作用是在byte级别对你的app进行分析优化,使得你的App变得更小,更快。值得一提的是,当你使用某些开源项目时,他们会提醒你把一些包排除在ProGuard里,防止出错。 android{ ... buildTypes{ release{ minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } } } getDefaultProguardFile(‘proguard-android.txt’)获得默认的ProGuard配置。每个模块也都有模块级别的ProGuard规则,在proguard-rules.pro这个文件里,当然你也可以自己配置ProGuard规则 Applicatuion ID(也就是android包名) Application ID是用来唯一标识要发行的应用的。在build.gradle里设置。 defaultConfig{ applicationId"com.example.my.app" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName"1.0" } //系统允许你对不同的产品类型设定不同的id,比如免费版和高级版。 productFlavors{ pro{ applicationId="com.example.my.pkg.pro" } free{ applicationId="com.example.my.pkg.free" } } buildTypes{ debug{ applicationIdSuffix".debug" } }

    配置签名

    debug版本与release版本的区别在于是否可以在一个安全的设备上debug和APK如何被签名的。在debug版本中,系统会提供一个默认的key来签名和已知的证书来授权App,避免在构建的时候出现密码提示。但是在release版本中,除非你主动提供一个key,不然系统是不会构建此项目的

    Release签名步骤

    创建keystore。keystore是一个包含一系列私钥的二进制文件,这个文件必须妥善保管。 创建一个私钥。一个私钥代表着一个app实体。 在build文件中配置 android{ ... defaultConfig{...} signingConfigs{ release{ storeFile file("myreleasekey.keystore") storePassword"password" keyAlias"MyReleaseKey" keyPassword"password" } } buildTypes{ release{ ... signingConfig signingConfigs.release } } 在Android Studio中启动assembleRelease。app/build/apk/app-release.apk这个文件就是包含你release key的apk了。 注:一般不会直接在build文件中写入密码的,密码信息可以写在环境变量中 storePassword System.getenv("KSTOREPWD") keyPassword System.getenv("KEYPWD") *或者用命令行输入 storePassword System.console().readLine("\nKeystore password: ") keyPassword System.console().readLine("\nKey password: ")
    转载请注明原文地址: https://ju.6miu.com/read-24084.html

    最新回复(0)