重拾Android - Gradle

为了学业以及毕设内容,重新捡起了Android开发。

安装AndroidStudio与SDKTools倒是没啥问题,只要网络顺畅一切ok。

但最麻烦的问题来了,就是每次都会遇上的Gradle Sync问题,迫不得已学了一遍Gradle(虽然说之前搞的时候也没正儿八经学过)。

Gradle是基于Apache Ant(2000年)、Apache Maven(2004年)产生的一款高效易用的项目管理工具,弥补了Ant和Maven的不足。其使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置(但个人感觉过于简化了反而有些地方理不清楚),以面向Java为主,还支持Kotlin、Scala、Groovy、C/C++、JavaScript语言。

Gradle文件分析

这里通过IDEA构建一个Gradle+Java结构的项目来分析

Preference- Build,Execution,Deployment - Gradle可以查看项目的Gradle配置

项目结构中的build.gradle文件就是项目中的gradle配置文件,可能会有些出入,但大致结构是一样的。

plugins {
    id 'java'
}

/**
 * 项目路径
 */
group 'org.example'
/**
 * 项目版本
 */
version '1.0-SNAPSHOT'
/**
 * 指定所使用的仓库,默认的mavenCentral()表示使用中央仓库,此刻项目中的所有jar包都会从中央仓库下载到本地指定目录
 * mavenLocal()表示使用本地仓库
 */
repositories {
    //Maven本地仓库
    MavenLocal()
    // Maven中央仓库
    mavenCentral()
}

/**
 * 每个jar包的坐标都位于dependencies属性内
 * 每个jar包包含三个属性
 * group:name:version
 * 长格式:group:'',name:'',version:''
 * 短格式: 'group:name:version'
 * 可以从Maven中央仓库找到所需包的写法
 */
dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

test {
    useJUnitPlatform()
}

Maven中央仓库:Maven Repository: Search/Browse/Explore

父子工程依赖

在父工程中,存在一个setting.gradle文件,其中写有各个子工程的项目名

rootProject.name = 'GradleDemo'
include 'GradleChild1'
include 'GradleChild2'

若要由父工程的gradle给子工程提供依赖,需要在父工程的build.gradle中使用allprojects{}将所有内容包起来

allprojects {
    apply plugin: 'java' // 这里写法不太一样
    group 'org.example'
    version '1.0-SNAPSHOT'
    repositories {
        mavenCentral()
    }
    dependencies {
        testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
        testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
    }
    test {
        useJUnitPlatform()
    }
}

若子工程A还需要引入子工程B,需要在子工程的build.gradle中配置好dependencies()

//子工程Child2引入Child1
dependencies {
    implementation project(":GradleChild1")
}

Gradle+Maven本地仓库

一般Gradle有一个自己的本地仓库,但大概率自己本地也会有一个Maven仓库。在一些情况下我们不希望Gradle再下一遍

Preference- Build,Execution,Deployment - Gradle中,修改Use Gradle fromSpecified location,并指定本地的Maven仓库,一般为Maven下的repository文件夹。

同时添加mavenLocal()先从本地寻找依赖。

gradle仓库结构

但我测试完有点后悔,因为Gradle和Maven的仓库结构是不太一样的,两个混在一起后,会在当前使用的仓库中补充上以上文件,对于有强迫症的我来说就好像想吃白米饭但老爸总喜欢在里面加些红枣红薯balabala的一起煮。

Android+Gradle问题

对于这种从头开始的环境搭建问题,建议还是老老实实跑出一个HelloWorld,往往能避免很多直接上手项目的坑。

Could not find method google() for arguments [] on repository container.

重新捡起Android是为了跑起师兄的祖传代码,虽说在工程的readme中已经说明了可以先断网,将gradle-3.3版本导入本地,重新启动后以本地方式启动,最后就可以连上网了。

但由于gradle早期(2019年3月份前)没有在国内设置cdn,所以当时下载贼慢,受网络环境影响贼大。

虽说我刚开始学Android是在19年,但当时还是觉得很慢,而且实验室网络环境一直不行,每次同步都得在回寝室才能完成

// building.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google() //出问题所在
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
        google()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

出现这种原因一种可能性是使用的Gradle版本过低,可以通过两种方法修改

  1. 方法一:在项目文件gradle-wapper.properties中将distributionUrl一项改为更高版本
  2. 方法二:在File - Project Structure - Project中将Gradle Version修改为更高版本

修改完成后进行同步,有可能会提示如Minimum supported Gradle version is 4.10.1. Current version is 4.10.,继续修改更高的就可以了。

到2022年重新捡起Android,还是能明显感受到Gradle同步的速度快得多了。但仍有一些包会卡很久。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值