美文网首页
targetSdk 28适配

targetSdk 28适配

作者: 游侠_6fb7 | 来源:发表于2020-03-30 16:13 被阅读0次
    升级配置

    1.编译的build tool版本
    build_tool_version=28.0.3
    compile_sdk_version=28
    min_sdk_version=16
    target_sdk_version=28
    2.gradle升级到5.1.1
    distributionUrl=https://services.gradle.org/distributions/gradle-5.1.1-all.zip
    3.升级gradle buildTools,由3.0.1升级到3.4.1(配置app bundle 至少3.4.0)
    'com.android.tools.build:gradle:3.4.1'

    升级遇到的问题

    1. java.io.IOException: Cleartext HTTP traffic to
    错误1: java.io.IOException: Cleartext HTTP traffic to 包名 not permitted
    原因分析:
    从Android 6.0开始引入了对Https的推荐支持,与以往不同,Android P的系统上面默认所有Http的请求都被阻止了。

    <application android:usesCleartextTraffic=["true" | "false"]>
    原本这个属性的默认值从true改变为false
    解决办法:
    AnroidManifest.xml中的application显示设置

    <application android:usesCleartextTraffic="true">
    更为根本的解决办法是修改应用程序中Http的请求为Https,当然这也需要服务端的支持。

    2.在8.0之后前台服务使用startForegroundService()启动
    错误2: 在8.0之后前台服务使用startForegroundService()启动,需要权限

    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

    3. android 8.0 报错StartForeground Bad Notification Error

    错误3:android 8.0 报错StartForeground Bad Notification Error 解决方法
    在android8.0后 需要给notification设置一个channelid

    public final static String channelName="cn.george.app";

    mNotificationManager.createNotificationChannel(
    new NotificationChannel(channelName,
    "Channel One",
    NotificationManager.IMPORTANCE_HIGH));

    NotificationCompat.Builder builder =
    new NotificationCompat.Builder(this,channelName)
    .setContent(remoteViews)
    .setSmallIcon(R.mipmap.pic);

    4.Only fullscreen opaque activities can request orientation

    错误4:Android 8.0.0错误:Only fullscreen opaque activities can request orientation
    原因:对activity的theme设置了

    <--这个属性true不能和这个Activity指定屏幕方向同时使用-->
    <item name="android:windowIsTranslucent">true</item>
    8.0.0源码中

    if (isTranslucentOrFloating) {
    throw new IllegalStateException(
    "Only fullscreen opaque activities can request orientation");
    }
    抛出了异常,会在8.0.0手机出现闪退,在8.0.0之后的版本8.0.1做了处理。
    解决办法,item改为

    如果非要使用这个属性true,那就不要指定屏幕的方向
    <item name="android:windowIsTranslucent">false</item>

    或者

    去掉

    android:screenOrientation="xx"
    5.android.support.v4.app.Fragment.setMenuVisibility(boolean)' on a null object reference

    错误5:android.support.v4.app.Fragment.setMenuVisibility(boolean)' on a null object reference
    android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(Unknown Source:23)
    原因:
    在api25的时候:

    @Override
    public void setPrimaryItem(ViewGroup container, int position, Object object) {
    Fragment fragment = (Fragment)object;
    if (fragment != mCurrentPrimaryItem) {
    if (mCurrentPrimaryItem != null) {
    mCurrentPrimaryItem.setMenuVisibility(false);
    mCurrentPrimaryItem.setUserVisibleHint(false);
    }
    if (fragment != null) {
    fragment.setMenuVisibility(true);
    fragment.setUserVisibleHint(true);
    }
    mCurrentPrimaryItem = fragment;
    }
    }
    在api28的时候

    public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
    this.setPrimaryItem((View)container, position, object);
    }
    发现28的时候object标记了@NoNull不能为null。则否则null异常。
    所以不能传null。

    Gradle build Tools升级问题

    1、item下面不能有元素值,如下:
    <item name="ad_holder" type="id"> 5 </item>
    在buildConfig中配置res value的值
    如果是第三方lib库中的
    可在自己工程的ids.xml中配置一个无子元素的item
    2、android.enableBuildCache=false 设置无效
    gradle buildTools 2.2.3中enableBuildCache可设置不利用缓存编译
    3.4.1中设置无效
    2.2.3中设置过后编译,build文件夹中会出现:
    /build/intermediates/bundles/default
    /build/intermediates/exploded-aar
    升级到3.4.1之后,以上两文件夹消失,只存在:
    /build/intermediates/packaged-classes/release
    引用的aar中拉取的maven仓库包都存在在~/.gradle/cache中

    相关文章

      网友评论

          本文标题:targetSdk 28适配

          本文链接:https://www.haomeiwen.com/subject/yayvuhtx.html