迁移至Android3.0遇到一些问题
一、AS3.0新增功能
此處略(自行Google )
官方文檔
二、遷移后速度對比
| 首次 | 770s | 260s |
| 修改代碼(一行) | 291s | 123s |
| 修改代碼(一行) | 250s | 140s |
| 修改代碼(一行) | 252s | 119s |
遷移后3.0后速度提升接近50%左右;首次build使用6min左右,以后每次能控制在3min左右,當然不同項目可能存在差異但提升開發效率一定是肯定的
三、遷移步驟
下載最新官方AndroidStudio3.0并完成安裝
修改gradle-wrapper.properties
distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip修改根目錄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'}} }修改根目錄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()} }注釋掉所有build.gradle中enforceUniquePackageName=false
enforceUniquePackageName在gradle4.1中性已被棄用會編譯報錯
去掉build.gradle中可能存在的apply plugin: ‘com.neenbedankt.android-apt’;將apt修飾符調整為annotationProcessor
eg:
在混淆文件(proguard-project.txt)中注釋掉所有-libraryjars代碼
新版本中AS默認已對其jars做非混淆處理了,不用重復聲明
修改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} }修改Fragment
所有的Fragment必須提供無參構造器,傳參可以通過調用setArgments(Bundle b)來實現;在有參構造器加上@SuppressLint(“ValidFragment”)注解,避免打release版本失敗
自定義動畫xml文件需要放到正確文件目錄
屬性動畫xml應放到animator目錄否則release版本會構建失敗
getSystemService的寫法
Activity.getSystemService需要修改成getApplicationContext.getSystemService否則在Android N版本以下會有內存泄漏存在
至此項目中隱含的構建失敗風險因子已被移除,在終端進入項目根目錄執行
./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遇到一些问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android-带你从源码角度理解Sha
- 下一篇: Android-Multidex安装流程