一、AS3.0新增功能

此处略(自行Google )

官方文档


二、迁移后速度对比

gradle2.2 gradle3.0
首次 770s 260s
修改代码(一行) 291s 123s
修改代码(一行) 250s 140s
修改代码(一行) 252s 119s

迁移后3.0后速度提升接近50%左右;首次build使用6min左右,以后每次能控制在3min左右,当然不同项目可能存在差异但提升开发效率一定是肯定的


三、迁移步骤

  1. 下载最新官方AndroidStudio3.0并完成安装

  2. 修改gradle-wrapper.properties

    distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip
  3. 修改根目录build.gradle

    buildscript {repositories {google()//add}dependencies {classpath 'com.android.tools.build:gradle:3.0.1'//update
    }allprojects {repositories {//addmaven {url 'https://maven.google.com'}}
    }
  4. 修改根目录gradle.properties

    可以在项目根目录的gradle.properties中添加如下代码,这样可以统一项目中各Module的使用版本属性

    //as3.0默认开启aapt2功能用以提高构建速度,但目前貌似兼容不好,会有错误,此处关闭该功能
    android.enableAapt2=falseMIN_SDK_VERSION = 14
    COMPILE_SDK_VERSION = 23
    TARGET_SDK_VERSION = 21
    //AndroidStudio3.0以上版本的BuildToolsVersion至少是26.0.2以上
    BUILD_TOOLS_VERSION = 26.0.2

    其他个module的build.gradle文件中可以这样引用其变量

    android {compileSdkVersion COMPILE_SDK_VERSION.toInteger()buildToolsVersion BUILD_TOOLS_VERSION.toString()defaultConfig {minSdkVersion MIN_SDK_VERSION.toInteger()targetSdkVersion TARGET_SDK_VERSION.toInteger()}
    }
  5. 注释掉所有build.gradle中enforceUniquePackageName=false

    enforceUniquePackageName在gradle4.1中性已被弃用会编译报错

  6. 去掉build.gradle中可能存在的apply plugin: ‘com.neenbedankt.android-apt’;将apt修饰符调整为annotationProcessor
    eg:

    apply plugin: 'com.neenbedankt.android-apt'//删除apt "com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}"//将apt修饰符调整为annotationProcessor
  7. 在混淆文件(proguard-project.txt)中注释掉所有-libraryjars代码
    新版本中AS默认已对其jars做非混淆处理了,不用重复声明

  8. 修改app的build.gradle

        android{flavorDimensions "tier" //addproductFlavors {xiaomi{dimeension 'tier'}...}applicationVariants.all { variant ->//统一输出apk路径variant.getPackageApplication().outputDirectory=new File(project.buildDir.absolutePath+"/outputs/apk")variant.outputs.all {//修改App文件名称outputFileName = "${variant.name}-${variant.versionName}.apk"}}
    }task myTask << {xxx
    }//<<写法已不建议使用,需修改为如下
    task myTask  {doLast{xxx}
    }
  9. 修改Fragment
    所有的Fragment必须提供无参构造器,传参可以通过调用setArgments(Bundle b)来实现;在有参构造器加上@SuppressLint(“ValidFragment”)注解,避免打release版本失败

  10. 自定义动画xml文件需要放到正确文件目录
    属性动画xml应放到animator目录否则release版本会构建失败

  11. getSystemService的写法
    Activity.getSystemService需要修改成getApplicationContext.getSystemService否则在Android N版本以下会有内存泄漏存在

  12. freeline对as3.0不支持强制使用会报错,只能等待阿里升级了

至此项目中隐含的构建失败风险因子已被移除,在终端进入项目根目录执行

./gradlew assembleDebug //for mac 首次会现在gradle4.1版本以及相关库耐心等待即可

四、依赖配置关键字

implementation

  • C模块的类只暴露给A,APP无法直接引用
  • C中的drawable、layout、string目录可以直接被APP引用
  • 修改C,只会导致C本身以及直接依赖的A重新编译
  • 使用implementation能够加快gradle build

compile

  • C接口可暴露给任意Module,APP可以跨层引用C接口(类)
  • 修改C会导致C以及所有直接或间接依赖的Module重新编译
  • 拖慢gradle build

总结

compile关键字已不建议使用,可以使用新关键字api直接替换(compile==api);但我们原则上是优先使用implementation关键字替换,如果有问题再考虑使用api替换

以上只是本人在自己项目迁移至AS3.0过程中遇到的问题及其解决方法,后续会继续补充!

迁移至Android3.0遇到一些问题相关推荐

  1. Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)

    Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项 参考:https://blog.csdn.net/weixin_40475396/article/detail ...

  2. mysql为什么直接8.0_为什么要迁移到MySQL8.0?

    原标题:为什么要迁移到MySQL8.0? 来自公众号:老叶茶馆,作者:lefred,翻译:徐晨亮 原文链接:https://lefred.be/content/replace-mariadb-10-3 ...

  3. tensorflow1.0代码迁移到2.0官方指导

    https://www.tensorflow.org/guide/migrate 解决源代码中tensorflow版本过低问题(tensorflow1.x代码迁移到2.0) 原创风一样的rain 最后 ...

  4. 从 Vuex 0.6.x 迁移到 1.0

    从 Vuex 0.6.x 迁移到 1.0 Vuex 2.0 已经发布了,但是这份指南只涵盖迁移到 1.0?这是打错了吗?此外,似乎 Vuex 1.0 和 2.0 也同时发布.这是怎么回事?我该用哪一个 ...

  5. android 5.0新增 ui 控件,android3.0新增ui控件示例说明.doc

    android3.0新增ui控件示例说明 Android3.0新增UI控件 AdapterViewAnimator控件 AdapterViewAnimator(堆View),已知子类有AdapterV ...

  6. mongodb从2.6迁移到3.0过程

    首发于 搞起博客 总共有这么几个问题需要解决: 1. mongodb3.0版本的二进制包 1. wiredTiger引擎的配置 1. 数据的迁移 1. 权限 mongodb3.0的二进制包 这个就不用 ...

  7. 【MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记】

    MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记录-1 - likingzi - 博客园 MySQL5.7版本单节点大数据量迁移到PXC8.0版本集群全记录-2 - likingzi ...

  8. 体验VMware Converter Client 6.2与Veeam BR 10迁移ESXi 6.0 vm到vCenter 6.7 u3

    体验VMware Converter Client 6.2与Veeam BR 10迁移ESXi 6.0 vm到vCenter 6.7 u3 https://www.charflower.com/?p= ...

  9. android+平板+输入法,搜狗推首款Android3.0平板电脑输入法

    搜狗推首款Android3.0平板电脑输入法 2011年04月12日 12:19作者:厂商投稿编辑:孙莹莹文章出处:泡泡网原创 分享 搜狗率先推出首款完美支持Android 3.0平板专用版中文输入法 ...

最新文章

  1. 计算两个时间的间隔时间是多少
  2. pytorch函数整理
  3. 获取列表中包含的元素数 在C#中
  4. mysql manage keys_相传mysql 5.5 对于非聚集索引增删有很大的改善… 你信吗?
  5. webkit内核 css,webkit内核
  6. MVC4 下DropDownList使用方法
  7. 计算机网络系统组播功能_全国计算机等级考试四级计算机网络考试大纲(最新版2018年版)...
  8. 从U盘安装windows/linux操作系统
  9. 【C++】STL--常用算法
  10. linux发邮件权限,Linux通过命令行发邮件的步骤
  11. 21天学通python 第2版_21天学通Python(第2版)
  12. U盘安装CentOS系统详细教程
  13. 强化学习最强仿真平台--MuJoCo官方文档解读-Introduction
  14. VS与SQL、SSMS的安装,以及官方示例数据AdventureWorks2017的安装
  15. 目的网络、子网掩码、下一跳例子
  16. 多元逻辑回归与多元回归区别_避免被跟踪浏览多元宇宙
  17. 题解 P4147 【玉蟾宫】
  18. Django的Forms.py
  19. pytorch(9)-- 利用resnet18使cifa10数据集达到95%准确率
  20. strtok strtok_s strsep

热门文章

  1. python remove函数_python中remove函数的用法是什么?
  2. Java使用Proxy和CGLib实现动态代理
  3. 今日arXiv精选 | 18篇近期值得关注的Transformer工作
  4. AAAI 2021 | 上海交大提出基于有监督解耦的信息瓶颈算法
  5. TIP 2019开源论文:基于深度学习的HEVC多帧环路滤波方法
  6. 变分自编码器VAE:这样做为什么能成?
  7. 在pytorch中自定义dataset读取数据2021-1-8学习笔记
  8. web第五章 json
  9. Java软件开发:自定义MyBatis持久层框架
  10. h5页面禁止复制_网页禁止鼠标右键禁止全选复制粘贴的方法