首页 > 其他分享 >史上最详细的Android Studio系列教程四--Gradle基础

史上最详细的Android Studio系列教程四--Gradle基础

时间:2023-05-07 16:32:24浏览次数:55  
标签:1.0 -- gradle Studio 版本 android Gradle com


什么是Gradle?

Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的内部领域特定(DSL)语言。

安装Gradle

Android Studio系列教程一--下载与安装中新建项目成功后会下载Gradle,貌似这个过程不翻也是可以下载,但是访问特别慢,建议翻下载。那么下载的Gradle到什么地方呢?

  • Mac上会默认下载到 /Users/<用户名>/.gradle/wrapper/dists
  • Win平台会默认下载到 C:\Documents and Settings\<用户名>.gradle\wrapper\dists

你会看到这个目录下有个 gradle-x.xx-all 的文件夹, 如果下载实在太慢,但是又不想翻的话,可以自己手动到Gradle官网下载对应的版本,然后将下载的.zip文件(也可以解压)复制到上述的gradle-x.xx-all 文件夹下,不过还是建议让它直接下载的好。

Gradle 基本概念

下面就以我的开源项目 9GAG 来详细讲解下和Gradle相关的知识, 和Gradle相关的几个文件一般有如下几个:


红色标记部分从上到下咱们来一步步分析:

1. 9GAG/app/build.gradle

这个文件是app文件夹下这个Module的gradle配置文件,也可以算是整个项目最主要的gradle配置文件,我们来看下这个文件的内容:

// 声明是Android程序
apply plugin: 'com.android.application'

