守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 2497|回复: 6

[Android] Android Studio详细使用教程

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51691
    钢镚
    1422

    开源英雄守望者

    发表于 2016-1-25 18:06:07 | 显示全部楼层 |阅读模式

    感谢作者stormzhang的分享

    Android Studio系列教程一--下载与安装:

    http://stormzhang.com/devtools/2014/11/25/android-studio-tutorial1/

    Android Studio系列教程二--基本设置与运行​:

    http://stormzhang.com/devtools/2014/11/28/android-studio-tutorial2/​

    Android Studio系列教程三--快捷键:

    http://stormzhang.com/devtools/2014/12/09/android-studio-tutorial3/​

    Android Studio系列教程四--Gradle基础:

    http://stormzhang.com/devtools/2014/12/18/android-studio-tutorial4/

    Android Studio系列教程五--Gradle命令详解与导入第三方包:

    http://stormzhang.com/devtools/2015/01/05/android-studio-tutorial5/​

    Android Studio系列教程六--Gradle多渠道打包​:

    http://stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/​


    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51691
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2016-1-25 18:07:20 | 显示全部楼层

    Android Studio系列教程一--下载与安装


    背景

    相信大家对Android Studio已经不陌生了,Android Studio是Google于2013 I/O大会针对Android开发推出的新的开发工具,目前很多开源项目都已经在采用,Google的更新速度也很快,明显能感觉到这是Android开发的未来,那么我们还有什么理由不去拥抱未来呢?

    虽然推出了很久,但是国内貌似普及的程度并不高,鉴于很多朋友求studio的详细教程,那么今天我就手把手教大家下载、安装、使用,Studio之路从这里开始。

    Android Studio VS Eclipse

    相信目前国内用Eclipse的还是大多数,那么首先就来说一下Studio的一些优点,比较才能更有说服力,才能说明为什么我们要从Eclipse迁移到Studio。

    • 1、Google推出的

    毫无疑问,这个是它的最大优势,Android Stuido是Google推出,专门为Android“量身订做”的,是Google大力支持的一款基于IntelliJ IDEA改造的IDE,这个应该能说明为什么它是Android的未来

    • 2、速度更快

    Eclipse的启动速度、响应速度、内存占用一直被诟病,相信大家这点应该深有体会,而且经常遇到卡死状态。Studio不管哪一个方面都全面领先Eclipse

    • 3、UI更漂亮

    I/O上演示的那款黑色主题真是太棒了,极客范,Stuido自带的Darcula主题的炫酷黑界面实在是高大上,相比而言Eclipse下的黑色主题太low了

    • 4、更加智能

    提示补全对于开发来说意义重大, Studio则更加智能,智能保存,从此再也不用每次都 Ctrl + S了。熟悉Studio以后效率会大大提升。

    • 5、整合了Gradle构建工具

    Gradle是一个新的构建工具,自Studio亮相之处就支持Gradle,可以说Gradle集合了Ant和Maven的优点,不管是配置、编译、打包都非常棒。

    • 6、强大的UI编辑器

    Android Studio的编辑器非常的智能,除了吸收Eclipse+ADT的优点之外,还自带了多设备的实时预览,相对这对Android开发者来说简直是神器啊。

    • 7、内置终端

    Studio内置终端,这对于习惯命令行操作的人来说简直是福音啊,再也不用来回切换了,一个Studio全部搞定。

    • 8、更完善的插件系统

    Studio下支持各种插件,如Git、Markdown、Gradle等等,你想要什么插件,直接搜索下载。

    • 9、完美整合版本控制系统

    安装的时候就自带了如GitHub, Git, SVN等流行的版本控制系统,可以直接check out你的项目。

    大家看完以上是不是很动心呢,优点是很多,但是大家学习的时候会遇到很多问题,如Studio和Eclipse的目录结构、快捷键等等完全不一样,需要适应一段时间,Gradle同样增加了学习成本,虽然Google的更新速度已经相当快了,但是目前最新的是1.0RC版本,仍未推出正式版,说明可能会有一些小问题等,Studio官方解释暂未支持NDK,所以如果你的项目用到了NDK最好也不要使用Studio。

    但是相信Google会越来越完善的,学习成本与适应阶段是我们做技术一直要保持的心态,一旦上手相信你要离不开它了。

    最后这里先上一张我本地Studio的截图:

    准备

    因为Google Android的一些官方网站在国内访问有限制,原因你懂得。所以在开始下载安装Studio之前,你需要自备梯子,关于如何翻墙有很多种方法,这里就不做过多介绍,私以为作为一个Android开发者,不懂翻墙基本没法做下去。所以这点投入是值得的,这里推荐大家直接购买VPN吧,因为我曾经折腾了很多翻墙的玩意,要么不稳定,要么速度慢,后来想通了,凡是花点钱能解决的问题都不是问题,这里推荐云梯VPN,价格算是很便宜的了,别再问我速度、稳定性如何,我已经使用并续费快两年了。(通过这个链接购买的,你的账户可以优惠10元)

    下载

    官方下载有两个地方,均需要翻墙。

    Android开发者官网的网站,可直接下载,但是这个网站貌似只更新Beta和正式版,目前只更新到Beta 0.8.14版本。

    Android开发工具的网站,上面链接是Studio的canary渠道,列出了Studio各种实时预览版等,目前最新的是1.0RC版本。

    创建HelloWorld项目

    至于安装就没什么可说的了,点击直接运行了。这里我以Mac系统的1.0RC版本为例,来创建第一个HelloWorld项目。其他平台基本上差不多,在这之前假设你已经配置好了JDK和Android SDK环境,并且你是第一次安装Studio。

    • 1、首先运行时的欢迎画面

    • 2、之后第一次的话会进入到设置向导页

    点击Next进入选择设置类型向导页

    这里有两个选项“Standard”和“Custom”,即标准和自定义,如果你本机的Android SDK没有配置过,那么建议直接选择“Standard”, 点击“Finish”按钮

    因为我本地已经下载SDK并配置好了环境变量,所以我选择”Custom”,然后到下一步:

    这一步选择你本地SDK的位置,可以看到有个2.25GB的SDK要下载,那是因为Studio 1.0默认要下载5.0的SDK以及一些Tools之类的,然后点击”Finish”按钮

    (PS: 这个选择并下载2.25G的组件是studio的一个bug,评论里有人提醒,感谢这位同学。如果网速不行想跳过这步的可以在bin目录的idea.properties增加一行:disable.android.first.run=true就行了,mac平台的右键安装包->Show Package Contents 就找到bin目录了。)

    • 3、下载依赖组件

    之后便到下载组件页面,这个过程需要翻墙,而且依赖你的网速,时间有点久,大家耐心等待…

    下载完成后点击”Finish”按钮

    • 4、新建项目

    在这个页面我们可以新建项目,也可以导入项目本地或者GitHub上的项目等,左边可以查看最近打开的项目等,这里我直接新建项目

    然后到如下界面

    我们填上项目名称和报名以及项目路径等然后”Next”

    这个页面支持你适配TV、Wear、Glass等,我们只选择第一项就ok,选好最小SDK然后”Next”

    这个页面选择一个Activity模板,和Eclipse很像,我们直接选择一个Blank Activity好了

    点击”Finish”后等一会出来如下一个进度条,很多人容易卡在这里,这里需要下载Gradle,只第一次会下载,有点慢,需要翻墙,大家也耐心等待下

    下载成功后变看到如下完整的项目界面

    至此一个简单的Studio项目就完成了,图片中也可以看到默认是一个白色主题,不够酷炫?Studio默认自带一款高大上的黑色主题,只需要简单修改下就OK。

    到Preference -> Appearance下更改主题到Darcula

    之后我们再来看一下更改后的主题

    很酷炫有木有?至此第一期的Studio简单介绍就到这里,后面会介绍目录结构、快捷键、导入项目、集成GitHub、Gradle等等,敬请期待。

    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51691
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2016-1-25 18:08:35 | 显示全部楼层
    本帖最后由 破晓 于 2016-1-25 18:09 编辑

    Android Studio系列教程二--基本设置与运行

    上面一篇博客,介绍了Studio的优点与1.0 RC的安装与上手体验,没想到google的更新速度这么快,已经出了RC 2版本,主要是修复一些bug。那么今天就带大家预览下Stduio的界面与基本功能。

    项目结构

    当我们新建一个项目的目录结构默认是这样的

    可以看到和Eclipse的目录结构有很大区别,Studio一个窗口只能有一个项目,而Eclipse则可以同时存在很多项目,如果你看着不习惯可以点击左上角进行切换

    切换到“project”模式下的目录结构是这样的,我个人也更习惯这种格式

    和Eclipse的区别有如下:

    • 1、Studio中有Project和Module的概念,前面说到Studio中一个窗口只能有一个项目,即Project,代表一个workspace,但是一个Project可以包含多个Module,比如你项目引用的Android Library, Java Library等,这些都可以看做是一个Module;

    • 2、上述目录中将java代码和资源文件(图片、布局文件等)全部归结为src,在src目录下有一个main的分组,同时划分出java和res两个文件夹,java文件夹则相当于Eclipse下的src文件夹,res目录结构则一样.

    偏好设置

    进入后你也许发现字体大小或者样式不符合你的习惯,比如我是觉得代码太小看起来伤眼,Darcular主题默认的字体是12,我个人更习惯14的字体大小。没关系,到 Preferences (设置)页面搜索 Font找到 Colors&Fonts 下的 Font 选项,我们可以看到默认字体大小是12,但是无法修改,需要先保存才可以修改,点击 Save as 输入一个名字,比如 MyDarcular,然后就可以修改字体大小和字体样式了.

    点击确定之后再回到页面发现字体是变大了,但是Studio默认的一些字体大小如侧边栏等确没有变化,看起来很不协调,如下图

    强迫症的你肯定无法忍受,没关系,这里也同样可以设置,到 Preferences -> Appearance 修改如图所示就ok,这里同样不仅可以更改字体大小,也可以选择不同的字体,点击OK,这次页面字体就完全对你胃口了。

    调整之后再看下效果

    运行

    接下来运行程序,运行和 Eclipse 中比较像,点击菜单栏的绿色箭头直接运行

    Studio 默认安装会启动模拟器,如果想让安装到真机上可以配置一下。在下拉菜单中选择 Edit Configurations 选择提示或者是USB设备。

    常用功能

    在Studio菜单栏的右边有这样几个常用的功能,如图分别是 Gradle同步AVD ManagerSDK ManagerDDMS

    Gradle同步 在你项目运行或者更改Gradle配置的时候都要点击下这个按钮,会下载相应的依赖

    AVD Manager 模拟器管理

    SDK Manager 就是管理你的SDK版本

    DDMS 即 Dalvik Debug Monitor Service,Dalvik调试监控服务。

    创建模拟器

    建议在创建模拟器前把 SDK Manager 中的 ToolsExtras 都更新到最新。

    点击 AVD Manager 按钮

    点击图中的创建按钮

    选择一个设备,这里我选择 Nexus 5,然后Next

    这里选择一个系统版本,这里以5.0为例,然后Next

    由于各位的屏幕尺寸不一样,建议这里Scale一栏选择Auto,然后点击Finish接着可以看到我们已经创建好一个5.0的模拟器了

    这次我们再运行,选择模拟器启动看下最终效果(模拟器的启动很慢,大家耐心等待)

    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51691
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2016-1-25 18:12:24 | 显示全部楼层

    Android Studio系列教程三--快捷键


    Android Studio 1.0正式版发布啦

    今天是个大日子,Android Studio 1.0 终于发布了正式版, 这对于Android开发者来说简直是喜大普奔的大消息啊,那么就果断来下载使用。

    官方下载地址: http://developer.android.com/sdk/index.html

    如果你之前已经使用其他版本的Studio,那么直接覆盖就好了,如果是第一次使用,那么参照Android Studio系列教程一进行安装配置。

    于此同时一起更新的还有SDK Tools等,打开SDK Manager进行更新就OK。如果之前有在使用RC版本的Studio,更新覆盖之后应该会出错,那是因为Stuido 1.0默认使用1.0的Gradle插件,所以只需到项目根目录的 build.gradle 更新成如下代码然后同步下就OK了

    快捷键

    对于很多Eclipse转过来的同学,不适应的最主要就是快捷键部分了,Studio默认的快捷键和Eclipse差别很大,但是Studio强大的地方在于通过设置你可以一直沿用Eclipse风格的快捷键,这样对于那些Eclipse过渡来的同学省了很多学习成本。

    Preferences -> Keymap 然后就可以选择你想要的快捷键,这里不止可以选择Eclipse,还可以选择 EmacsNet Beans 等编辑器的快捷键

    对于新手们或者对Eclipse没有好感的同学们,肯定想学习默认的Studio快捷键,下面整理了下常用的一些快捷键,更多的快捷键还需要大家自己去习惯适应。(我自己选择的是Mac OS X 10.5+)

    ActionMac OSXWin/Linux
    注释代码(//)Cmd + /Ctrl + /
    注释代码(/**/)Cmd + Option + /Ctrl + Shift + /
    格式化代码Cmd + Option + LCtrl + Alt + L
    清除无效包引用Option + Control + OAlt + Ctrl + O
    查找Cmd + FCtrl + F
    查找+替换Cmd + RCtrl + R
    上下移动代码Option + Shift + Up/DownAlt + Shift + Up/Down
    删除行Cmd + DeleteCtrl + Y
    扩大缩小选中范围Option + Up/DownCtrl + W/Ctrl + Shift + W
    快捷生成结构体Cmd + Option + TCtrl + Alt + T
    快捷覆写方法Cmd + OCtrl + O
    快捷定位到行首/尾Cmd + Left/RightCtrl + Left/Right
    折叠展开代码块Cmd + Plus,MinusCtrl + Plus/Minus
    折叠展开全部代码块Cmd + Shift + Plus,MinusCtrl + Shift + Plus,Minus
    文件方法结构Cmd + F12Ctrl + F12
    查找调用的位置Ctrl + Option + HCtrl + Alt + H
    大小写转换Cmd + Shift + UCtrl + Shift + U

    (PS: 以上快捷键没有在win平台尝试确认,欢迎反馈错误与补充)

    自动导包

    最后再介绍一个最有用的设置,我们只有每次引用一些类的时候必须要导包,而Studio可以通过设置自动导包,简直太实用了.

    到 Preferences -> Editor -> Auto Import -> Java 把以下选项勾上就OK了

    从此世界清静了。。。

    至此Android Studio的基本使用相信大家都已经会了,从下一系列开始介绍Gradle语法以及基本配置与多渠道打包等,敬请期待!

    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51691
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2016-1-25 18:13:32 | 显示全部楼层

    Android Studio系列教程四--Gradle基础


    其实很早之前也写了一篇Gradle的基础博客,但是时间很久了,现在Gradle已经更新了很多,所以暂且结合Stduio 1.0正式版与最新的Gradle语法来详细讲解下,小伙伴们直接跟我一步步来学习吧。

    什么是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 {
            debug {
                // debug模式
            }
            
            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程序的混淆文件,该文件已经包含了基本的混淆声明,免去了我们很多事,这个文件的目录在 **/tools/proguard/proguard-android.txt** , 后一部分是我们项目里的自定义的混淆文件,目录就在 **app/proguard-rules.txt** , 如果你用Studio 1.0创建的新项目默认生成的文件名是 **proguard-rules.pro** , 这个名字没关系,在这个文件里你可以声明一些第三方依赖的一些混淆规则,由于是开源项目,9GAG里并未进行混淆,具体混淆的语法也不是本篇博客讨论的范围。最终混淆的结果是这两部分文件共同作用的。

    • compile project(‘:extras:ShimmerAndroid’)这一行是因为9GAG中存在其他Module,不知道Module的概念可以看下这篇博客Android Studio系列教程二–基本设置与运行, 总之你可以理解成Android Library,由于Gradle的普及以及远程仓库的完善,这种依赖渐渐的会变得非常不常见,但是你需要知道有这种依赖的。

    • 以上文件里的内容只是基本配置,其实还有很多自定义部分,如自动打包debug,release,beta等环境,签名,多渠道打包等,后续会单独拿出来讲解。

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

    每一个Module都需要有一个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'

    文件中的 appextras:ShimmerAndroid 都是module,如果还有其他module都需要按照如上格式加进去。

    总结

    关于gradle的基础知识就介绍到这里,接下来会介绍一种我常用的快速方便的编译查看第三方开源项目的方法,如何导入Android Studio,Gradle常用基本命令,多渠道打包配置等。有疑问或者发现错误欢迎大家直接博客留言。

    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51691
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2016-1-25 18:14:22 | 显示全部楼层

    Android Studio系列教程五--Gradle命令详解与导入第三方包


    Android Studio + Gradle的组合用起来非常方便,很多第三方开源项目也早都迁移到了Studio,为此今天就来介绍下查看、编译并导入第三方开源项目的方法。

    Sublime + Terminal编译并查看源码

    首先来给大家介绍一种简便并且个人最喜欢的一种办法。很多时候我们在GitHub上看到一个不错的开源项目,一般有两种需求,阅读源码和查看运行效果,如果是单纯的查看源码我更喜欢用一些轻量级编辑器,如vim,sublime等,vim不是很熟练,所以个人一种都习惯用sublime来查看并阅读源码(实际开发还是Android Studio、Eclipse等IDE更有效率);至于查看运行效果首先得需要apk,对于一些开源项目已提供apk下载,那就好办,直接安装到手机即可。 而对于一些没有提供apk下载的,则需要自己手动编译打包。

    下面以9GAG为例来讲解下命令行Gradle编译的过程。

    • 1、切换到9GAG项目的根目录,执行 ./gradlew -v 来查看下项目所用的Gradle版本

    如果你是第一次执行会去下载Gradle,这个过程如果不翻墙非常慢,建议翻墙

    紧接着下载成功会看到如下信息:

    ------------------------------------------------------------
    Gradle 2.2.1
    ------------------------------------------------------------
    
    Build time:   2014-11-24 09:45:35 UTC
    Build number: none
    Revision:     6fcb59c06f43a4e6b1bcb401f7686a8601a1fb4a
    
    Groovy:       2.3.6
    Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
    JVM:          1.7.0_60 (Oracle Corporation 24.60-b09)
    OS:           Mac OS X 10.9.5 x86_64
    • 2、接着执行 ./gradlew clean

    执行这个命令会去下载Gradle的一些依赖,下载成功并编译通过时会看到如下信息:

    :app:clean UP-TO-DATE
    :extras:ShimmerAndroid:clean UP-TO-DATE
    
    BUILD SUCCESSFUL
    • 3、最后执行 ./gradlew build

    这个命令会直接编译并生成相应的apk文件,如果看到如下字样就代表build成功了

    BUILD SUCCESSFUL
    
    Total time: 31.456 secs

    紧接着在 9GAG/app/build/outputs/apk 目录下会看到类似于app-debug-unaligned.apk, app-release-unsigned.apk等,看名字应该能理解意思,unaligned代表没有进行zip优化的,unsigned代表没有签名的。然后就可以直接安装apk查看运行效果了。

    以上是我个人习惯的一种阅读第三方源码的习惯,关于上面提到的一些gradle命令大家应该还不理解,后面会一一进行说明的。

    导入Android Studio

    但是如果你还是想导入Android Studio的话,下面就来简单介绍下导入Studio的方法以及一些注意事项。

    • 1、选择File->Import Project, 选择本地9GAG项目的目录

    • 2、第一次依然会下载Gradle,其实自己在命令行已经下载过了,但是这次依然还要下载一次(依然要翻墙),可能是个bug

    • 3、导入之后你需要注意以下几个地方
    1. 每个Module下的 build.gradle 下的buildToolsVersion,即9GAG/app/build.gradle 和 9GAG/extras/ShimmerAndroid/build.gradle , 可以打开 SDK Manager 查看本地你安装的 SDK Build-tools, 如下图,如果相应版本没有安装请先下载。

    1. 项目根目录下的 build.gradle 下gradle插件的版本,如 9GAG/build.gradle 的内容:

      classpath ‘com.android.tools.build:gradle:1.0.0’

    Android Studio 1.0必须指定gradle插件1.0的版本

    1. Gradle Wrapper的版本,在 9GAG/gradle/wrapper/gralde-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的版本使用2.2.1,在Studio中如果你手动改了gradle插件的版本会有提示要不要更新Gradle Wrapper的版本。

    如果以上几个地方确定版本是ok的,那么导入Android Studio应该没有问题,有些老的项目可能gradle版本比较老,仍然在使用一些老的语法,如果编译还通不过参考Android Studio系列教程四–Gradle基础更改成最新的语法。

    Gradle常用命令

    上面大家接触了一些命令如 ./gradlew -v ./gradlew clean ./gradlew build, 这里注意是./gradlew./代表当前目录,gradlew代表 gradle wrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即gradle wrapper, 在9GAG/gradle/wrapper/gralde-wrapper.properties文件中声明了它指向的目录和版本。只要下载成功即可用grdlew wrapper的命令代替全局的gradle命令。

    理解了gradle wrapper的概念,下面一些常用命令也就容易理解了。

    • ./gradlew -v 版本号

    • ./gradlew clean 清除9GAG/app目录下的build文件夹

    • ./gradlew build 检查依赖并编译打包

    这里注意的是 ./gradlew build 命令把debug、release环境的包都打出来,如果正式发布只需要打Release的包,该怎么办呢,下面介绍一个很有用的命令 **assemble**, 如

    • ./gradlew assembleDebug 编译并打Debug包

    • ./gradlew assembleRelease 编译并打Release的包

    除此之外,assemble还可以和productFlavors结合使用,具体在下一篇多渠道打包进一步解释。

    • ./gradlew installRelease Release模式打包并安装

    • ./gradlew uninstallRelease 卸载Release模式包

    下一篇来介绍用Gradle进行方便的多渠道打包,以及项目中完整的Gradle配置。有问题或建议欢迎大家直接博客留言。

    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    51691
    钢镚
    1422

    开源英雄守望者

     楼主| 发表于 2016-1-25 18:15:29 | 显示全部楼层

    Android Studio系列教程六--Gradle多渠道打包


    由于国内Android市场众多渠道,为了统计每个渠道的下载及其它数据统计,就需要我们针对每个渠道单独打包,如果让你打几十个市场的包岂不烦死了,不过有了Gradle,这再也不是事了。

    友盟多渠道打包

    废话不多说,以友盟统计为例,在AndroidManifest.xml里面会有这么一段:

    <meta-data
        android:name="UMENG_CHANNEL"
        android:value="Channel_ID" />

    里面的Channel_ID就是渠道标示。我们的目标就是在编译的时候这个值能够自动变化。

    • 第一步 在AndroidManifest.xml里配置PlaceHolder
    <meta-data
        android:name="UMENG_CHANNEL"
        android:value="${UMENG_CHANNEL_VALUE}" />
    • 第二步 在build.gradle设置productFlavors
    android {  
        productFlavors {
            xiaomi {
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
            }
            _360 {
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "_360"]
            }
            baidu {
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
            }
            wandoujia {
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
            }
        }  
    }

    或者批量修改

    android {  
        productFlavors {
            xiaomi {}
            _360 {}
            baidu {}
            wandoujia {}
        }  
    
        productFlavors.all { 
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name] 
        }
    }

    很简单清晰有没有?直接执行 ./gradlew assembleRelease , 然后就可以静静的喝杯咖啡等待打包完成吧。

    assemble结合Build Variants来创建task

    上一篇博客介绍了 assemble 这个命令,会结合 Build Type 创建自己的task,如:

    • ./gradlew assembleDebug

    • ./gradlew assembleRelease

    除此之外 assemble 还能和 Product Flavor 结合创建新的任务,其实 assemble 是和 Build Variants 一起结合使用的,而 Build Variants = Build Type + Product Flavor , 举个例子大家就明白了:

    如果我们想打包wandoujia渠道的release版本,执行如下命令就好了:

    • ./gradlew assembleWandoujiaRelease

    如果我们只打wandoujia渠道版本,则:

    • ./gradlew assembleWandoujia

    此命令会生成wandoujia渠道的Release和Debug版本

    同理我想打全部Release版本:

    • ./gradlew assembleRelease

    这条命令会把Product Flavor下的所有渠道的Release版本都打出来。

    总之,assemble 命令创建task有如下用法:

    • **assemble**: 允许直接构建一个Variant版本,例如assembleFlavor1Debug。

    • **assemble**: 允许构建指定Build Type的所有APK,例如assembleDebug将会构建Flavor1Debug和Flavor2Debug两个Variant版本。

    • **assemble**: 允许构建指定flavor的所有APK,例如assembleFlavor1将会构建Flavor1Debug和Flavor1Release两个Variant版本。

    完整的gradle脚本

    最后福利大放送,来一份我在项目中使用的完整的gradle文件配置:

    apply plugin: 'com.android.application'
    
    def releaseTime() {
        return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
    }
    
    android {
        compileSdkVersion 21
        buildToolsVersion '21.1.2'
    
        defaultConfig {
            applicationId "com.boohee.*"
            minSdkVersion 14
            targetSdkVersion 21
            versionCode 1
            versionName "1.0"
            
            // dex突破65535的限制
            multiDexEnabled true
            // 默认是umeng的渠道
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "umeng"]
        }
    
        lintOptions {
            abortOnError false
        }
    
        signingConfigs {
            debug {
                // No debug config
            }
    
            release {
                storeFile file("../yourapp.keystore")
                storePassword "your password"
                keyAlias "your alias"
                keyPassword "your password"
            }
        }
    
        buildTypes {
            debug {
                // 显示Log
                buildConfigField "boolean", "LOG_DEBUG", "true"
    
                versionNameSuffix "-debug"
                minifyEnabled false
                zipAlignEnabled false
                shrinkResources false
                signingConfig signingConfigs.debug
            }
    
            release {
                // 不显示Log
                buildConfigField "boolean", "LOG_DEBUG", "false"
    
                minifyEnabled true
                zipAlignEnabled true
                // 移除无用的resource文件
                shrinkResources true
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                signingConfig signingConfigs.release
    
                applicationVariants.all { variant ->
                    variant.outputs.each { output ->
                        def outputFile = output.outputFile
                        if (outputFile != null && outputFile.name.endsWith('.apk')) {
                        	// 输出apk名称为boohee_v1.0_2015-01-15_wandoujia.apk
                            def fileName = "boohee_v${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                            output.outputFile = new File(outputFile.parent, fileName)
                        }
                    }
                }
            }
        }
    
        // 友盟多渠道打包
        productFlavors {
            wandoujia {}
            _360 {}
            baidu {}
            xiaomi {}
            tencent {}
            taobao {}
            ...
        }
    
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:support-v4:21.0.3'
        compile 'com.jakewharton:butterknife:6.0.0'
        ...
    }

    大家有问题或疑问、建议欢迎博客留言,Android Studio的教程暂且到这里结束了,相信大家基本的都已会使用了,还有其他技巧与操作靠大家自己摸索了,之后有时间也会在博客上整理下一些Tips之类的,欢迎大家关注。

    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2019-8-19 01:02 , Processed in 0.055153 second(s), 36 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表