升级应用编译SDK23版本的总结

升级应用编译SDK23版本的总结_第1张图片
Android 6.0

在升级时, 调试使用命令: gradle clean; gradle build, 多次执行, 检验错误.

本文的合集已经编著成书,高级Android开发强化实战,欢迎各位读友的建议和指导。在京东即可购买:https://item.jd.com/12385680.html

升级应用编译SDK23版本的总结_第2张图片
Android

1. 替换Gradle

替换全部项目的Gradle配置, 使用版本号23.

repositories {
    mavenCentral()
    maven {
        url "http://maven.chunyu.mobi/content/groups/public/"
        credentials {
            username maven_user
            password maven_password
        }
    }
}

android {
    buildToolsVersion "23.0.2"
    compileSdkVersion 23

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 22
        
        // multidex
        multiDexEnabled true
    }
    
    useLibrary 'org.apache.http.legacy'

    // 支持Java1.7
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    
    // Java的注释冲突
    packagingOptions {
        exclude 'META-INF/services/javax.annotation.processing.Processor'
    }
}

dependencies {
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.android.support:support-v4:23.2.0'
    compile 'com.android.support:design:23.2.0'
}

2. 替换标注库

替换G7的注释库

compile 'me.chunyu.android:g7anno-core:0.1.4@jar'

compile 'me.chunyu.android:g7anno-core-v23:0.1.4@jar'

修改Fragment的getFragmentManager为getChildFragmentManager.


3. FloatMath删除

FloatMath库被删除, 替换为Math. 参考


4. Notification修改

Notification的setLatestEventInfo方法被删除, 需要替换.


5. abc_action_bar_default_height删除

替换ActionBar的高度为Android5.0属性, 即

android:layout_height="@dimen/abc_action_bar_default_height"

android:layout_height="?attr/actionBarSize"

位置: activity_volunteer_doctor_list.xml 和 activity_offline_clinic_list.xml


6. 腾讯和阿里的低版本不兼容

com.alipay.android.phone.mrpc.core.b
com.tencent.connect.avatar.b


7. GC的OOM问题

错误: java.lang.OutOfMemoryError: GC overhead limit exceeded
原因: GC的内存不够, 超出限制, 指定新的参数即可.
解决:

 android {
    dexOptions {
        incremental true
        javaMaxHeapSize "4g"
    }
}

8. 主dex的类过多

错误: com.android.dex.DexException: Too many classes in --main-dex-list, main dex capacity exceeded
参考
在build.gradle中添加

def patchKeepSpecs() {
    def taskClass = "com.android.build.gradle.internal.tasks.multidex.CreateManifestKeepList";
    def clazz = this.class.classLoader.loadClass(taskClass)
    def keepSpecsField = clazz.getDeclaredField("KEEP_SPECS")
    keepSpecsField.setAccessible(true)
    def keepSpecsMap = (Map) keepSpecsField.get(null)
    if (keepSpecsMap.remove("activity") != null) {
        println "KEEP_SPECS patched: removed 'activity' root"
    } else {
        println "Failed to patch KEEP_SPECS: no 'activity' root found"
    }
}

patchKeepSpecs()

9. ActionBar留白

升级以后, 项目使用ActionBar全部都无法全部显示了, 前后各有一处留白. 原因是新版本对ActionBar添加了额外属性, 控制边界, 需要设置AppBar的Styles.

    

contentInset分别表示前后的留白, 设置0dp则可以避免.

你可能感兴趣的:(升级应用编译SDK23版本的总结)