Gradle
classpath ‘com.android.tools.build:gradle:3.0.0’ |
官方默认搭配是 gradle 4.1,如果换成 4.2.1 正式版,速度将更快:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.2.1-all.zip |
因为 gradle 下载很慢,你可以选择百度网盘下载(我上传的,可以放心):
gradle-4.2.1-all.zip
http://pan.baidu.com/s/1mi22zMg
新的编译方式
原先的 compile
关键词现在变成了 api
,但一般情况下不应该使用 api
,因为 api
是会向外暴露你引用的依赖,这样会导致 gradle 编译时需要频繁遍历所有嵌套依赖是否有变更,影响编译速度。更推荐的是使用 implementation
替代原先的 compile
,implementation
和 api
的区别就是不会暴露引用的依赖。比如 A implementation
引用了 B,如果 B 引用了 C,那么 A 将无法间接引用 C,除非 A 自己也声明引用 C。
使用 implementation
是提升编译速度的关键。如果没有必要引用间接内容的话,应该尽量使用implementation
。
关于此有一篇写得比官方清楚很多的好文章:
https://stackoverflow.com/questions/44413952/gradle-implementation-vs-api-configuration
另外,原先的 provided
现在改名为 compileOnly
,并新增了 runtimeOnly
。
设置编译生成应用文件名称
Gradle 3.0 更改了设置编译生成应用文件名称的方式,新的方式和原先相比略为不同,但更简单直观:
示例:
applicationVariants.all { variant -> variant.outputs.all { def apkName = ‘AppName’ + ‘-‘ + variant.versionName if (!variant.flavorName.isEmpty()) { apkName += (‘-‘ + variant.flavorName) } outputFileName = apkName + ‘.apk’ } } |
启用 Java 8 支持
Gradle 带来了新的 Java 8 兼容方案 desugar,启用方式十分简单,只要在 gradle android
层次之下加入如下代码即可:
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } |
目前 desugar 兼容支持的内容有:
-
Lambda expressions
-
Method References
-
Type Annotations
-
Default and static interface methods
-
Repeating annotations
不支持 stream、function
禁用 desugar:
android.enableDesugar=false |
更多详情:https://developer.android.com/studio/write/java8-support.html
配置构建变体
flavor 配置有变,官方中文文档,很详细,见文档就是了:
https://developer.android.com/studio/build/build-variants.html?hl=zh-cn
AAPT2
AAPT2 将默认启用,如果遇到离奇的问题,可以尝试禁用,只要在 gradle.properties
中加入:
android.enableAapt2=false |
Support Library 26.1.0
-
Fragment and FragmentActivity (the base class for AppCompatActivity) now implement the LifecycleOwner interface from Architecture Components.
-
All instances of the findViewById() method now return T instead of View. This change has the following implications
-
FragmentManager and Fragment have an isStateSaved() method to allow querying whether or not a transaction will be allowed without state loss. This is especially useful to check when handling an onClick() event before executing any transaction.
-
Path motion is supported in AnimatedVectorDrawableCompat. Path motion allows one object animator to change two properties at the same time based on one path; the path is specified as android:pathData in the animator’s XML).
-
New FlingAnimation that supports animating with an initial velocity and smoothly slows down.、
-
Support libs v26 版本完美解决了 AppBarLayout$ScrollingViewBehavior fling 的问题,介绍和演示相关微博:http://weibo.com/2263023493/FkQscgdRt?from=page_1005052263023493_profile
-
ResourcesCompat.getFont allows loading font resources—including font-family XML—that may be used with TextView.setTypeface().
-
Downloadable fonts
-
Emoji compatibility library(19+)
-
Autosizing TextView
-
PreferenceDataStore now allows you to implement your own preferences storage, set with new methods in Preference and PreferenceManager.
其他
-
对 ConstraintLayout 编辑更好的支持,之前 ConstraintLayout XML 内容容易遇到一些属性值被破坏的情况,3.0 不再发生。
Lifecycle Arch
示例(相关微博:http://weibo.com/2263023493/Fmvia7Jqs?from=page_1005052263023493_profile ):
/**
* @author drakeet
*/public class UpdateDelegate implements LifecycleObserver, Callback { private final XxxActivity activity; private Call call; private UpdateDelegate(@NonNull XxxActivity activity) { this.activity = activity;
} public static <Owner extends XxxActivity & LifecycleOwner> void attach(@NonNull Owner owner) {
UpdateDelegate delegate = new UpdateDelegate(owner);
owner.getLifecycle().addObserver(delegate);
} (Lifecycle.Event.ON_START) public void onStart() {
call = Api.create().checkUpdate(this);
} (Lifecycle.Event.ON_STOP) public void onStop() { if (call != null) {
call.cancel();
}
}
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { try {
...
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
public void onFailure(@NonNull Call call, @NonNull IOException e) {}
}
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/android-studio-和-gradle-3-0-0-更新简明指南/