zoukankan      html  css  js  c++  java
  • 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    【声明】 

    欢迎转载,但请保留文章原始出处→_→ 

    生命壹号:http://www.cnblogs.com/smyhvae/

    文章来源:http://www.cnblogs.com/smyhvae/p/4456420.html

    【系列】

    第一次使用Android Studio时你应该知道的一切配置

    第一次使用Android Studio时你应该知道的一切配置(二):新建一个属于自己的工程并安装Genymotion模拟器

    第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建

    目录:

    1、gradle的概念

    2、gradle配置jar包,和libs文件夹导入jar包的区别

    3、签名打包:

        (1)Studio

        (2)命令行

        (3)gradle wrapper的原理

    4、BuildConfig的使用

    5、简单介绍module中build.gradle文件参数含义

    一、gradle的概念:

    • gradle是一个构建工具
    • gradle是以Groovy语言为基础的
    • gradle主要面向的是Java语言

    打开Android Studio内置的终端,在输入如下命令查看gradle版本:

    gradlew -v

    如果是第一次运行这个命令,系统会帮我们下载gradle到本地,下载到的路径是:

    f0d528a1-b7cb-410d-978f-a5f975e24246

    输入上述命令后,查看到gradle的版本2.2.1,如下图所示:

    74c0b9b1-ca40-49fc-bdbc-197c0786fa16

     

    二、通过gradle来导入jar包:

    我们在上一篇文章中第二段的第3小节中讲到了通过拷贝文件到libs文件夹来导入jar包。这次来讲一下怎么通过gradle来配置jar包。我们还是以谷歌的gjson.jar为例,如果之前已经通过拷贝文件方式倒入过了,请先自行删掉。

    1、通过gradle配置第三方jar包

    我们看到,每个module都有一个build.gradle文件,它其实是对应module的配置文件。关于build.gradle文件中具体内容的含义,我们将在最后一段进行讲解。

    我们先来看一下名为app的这个module,它的build.gradle对应的图形界面其实是下面这个Project Stucture:

    a4eb5912-20cf-4f46-90ea-67bd27f192d8

    上图中,切换到dependencies标签下,如下图所示:

    4f8405c6-942d-4ad1-af6c-680ed40089b9

    上图中,点击添加,然后选择"Library dependency",弹出如下界面:

    49c4a575-aec8-4f41-96c7-a667d5d1ddd7

    上图中,我们在搜索框中输入“gson”,然后确定,就弹出了箭头处的我们需要的jar包,添加它即可:

    646e1935-bdde-4429-9ff8-d70902d5b34f

    之后我们会发现,app这个module的build.gradle中多了一行代码,表示引入了gson.jar:

    b2841508-79d5-465d-ac3f-8ccc263b2008

    其实,如果你能记得住上方这行代码,直接写出代码来也是可以导入的。

    此时,gson这个jar包不再是出现在libs这个文件夹下了,而是出现在最下方的External Libraries中,如下图所示:(而且是最新版本哦)

    58f33bae-0e14-4d4c-886d-95811f4d88a0

    2、gradle导入jar包的特点:(和libs文件夹导入jar包的区别)

    • gradle导入jar包更方便,一行代码即可搞定。不像后者那样还要自己去官方下载。
    • 如果官方将jar包更新了,我们只需要在build.gradle中改一下版本号就行了,不用重新去官网下载。

     

    3、通过gradle导入的jar包是从哪里来的:

    需要注意的是:不是所有的jar包都是可以通过gradle来导入的。那通过gradle导入的jar包是从哪里来的呢?解释如下:

    我们发现HelloWorld这个project的目录下有一个build.gradle文件,打开它:

    b1590c7d-e046-46a5-a659-ee4ceb633054

    上图中第17行的"jcenter()"的意思是,所有通过gradle导入的jar包都是从http://bintray.com/bintray/jcenter这个中央仓库上扒下来的。如果你需要的jar包在这个网站上没有,那就无法通过gradle的方式来导入哦。

    顺便提一下,上图中第8行的classpath中的gradle 1.1.0是android的一个gradle插件(也是从中央仓库扒下来的)。而我们自己使用的gradle版本如下图所示:

    452c7226-a262-4ccf-9b0f-8bd39ff59b42

    我们自己下载好的gradle的路径如下:

    672d7347-1d2b-4acc-8dce-7ba3551357e8

    三、签名打包的两种方式:

    注:给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行。签名就代表着自己的身份(即keystore),多个app可以使用同一个签名。

    如果不知道签名是啥意思,请自行百度哦。在eclipse中签名的方法是:选中工程,邮件选择"export-android-export android application",

    1、方式1:通过Android Studio进行签名:

    选中app这个module,选择菜单栏"Build-Generate signed apk":

    30d1daba-bdb4-4dde-9324-89293482a84e

    弹出如下界面:

    5a3058ac-cba2-44d1-84cf-b77b246bb4d1

    上图中,如果你是第一次使用签名,就单击红框部分创建一个新的签名;如果你之前有过签名的文件,就选择蓝框部分进行导入即可。那我就先选择红框部分吧:

    70ae6ac4-ed0b-4938-b3f5-229dba3fea29

    3b69eb78-a2bc-408b-b49f-272b46b32a31

    3ef16884-13b8-453f-bad5-b9dba1a667f7

    f757b8aa-277b-45f0-9afd-403adc82082c

    上图中,点击"finish"之后,可以看到Android Studio的最下方显示:Gradle正在执行assembleRelease这样一个任务,如下图所示:

    bf6076fd-480d-48b4-bb1a-e2bfee785e5e

    生成签名好的apk之后,会弹出提示:

    8b42d822-e3a2-4c66-aea4-6b2b4e83fef3

    77cd9b25-b0f0-4f0b-85ec-c00b4e13b61b

    2、方式2:通过命令行的方式进行签名:

    (1)加载Key Store:

    我们先删掉上面的通过第一种方式所签名的apk文件。接下来进行第二种方式来签名,即命令行的方式。

    打开Project Stucture图形化界面:

    03458b6c-92b8-42be-ab1d-e2c3097570eb

    d6d07e96-330b-40c6-bc22-32fc37391144

    上图中,选中app这个module,然后切换到singning标签栏,紧接着点击添加,然后生成release签名信息,紧接着点击"OK"。接着做如下操作:

    c638147d-7741-4c63-9d3a-0066ac959219

    上图中,切换到Build Types标签,将Signing config选择为"release",即将刚刚生成的release签名信息配置进去。

    操作完成之后,我们可以看到app这个module的build.gradle文件多出了如下红框部分的代码:

    f59c1858-e26a-41a4-96b5-f7e32eb6c8ac

    然后执行菜单栏的"build-clean Project":

    a7af4c5b-23c2-4997-8d6f-47940c1a0f1c

    (2)生成realease版本的apk:

    紧接着在命令行Terminal输入如下命令:(AS已经将命令行Terminal集成到了软件当中)

    gradlew assembleRelease

    如果运行成功,效果如下:

    74e21bb0-7afc-4bc6-9103-a4748f2003bf

    生成的签名好的apk在如下位置:

    b8f81109-cf7f-4649-a4da-a4bb91a3c96a

    3、为什么要使用gradlew命令而不是gradle命令:

    在HelloWorld工程目录下有一个gradle文件夹,在gradle/wrapper目录下有一个gradle-wrapper.properties文件,打开它:

    c5bb106f-081e-40d8-816e-ea04a4814977

    上图代表着HelloWorld这个工程所依赖的gradle的版本信息。上图的红线表示,如果我们的工程中没有gradle,软件会根据这个url去下载gradle,终于知道为啥第一次打开AS时会这么慢了吧?

    如果我们执行了gradlew命令,实际上是执行上面的gradle wrapper,然后找到我们已经下载好的gradle 2.2.1。如果现在有很多个工程,但是每个工程的gradle版本都不一样,我就必须要将每个版本的gradle都要配置到环境变量当中,而执行了gradlew命令,就会避免这个麻烦。

    四、BuildConfig文件:

    BuildConfig是IDE自动生成的一个类,在elipse中即存放在gen目录下(如R文件)。而在Adroid Studio中,BuildConfig文件存放的位置是:app/build/generated/source/buildconfig/dubug/<packagename>/BuildConfig.java中。如下图所示:

    42c80b8f-7e10-4e57-bacb-178a0ae4fc56

    五、module中build.gradle文件参数含义:

    主要是module的build.gradle,截图如下:

    1518e471-4c75-4610-89f5-47ba9bc701f8

    01行:apply plugin: 'com.android.application'    表示该module是这个应用程序的module

    15行:applicationId "com.smyhvae.helloworld"    应用程序的包名

    16、17行:向下兼容的最小版本、编译版本。    注:在app/src/main/AndroidManifest.xml中不再出现这个信息了。

    23行:需不需要利用24行的proguard文件来混淆代码。在release状态下,最好改为true。

  • 相关阅读:
    洛谷P1258小车问题
    洛谷P1028 数的计算
    P1980 计数问题
    洛谷P1907口算练习题
    2018icpc沈阳-K.Let the Flames Begin (约瑟夫环问题)
    Codeforces Round #585 (Div. 2) B. The Number of Products
    字符串部分模板总结
    CF-1209D Cow and Snacks (并查集,图)
    Codeforces Round #584 (div.1+div.2)(补题)
    HDU
  • 原文地址:https://www.cnblogs.com/xiaofengfeng/p/9133043.html
Copyright © 2011-2022 走看看