完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
Android Studio 相关功能介绍 文件夹组织视图 最常用的有 Project 和 Android 视图,前者按照项目文件树进行组织,后者是以 Gradle 构建文件作为核心进行组织:
Gradle 相关文件结构 让我们来观察一下Android Studio 中 Gradle 相关的结构: . ├── gradle │ └── wrapper //所使用的 Gradle 包装器配置 ├── .gradle //所使用 Gradle 版本 │ └── 2.8 ├── AsInDepth.iml ├── app //app module │ ├── app.iml │ ├── build │ ├── build.gradle //app module 的 build.gradle │ ├── libs │ ├── proguard-rules.pro │ └── src ├── build.gradle //项目 build.gradle,通常配置项目全局配置,如 repositories 和 dependencies ├── gradle.properties //项目属性文件,通常可以放置一些常量 ├── gradlew //Gradle 包装器可执行文件 ├── gradlew.bat //Gradle 包装器可执行文件(Windows) ├── lib //lib module │ ├── build │ ├── build.gradle //lib module 的 build.gradle │ ├── lib.iml │ ├── libs │ ├── proguard-rules.pro │ └── src ├── local.properties //项目的本地属性,通常是 sdk 所在位置 └── settings.gradle //项目总体设置,通常是配置项目中所有的 module Invalidate Cache Android Studio 会出现索引的问题,那可以从删除 cache 重建索引,File->Invalidate Caches/Restart Multiple Language Editor 多语言文字可以通过右击文件 Open Translation Editor,可以同时进行编辑,但是我发现如果把 strings.xml 改了别的名字,这个功能就不 work 了。 Gradle 相关功能介绍 Gradle View 点击红色三角运行按钮,其实是执行了 Gradle 的 一些列任务,如果你想分别执行一些任务,则可以从 Gradle View 里面查看:
命令行 工作区下方,有一个叫做 Terminal 的 tab,点击之后,会自动 cd 到当前 project 根目录下,可以输入如下命令来尝试下: ./gradlew build Windows 下应该是 gradlew.bat build,下面均以 Mac 为例,不再赘述可使用 help 参数来查看有哪些选项: ./gradlew --help 下面介绍一些重要的选项: 查看运行 log 有些时候,一个任务运行失败,只给出一个错误,没有给具体原因,你就需要查看更多信息,可以使用参数 --info 或者 --stacktrace: ./gradlew build --info 指定 module 或者 build.gradle Gradle 默认是当前目录下寻找 build.gradle 文件执行任务,这样执行 build 会使得整个 project 所有的 module 的 build 任务都会运行,浪费不必要的时间,可以指定 module (-p) 或者 build.gradle (-b)文件以缩小作用范围: ./gradlew -p app build Sync 正常情况下,修改了 build.gradle 文件,文件上方就会有一个 sync 的按钮,点击之后会重新构建整个 build.gradle。但是某些特殊情况,这个同步可能会失败。那就需要一个额外的触发。 方法有四: 再修改一下文件,便会再次出现 sync 按钮点击上方工作区的按钮 点击 Gradle View 中的同步按钮
命令行执行一次 build Build Variant 首先要了解两个概念: Build Type分为 debug 和 release,这个概念容易懂。 Product Flavor这个概念主要是为了满足如下需求:同一份代码要打多个包,例如收费 pay 和免费 free,逻辑上有一些小区别,又不想通过逻辑判断这种丑陋的方式。或者你要实现所谓多渠道打包。 Build Variant = Build Type x Product Flavor配置好了Build Type 和 Product Flavor 之后,Gradle 会生成若干个包,分别为: payDebug payRelease freeDebug freeRelease 配置实例
假设这两个版本的 App,有一个类 DiffBean 需要做大量的逻辑判断,则可以通过在 build.gradle 中配置 product flavor,在代码中添加两个与 main 平齐的文件夹, 把 DiffBean 从 main 中抽出来,分别放在两个文件夹中,只关注对应的逻辑即可。 关于 Product Flavor 中都能定义哪些属性,请参考 Android Gradle DSL。 Gradle 使用的仓库 要使用远程依赖,就得有个库的仓库,Gradle 支持 maven 仓库。这些库可以是公用的,例如 mavenCentral 或者 jcenter,也可以使用私有库。 笔者曾经上传过公用库到 mavenCentral 和 jcenter,前者的繁琐与难以管理,让人深恶痛绝。Android Studio 在0.8.0版本以后,将 jcenter 作为默认的 maven 库公用库来源。 私有库可以托管在任何一个能访问到的地方,可以托管在 bintray 上的私有空间,也可以是内网服务器上,甚至可以是本机磁盘上。 下面是本人使用的仓库的一个例子: allprojects { repositories { jcenter() mavenCentral() maven { url 'file:///Users/myusername/repo/' } } } 关于库,会在本系列的四篇会有更详细的叙述。 遇到的坑 笔者所在的项目的包已经发布到了 mavenCentral 和 jcenter,很多用户的在集成的时候,遇到问题,其中最经典的问题,便是下面的三个。 下载依赖库失败,报 peer not found 连接 jcenter 库默认使用 https 协议,出现这个错,多数情况下都是因为连接失败了,原因嘛,你懂的。 可以尝试将 jcenter 改成默认使用 http 连接: jcenter { url "http://jcenter.bintray.com/" } 下载不到特定的版本 Maven 和 Gradle 都会有一个缓存库,默认安装的情况下,是在用户根目录下的 .m2 或者 .gradle 文件夹中。 可以尝试删除里面的文件。例如将 Gradle 的 cache 文件删除: rm -rf ~/.gradle/caches/ 注意:这个操作可能会导致所有的远程库都需要重新下载,要三思后行。库重复冲突 笔者的包使用了 com.android.support:support-v4:19.0.0 包,可能用户的 App 也使用了这个包,就可能在编译进行代码合并到时候出类似的错: UNEXPECTED TOP-LEVEL EXCEPTION multiple dex files define Landroid/support/annotation/AniRes 这个时候,在 module 的 build.gradle 的 dependency 添加依赖时,加入 exclude 规则: compile ('com.bugtags.library:bugtags-lib:latest.integration') { exclude group: 'com.android.support', module: 'support-v4' } 后续引言 讲到这里,有些读者可能会遇到跟我当时开始使用 Gradle 一样的问题:遇到问题就 Stack Overflow,找到 workaround 了但不知道为什么,gradle 版本更新了,发现不 work 了,甚为惆怅。 究其原因,都是不理解基础。下面扼要勾勒个大概。 首先 Gradle 是一个构建平台,它使用的是 Groovy 语言。 Groovy是一种基于 Java 的语言,提供了更好的动态特性,可以使用闭包使得编程更灵活,很适合做脚本语言。 上面提到的 settings.gradle 和 build.gradle 在 Gradle 平台中,其实都是一个 Groovy 对象。 Gradle 通过插件(plugin)的方式来支持构建。插件是很多任务(task)的集合,task 中又包含了许多 action。 而例如 productFlavors 都是一个所谓的 DSL,插件都定义了很多的 DSL,我理解的所谓的 DSL 就是一个小语言规范用来处理一个特定的事情(大多情况下是配置)。Android 的插件的 DSL 文档在 Android Gradle DSL有说明。 理解了以上基础之后,你就会知其然,知其所以然了。 以上知识,下一篇将会详细介绍。敬请留意。 本文所使用的 demo 已经上传到了 github 中,可以参阅 embrace-android-studio-demo 参考文献 Android Studio OverviewAndroid Studio InstallationAndroid Gradle DSLAndroid New Build System |
|
相关推荐
|
|
205 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1253 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
848 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
853 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1073 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12013 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 05:28 , Processed in 0.562580 second(s), Total 65, Slave 48 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号