android {
    // 编译SDK的版本
    compileSdkVersion 21
    // build tools的版本
    buildToolsVersion "21.1.1"

    defaultConfig {
        // 应用的包名
        applicationId "me.storm.ninegag"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0.0"
    }

    // java版本
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        release {
            // 是否进行混淆
            minifyEnabled false
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    // 移除lint检查的error
    lintOptions {
      abortOnError false
    }
}

dependencies {
    // 编译libs目录下的所有jar包
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:21.0.2'
    compile 'com.etsy.android.grid:library:1.0.5'
    compile 'com.alexvasilkov:foldable-layout:1.0.1'
    // 编译extras目录下的ShimmerAndroid模块
    compile project(':extras:ShimmerAndroid')
}

// 声明是Android程序
apply plugin: 'com.android.application'

android {
    // 编译SDK的版本
    compileSdkVersion 21
    // build tools的版本
    buildToolsVersion "21.1.1"

    defaultConfig {
        // 应用的包名
        applicationId "me.storm.ninegag"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0.0"
    }

    // java版本
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        release {
            // 是否进行混淆
            minifyEnabled false
            // 混淆文件的位置
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }

    // 移除lint检查的error
    lintOptions {
      abortOnError false
    }
}

dependencies {
    // 编译libs目录下的所有jar包
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:support-v4:21.0.2'
    compile 'com.etsy.android.grid:library:1.0.5'
    compile 'com.alexvasilkov:foldable-layout:1.0.1'
    // 编译extras目录下的ShimmerAndroid模块
    compile project(':extras:ShimmerAndroid')
}

这里需要说明几点:

  • 文件开头apply plugin是最新gradle版本的写法,以前的写法是apply plugin: 'android', 如果还是以前的写法,请改正过来。
  • buildToolsVersion这个需要你本地安装该版本才行,很多人导入新的第三方库,失败的原因之一是build version的版本不对,这个可以手动更改成你本地已有的版本或者打开 SDK Manager
  • applicationId代表应用的包名,也是最新的写法,这里就不在多说了。
  • android 5.0开始默认安装jdk1.7才能编译,但是由于mac系统自带jdk的版本是1.6,所以需要手动下载jdk1.7并配置下,具体可以见我这篇博客Mac下安装和管理Java
  • minifyEnabled也是最新的语法,很早之前是runProguard,这个也需要更新下。
  • proguardFiles这部分有两段,前一部分代表系统默认的android程序的混淆文件,该文件已经包含了基本的混淆声明,免去了我们很多事,这个文件的目录在 <sdk目录>/tools/proguard/proguard-android.txt , 后一部分是我们项目里的自定义的混淆文件,目录就在 app/proguard-rules.txt , 如果你用Studio 1.0创建的新项目默认生成的文件名是 proguard-rules.pro
  • compile project(':extras:ShimmerAndroid')这一行是因为9GAG中存在其他Module,不知道Module的概念可以看下这篇博客Android Studio系列教程二--基本设置与运行, 总之你可以理解成Android Library,由于Gradle的普及以及远程仓库的完善,这种依赖渐渐的会变得非常不常见,但是你需要知道有这种依赖的。
  • 以上文件里的内容只是基本配置,其实还有很多自定义部分,如自动打包debug,release,beta等环境,签名,多渠道打包等,后续会单独拿出来讲解。

2. 9GAG/extras/ShimmerAndroid/build.gradle

apply plugin: 'com.android.library'

3. 9GAG/gradle

wrapper 文件夹,里面可以看到有两个文件,我们主要看下 gradle-wrapper.properties

#Thu Dec 18 16:02:24 CST 2014
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

可以看到里面声明了gradle的目录与下载路径以及当前项目使用的gradle版本,这些默认的路径我们一般不会更改的,这个文件里指明的gradle版本不对也是很多导包不成功的原因之一。

4. 9GAG/build.gradle

这个文件是整个项目的gradle基础配置文件,我们来看看这里面的内容

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

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

内容主要包含了两个方面:一个是声明仓库的源,这里可以看到是指明的jcenter(), 之前版本则是mavenCentral(), jcenter可以理解成是一个新的中央远程仓库,兼容maven中心仓库,而且性能更优。另一个是声明了android gradle plugin的版本,android studio 1.0正式版必须要求支持gradle plugin 1.0的版本。

5. 9GAG/settings.gradle

这个文件是全局的项目配置文件,里面主要声明一些需要加入gradle的module,我们来看看9GAG该文件的内容:

include ':app', ':extras:ShimmerAndroid'

app, extras:ShimmerAndroid

标签:1.0,--,gradle,Studio,版本,android,Gradle,com
From: https://blog.51cto.com/u_16099425/6252225

相关文章

  • Android Studio系列教程二--基本设置与运行
    上面一篇博客,介绍了Studio的优点与1.0RC的安装与上手体验,没想到google的更新速度这么快,已经出了RC2版本,主要是修复一些bug。那么今天就带大家预览下Stduio的界面与基本功能。项目结构当我们新建一个项目的目录结构默认是这样的可以看到和Eclipse的目录结构有很大区别,Studio一个......
  • 'hello'.split('e')[::-1] # ['llo', 'h']
    'hello'.split('e')[::-1]#['llo','h']lst=[1,2,3]lst.append(4,5)#出错。append只能传入一个值。append()takesexactlyoneargument(2given)a=2;b=3print(eval('a*b'))#6eval是Python的一个内置函数,这个函数的作用是,返......
  • PAT Advanced 1008. Elevator
    PATAdvanced1008.Elevator1.ProblemDescription:Thehighestbuildinginourcityhasonlyoneelevator.Arequestlistismadeupwith\(N\)positivenumbers.Thenumbersdenoteatwhichfloorstheelevatorwillstop,inspecifiedorder.Itcosts6......
  • [Typescript] Testing type
    1.TSD:https://github.com/SamVerschueren/tsdimport{expectType}from'tsd';importconcatfrom'.';expectType<string>(concat('foo','bar'));expectType<string>(concat(1,2)); 2.Vitest:https://vit......
  • Spring
    SpringFramework1.Spring介绍官网:https://spring.ioSpring能做什么:用以开发web、微服务以及分布式系统等,光这三块就已经占了JavaEE开发的九成多。Spring并不是单一的一个技术,而是一个大家族,可以从官网的Projects中查看其包含的所有技术。SpringFramework:Spring框......
  • 常用的Python开发工具比较
    前言​ Python是一种功能强大且易于学习的编程语言,被广泛应用于数据科学、机器学习、Web开发等领域。随着Python在各个领域的应用越来越广泛,越来越多的Python开发工具也涌现出来。但是,对于新手来说,选择一款合适的Python开发工具可能是一件令人困惑的事情。因此,在本文中,我将介绍......
  • gin
    gin框架一、gin入门1.介绍Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助......
  • 面向开发者的ChatGPT提示工程-03. 工程迭代
     迭代式提示开发当使用LLM构建应用程序时,我从来没有在第一次尝试中就成功使用最终应用程序中所需的Prompt。但这并不重要,只要您有一个好的迭代过程来不断改进您的Prompt,那么你就能够得到一个适合任务的Prompt。我认为在提示方面,第一次成功的几率可能会高一些,但正如......
  • linux下安装kafka
    目录1.下载安装包2.安装java环境(已安装跳过该步骤)3.安装scala环境(已安装跳过该步骤)4.安装并且启动kafka5.使用连接工具测试kafka是否启动成功1.下载安装包##scala安装包##wget https://downloads.lightbend.com/scala/2.12.11/scala-2.12.11.tgz##kafka安装包(kafka3.0.0已......
  • 实验5
    实验任务1:1.1#include<stdio.h>#defineN4intmain(){intx[N]={1,9,8,4};inti;int*p;for(i=0;i<N;i++)printf("%d",x[i]);printf("\n");for(p=x;p<x+N;++p)printf(......