久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

為什么同一個(gè)版本的gradle會(huì)有多個(gè)副本

Why there are multiple copies for the same version of gradle(為什么同一個(gè)版本的gradle會(huì)有多個(gè)副本)
本文介紹了為什么同一個(gè)版本的gradle會(huì)有多個(gè)副本的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我有一個(gè)android studio項(xiàng)目,文件gradle/wrapper/gradle-wrapper.properties配置如下.

I have an android studio project, with the file gradle/wrapper/gradle-wrapper.properties configured as following.

#Wed Apr 10 15:27:10 PDT 2013
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-2.2.1-all.zip

我的主目錄中安裝了 2.2.1-all 版本.

And I have the 2.2.1-all version installed in my home directory.

.gradle/wrapper/dists/gradle-2.2.1-all/c64ydeuardnfqctvr1gm30w53/gradle-2.2.1-all.zip

當(dāng)我調(diào)用 ./gradlew 命令來構(gòu)建項(xiàng)目時(shí).我應(yīng)該使用 gradle-2.2.1-all.zip 來構(gòu)建.

When I invoke ./gradlew command to build the project. I should use the gradle-2.2.1-all.zip to build.

但它不會(huì),即使是相同版本,它也會(huì)下載另一個(gè) gradle.因此,版本 2.2.1-all 有兩個(gè) gradle.因?yàn)槲业木W(wǎng)絡(luò)連接很慢,所以需要很長時(shí)間.

But it doesn't, it will download another gradle even for the same version instead. So, there are two gradles for the version 2.2.1-all. Because my internet connection is very slow, it takes too long.

.gradle/wrapper/dists/gradle-2.2.1-all/c64ydeuardnfqctvr1gm30w53/gradle-2.2.1-all.zip
.gradle/wrapper/dists/gradle-2.2.1-all/6dibv5rcnnqlfbq9klf8imrndn/gradle-2.2.1-all.zip

這很煩人,因?yàn)槊看挝艺{(diào)用命令來構(gòu)建我的項(xiàng)目時(shí),它都必須為同一版本下載一個(gè)新版本.

It's very annoying since it has to download a new one for the same version very time I invoke the command to build my project.

為什么 gradle 構(gòu)建系統(tǒng)無法選擇已安裝的系統(tǒng)?

Why the gradle build system couldn't pick the installed one?

推薦答案

出現(xiàn)問題是因?yàn)閟??tudio的gradle-wrapper.jar和最新的下載url的hash策略不同gradle-wrapper.jar.

The problem occurred is because the hash policy for the download url is different between studio's gradle-wrapper.jar and latest gradle-wrapper.jar.

我的 Android 應(yīng)用目錄下的 gradle-wrapper.jar(我猜它是從 android-sdk-macosx/tools/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jar)使用下面的方法計(jì)算下載url的hash.

The gradle-wrapper.jar under my Android app directory (I guess it's copied from android-sdk-macosx/tools/templates/gradle/wrapper/gradle/wrapper/gradle-wrapper.jar) use the following method to calculate hash for the download url.

// PathAssembler.java
private String getMd5Hash(String string) {
    try {
        MessageDigest e = MessageDigest.getInstance("MD5");
        byte[] bytes = string.getBytes();
        e.update(bytes);
        return (new BigInteger(1, e.digest())).toString(32);
    } catch (Exception var4) {
        throw new RuntimeException("Could not hash input string.", var4);
    }
}

但是最新的gradle-wrapper.jar使用下面的方法來做.基數(shù)從 32 變?yōu)?36.

But the latest gradle-wrapper.jar use the following method to do. The radix change from 32 to 36.

private String getHash(String string) {
    try {
        MessageDigest messageDigest = MessageDigest.getInstance("MD5");
        byte[] bytes = string.getBytes();
        messageDigest.update(bytes);
        return new BigInteger(1, messageDigest.digest()).toString(36);
    } catch (Exception e) {
        throw new RuntimeException("Could not hash input string.", e);
    }
}

我在目錄名中找到的魔法字符串是下載url的md5哈希字符串.

The magic string I found in the directory name is the md5 hash string of the download url.

對(duì)于2.10版本,有目錄名

For version 2.10, there is a directory name

.gradle/wrapper/dists/gradle-2.10-all/a4w5fzrkeut1ox71xslb49gst

并且 a4w5fzrkeut1ox71xslb49gst 是從下載 url 散列的.

And the a4w5fzrkeut1ox71xslb49gst is hashed from the download url.

try {
    MessageDigest messageDigest = MessageDigest.getInstance("MD5");
    messageDigest.update("https://services.gradle.org/distributions/gradle-2.10-all.zip".getBytes());
    System.out.println(new BigInteger(1, messageDigest.digest()).toString(36));
} catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

通過對(duì)來自 gradle/wrapper/gradle-wrapper.properties 的相同下載 url 使用相同的哈希方法(使用相同的 gradle-wrapper.jar),有同一版本的 gradle 不會(huì)被多次下載.

By using the same hash method (use the same gradle-wrapper.jar) for the same download url from gradle/wrapper/gradle-wrapper.properties, there won't be multiple downloads for the same version of gradle.

這個(gè)問題只存在于android studio項(xiàng)目和其他gradle項(xiàng)目之間.

This issue only exist between android studio project and other gradle project.

這篇關(guān)于為什么同一個(gè)版本的gradle會(huì)有多個(gè)副本的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

IncompatibleClassChangeError after updating to Android Build Tools 25.1.6 GCM / FCM(更新到 Android Build Tools 25.1.6 GCM/FCM 后出現(xiàn) IncompatibleClassChangeError)
How to get current flavor in gradle(如何在 gradle 中獲取當(dāng)前風(fēng)味)
How to fix quot;unexpected element lt;queriesgt; found in lt;manifestgt;quot; error?(如何修復(fù)“意外元素lt;查詢gt;在“清單中找到錯(cuò)誤?)
Multi flavor app based on multi flavor library in Android Gradle(基于 Android Gradle 中多風(fēng)味庫的多風(fēng)味應(yīng)用)
Android dependency has different version for the compile and runtime(Android 依賴在編譯和運(yùn)行時(shí)有不同的版本)
Transitive dependencies for local aar library(本地 aar 庫的傳遞依賴)
主站蜘蛛池模板: 午夜在线影院 | av中文字幕网站 | 亚洲欧美日韩高清 | 国产目拍亚洲精品99久久精品 | 国产精品久久久久久久久免费桃花 | 一区二区三区中文字幕 | 成人性视频免费网站 | 久久久精品视频免费 | av日韩在线播放 | av入口| 人妖一区 | 97中文视频| 一本一道久久a久久精品蜜桃 | 中文字幕日本一区二区 | 久久999 | 欧美精品一区二区三区在线 | 国产一区二区精品自拍 | 91精品国产乱码久久久 | 久久伊人一区二区 | www.久久久 | 国产黄色av网站 | 亚洲精品1 | 欧美一区二区大片 | 超碰在线播 | 一区二区三区四区视频 | 99在线免费观看视频 | 91成人小视频 | 亚洲精品日韩一区二区电影 | 亚洲最新网址 | 中文字幕在线观看视频网站 | 欧美在线观看免费观看视频 | 精品一区二区电影 | www国产成人免费观看视频,深夜成人网 | 六月成人网 | 亚洲一区二区在线 | 久久久成人免费一区二区 | 毛片久久久| 亚洲成av人片在线观看无码 | 超碰美女在线 | 欧美精品一区二区三区四区 在线 | 天天躁日日躁狠狠很躁 |