用Gradle 构建你的android程序
来源:互联网 发布:js 新窗口打开链接 编辑:程序博客网 时间:2024/05/24 00:20
android gradle 的插件终于把混淆代码的task集成进去了,加上最近,android studio 用的是gradle 来构建项目, 下定决心把android gralde 构建项目的用户指南全部看完, 让不会用gradle 的人也用gradle构建android项目,让打包(注意,打包和构建是两码事)多版本android不再痛苦。最后,题外话:珍惜生命,远离ant....
Gradle build android 历史
Domain Specific Language (DSL) to describe and manipulate the build logic
Build files are Groovy based and allow mixing of declarative elements through the DSL and using code to manipulate the DSL elements to provide custom logic.
Built-in dependency management through Maven and/or Ivy.
Very flexible. Allows using best practices but doesn’t force its own way of doing things.
Plugins can expose their own DSL and their own API for build files to use.
Good Tooling API allowing IDE integration
Gradle 基本概念
build.gradle1234567891011121314151617
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4' } } apply plugin: 'android' android { compileSdkVersion 17 }
构建一个Gradle android项目
利用adt 22导出 build.gradle.
复制别人写好的build.gradle 文件.
根据gradle 规则,手写android 的build.gradle 文件。
123456789101112131415161718192021222324252627282930313233343536373839
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.4' }}apply plugin: 'android'dependencies {}android { compileSdkVersion 17 buildToolsVersion "17" defaultConfig { minSdkVersion 8 targetSdkVersion 17 } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } instrumentTest.setRoot('tests') }}
Gralde 打包参数详解
build.gradle123456789101112131415
signingConfigs { myConfig{ storeFile file("gradle.keystore") storePassword "gradle" keyAlias "gradle" keyPassword "gradle" }} buildTypes{ release { signingConfig signingConfigs.myConfig } }然后,运行
gradle clean
gradle build
,这次在build/apk 你看到了多了一个[项目名]-release-unaligned, 从字面上面我就可以知道,这个只是没有进行zipAlign 优化的版本而已。而[项目名]-release 就是我们签名,并且zipAlign 的apk包了. ###打混淆包### 只需要在原来的基础上加上,完整的proguad.gradle 代码build.gradle12345678
buildTypes{ release { signingConfig signingConfigs.myConfig runProguard true proguardFile 'proguard-android.txt' }}
打多渠道包(Product Flavor)
build.gradle12345678
productFlavors {playstore {packageName='com.youxiachai.androidgradle.playstore'}hiapk {packageName='com.youxiachai.androidgradle.amazonappstore'}}build.gradle
123456789101112131415161718192021
sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] } hiapk { manifest.srcFile 'hiapk/AndroidManifest.xml' } playstore { manifest.srcFile 'hiapk/AndroidManifest.xml' } instrumentTest.setRoot('tests') }然后运行
gradle clean
,gradle build
,省下的时间去喝杯咖啡,睡个觉什么的都好。。。 ###外部依赖### android gradle 对于外部jar 包的应用支持maven/ivy 管理的包,也支持指定具体文件,前面已经在上文说过。上面演示的完整 build.gradle gist 里面也有写。你需要加上如下代码即可:build.gradle123
dependencies {compile files('libs/android-support-v4.jar')}
完整的Gradle Plugin User Guide 其中里面有个错误是
compile files('libs/android-support-v4.jar')
不是compile file('libs/android-support-v4.jar')
教程是基于android gradle0.3 ,在0.4中只是多了混淆打包,这块已经在文中补充了。一个德国人写的Android-Gradle-Examples
dependencies{}
更多的介绍。debug, release,这两种类型的默认配置如下:
Property nameDefault values for debugDefault values for release / otherdebuggabletruefalsejniDebugBuildfalsefalserenderscriptDebugBuildfalsefalserenderscriptOptimLevel33packageNameSuffixnullnullversionNameSuffixnullnullsigningConfigandroid.signingConfigs.debugnullzipAlignfalsetruedefaultConfig {} 配置参数列表
Property NameDefault value in DSL objectDefault valueversionCode-1value from manifest if presentversionNamenullvalue from manifest if presentminSdkVersion-1value from manifest if presenttargetSdkVersion-1value from manifest if presentpackageNamenullvalue from manifest if presenttestPackageNamenullapp package name + “.test”testInstrumentationRunnernullandroid.test.InstrumentationTestRunnersigningConfignullnullrunProguardfalsefalseproguardFile 'proguard-android.txt' or 'proguard-android-optimize.txt' 'proguard-android.txt' or 'proguard-android-optimize.txt'build 结构目录
tree123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
build/├── apk├── assets│ ├── debug│ └── release├── classes│ ├── debug│ │ └── com│ │ └── example│ │ └── gradle│ └── release│ └── com│ └── example│ └── gradle├── dependency-cache│ ├── debug│ └── release├── incremental│ ├── aidl│ │ ├── debug│ │ └── release│ ├── dex│ │ ├── debug│ │ └── release│ ├── mergeAssets│ │ ├── debug│ │ └── release│ └── mergeResources│ ├── debug│ └── release├── libs├── manifests│ ├── debug│ └── release├── res│ ├── all│ │ ├── debug│ │ │ ├── drawable-hdpi│ │ │ ├── drawable-mdpi│ │ │ ├── drawable-xhdpi│ │ │ ├── drawable-xxhdpi│ │ │ ├── layout│ │ │ ├── menu│ │ │ ├── values│ │ │ ├── values-sw720dp-land│ │ │ ├── values-v11│ │ │ └── values-v14│ │ └── release│ │ ├── drawable-hdpi│ │ ├── drawable-mdpi│ │ ├── drawable-xhdpi│ │ ├── drawable-xxhdpi│ │ ├── layout│ │ ├── menu│ │ ├── values│ │ ├── values-sw720dp-land│ │ ├── values-v11│ │ └── values-v14│ └── rs│ ├── debug│ └── release├── source│ ├── aidl│ │ ├── debug│ │ └── release│ ├── buildConfig│ │ ├── debug│ │ │ └── com│ │ │ └── example│ │ │ └── gradle│ │ └── release│ │ └── com│ │ └── example│ │ └── gradle│ ├── r│ │ ├── debug│ │ │ └── com│ │ │ └── example│ │ │ └── gradle│ │ └── release│ │ └── com│ │ └── example│ │ └── gradle│ └── rs│ ├── debug│ └── release└── symbols ├── debug └── release88 directories
最后的吐槽
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- 用Gradle 构建你的android程序
- Maven:坐标
- 用XAMPP搭建Web服务器
- xx is not in the sudoers file 问题的解决
- 如何找出单链表中的倒数第k个元素-----思路分析
- 计算1000以内所有偶数和,用while语句
- 用Gradle 构建你的android程序
- 黑马程序员——java io流概述
- 星号图
- shell变量基础
- BZOJ1001狼抓兔子(平面图最小割)
- Maven:仓库
- 高级扫描技术及原理介绍
- php 获取网页源码(访问并返回网页源码)
- 计算1000以内的偶数和,用do-while循环完成。