这个还真就是因为国内网路的问题,有时还真就是很难下载下来。
我配置了GRADLE_HOME , path中也有gradle命令行地址,为什么还要下载?
因为ionic gradle编译android时,并没有使用机器全局的gradle,而是使用项目自带的gradle.
用android studio 开发过android的同学都知道,android studio可以选择使用项目自带的gradle(建议),还是本地某个地址下的gradle。
屏幕快照 2017-01-13 下午10.28.07.png
为啥会出现多个gradle这种问题呢?这个gradle自身的特性,每个工程决定自己使用的gradle版本,very nice!完美解决了不同工程使用不同版本的需求,不用担心版本兼容性啦~~~。当然,我怀疑这么设计的原因是gradle 0.X那个的时代,兼容性问题频发。经常升个级就编译不过了。
使用gradle编译的工程根目录下,都有如下结构
project
————gradlew
————gradlew.bat
————gradle
————————wrapper
————————————gradle-wrapper.jar
————————————gradle-wrapper.properties
当然,这个文件夹里并没有gradle的sdk,只是指明了使用使用gradle的版本下载地址。
//gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip
在project下运行./gradlew后
1.检测本地某个地址有没有gradle
2.没有,那就下载吧,从distributionUrl
3.下载完后解压到步骤1中说的那个某个地址。
4.运行喽
上面步骤中的某个地址?where?
//下载到
[zipStoreBase]/[zipStorePath]/[version eg:gradle-2.14.1-all]/[md5sha1]/[fileName eg:gradle-2.14.1-all.zip]
//解压到
[distributionBase]/[distributionPath]/[version eg:gradle-2.14.1-all]/[md5sha1]/[dir]
GRADLE_USER_HOME没有设置的话是用户根目录下的.gradle
知道了这个原理,那就简单了,我们可以用迅雷下载下来,放到相应的地址就可以喽。
- 到你的[zipStoreBase]/[zipStorePath]/[version eg:gradle-2.14.1-all]/文件夹下,可能有多个[md5]
- 检查每一个文件夹,把不完全的删除掉,即里面没有gradle-xxx.zip,gradle-xxx/的。
- 命令行进入你的工程根目录,运行 ionic build android . 到了下载gradle时,取消即可。
- 在gradle文件夹下,可以发现多了一个[md5]文件夹,进入后可以看到gradle-xxx.zip.lck,gradle-xxx.zip.part两个文件,这个文件夹是你刚才运行ionic命令新建的。
- 用迅雷把文件下载下来,地址在gradle-wrapper.properties中distributionUrl。这个还是很快的。
- 将下载的gradle-xxx.zip直接copy到步骤4中的那个文件夹。
- 命令行进入你的工程根目录,运行 ionic build android,可以看到,没有download gradle的步骤了。而步骤4中的[md5]文件夹里,多了一个gradle-xxx文件夹,里面有gradle整个程序。
每次运行 ionic build android ,ionic都会替换gradle-wrapper.properties中的distributionBase地址。
// ionicproject/platforms/android/cordova/lib/builders/GradleBuilder.js
/*jshint -W069 */
var distributionUrl = process.env['CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL'] || 'http\\://services.gradle.org/distributions/gradle-2.14.1-all.zip';
/*jshint +W069 */
var gradleWrapperPropertiesPath = path.join(self.root, 'gradle', 'wrapper', 'gradle-wrapper.properties');
shell.chmod('u+w', gradleWrapperPropertiesPath);
shell.sed('-i', distributionUrlRegex, 'distributionUrl='+distributionUrl, gradleWrapperPropertiesPath);
从代码可以知道,他会用环境变量CORDOVA_ANDROID_GRADLE_DISTRIBUTION_URL的值或者http\://services.gradle.org/distributions/gradle-2.14.1-all.zip来替换gradle-wrapper.properties中的distributionUrl,从而达到影响工程使用的gradle版本的目的。
有些人通过改这个环境变量,或者更粗暴些,直接改上面的http地址为一个本地地址,但是我并不建议修改这里。
修改环境变量,会影响你电脑上所有ionic工程编译android时使用的版本。修改http地址,导致文件修改,一不小心提交了就完蛋了。
网友评论