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。

  • 相关阅读:
    为图片指定区域添加链接
    数值取值范围问题
    【leetcode】柱状图中最大的矩形(第二遍)
    【leetcode 33】搜索旋转排序数组(第二遍)
    【Educational Codeforces Round 81 (Rated for Div. 2) C】Obtain The String
    【Educational Codeforces Round 81 (Rated for Div. 2) B】Infinite Prefixes
    【Educational Codeforces Round 81 (Rated for Div. 2) A】Display The Number
    【Codeforces 716B】Complete the Word
    一个简陋的留言板
    HTML,CSS,JavaScript,AJAX,JSP,Servlet,JDBC,Structs,Spring,Hibernate,Xml等概念
  • 原文地址:https://www.cnblogs.com/abao0/p/6934191.html
Copyright © 2011-2022 走看看