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

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


Android 6.0

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()



文/SpikeKing(简书作者)
原文链接:http://www.jianshu.com/p/1f66322dcb71
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值