gradle配置项

  1. compileSdkVersion

    用哪个 Android SDK 版本编译你的应用。因此我们强烈推荐总是使用最新的 SDK 进行编译。在现有代码上使用新的编译检查可以获得很多好处,避免新弃用的 API ,并且为使用新的 API 做好准备。
  2. minSdkVersion

    是应用可以运行的最低要求,也是各大Android应用商店用来判断用户设备是否可以安装某个应用的标志之一
  3. targetSdkVersion

    targetSdkVersion 是 Android 提供向前兼容的主要依据
targetSdkVersion < 平台的API级别 向前兼容举个栗子:targetSdkVersion==23(6.0),当前设备Android版本7.0,运行程序时用6.0那一套接口。接口:API接口
targetSdkVersion = 平台的API级别 不启用兼容性
targetSdkVersion > 平台的API级别 举个栗子:targetSdkVersion==23(6.0),当前设备Android版本是 5.0 ,运行程序 用的是5.0那套接口。设备根本到不了6.0

是不是意味着targetSdkVersion越低越好?

  1. 使用低版本API的其中一个不足,显示的效果比较OUT,提供的可用的接口或类比较少
  2. 高版本API会针对低版本存在的问题进行改进和完善,摈弃一下不用的类或接口,新增一些方法或属性,如果你使用的方法是在某个API被另一个方法代替的话,你可能就得在代码中区分APP是运行在哪个版本的Android系统
  3. 应用平台对targetSdkVersion有要求

minSdkVersion <= targetSdkVersion <= compileSdkVersion

andorid 5.0 新特性

  1. Material Design
  2. 支持64位ART虚拟机。
  3. Overview 多任务视窗。
  4. RecyclerView
  5. 卡片CardView
  6. Palette是一个可以从图片(Bitmap)中提取颜色的帮助类,可以使UI更加美观,根据图片动态的显示相应的颜色

android 5.0适配

  1. 启动服务,不支持隐式调用的问题

    解决方案

    1. 使用action调用,必须指定包名启动(判断当前当前系统版本)
    2. ComponentName 传入包名和类名,必须是完整类名路径。
  2. android5.0 getRunningTasks 和getRunningAppProcesses(仅返回当前应用包名)失效

    解决方案

    1. 第一种办法,用 UsageStatsManager,需要权限,且只针对系统应用有效,而且要打开设置页面。
    2. 第二种,不需要权限,外国的一个开源项目:https://github.com/jaredrummler/AndroidProcesses(Android7.0后不生效)
  3. backgroundTint属性只能在5.0以上的api中调用

    解决方案

    1. 我们可以新建一个values-v21文件夹,这个里面声明的属性会在api21以上的机器上优先于values文件夹中执行
  4. Android API 21(5.0)引入了一个Drawable的子类VectorDrawable

    解决方案(https://www.jianshu.com/p/0972a0d290e9

    1. minSdkVersion<21:如果想要渲染矢量图的话必须在app模块的build.gralde文件里添加一行代码:

       defaultConfig {
      vectorDrawables.useSupportLibrary = true
      }
    2. 在Application或者Activity上加上AppCompateDelegate开启CompatVectorFromResources支持

    3. Button,TextView,应用矢量图,保险的是先把矢量图转为selector,然后selector代替矢量图使用

  5. Android5.0上 WebView中Http和Https混合问题

    解决方案

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    }
  6. WebView cookie 存储问题

     public static void syncCookie(String url, String key) {
    CookieManager cookieManager = CookieManager.getInstance();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    cookieManager.removeSessionCookies(null);
    cookieManager.flush();
    } else {
    cookieManager.removeSessionCookie();
    CookieSyncManager.getInstance().sync();
    }
    cookieManager.setAcceptCookie(true);
    cookieManager.setCookie(url, key);
    }
  7. JobScheduler和JobService是安卓在api 21中增加的接口(保活),功能更强的闹钟


Android 6.0 适配及新特性

  1. 运行时权限,请务必在运行时检查和请求权限

    1. Normal Premission:普通权限

    2. Dangerous Permission/Group: 危险权限/组

      android.permission.READ_CALENDAR允许程序读取用户日历数据

      android.permission.WRITE_CALENDAR允许一个程序写入但不读取用户日历数据

      android.permission.CAMERA,允许访问摄像头进行拍照

      android.permission.READ_CONTACTS允许程序读取用户联系人数据

      android.permission.WRITE_CONTACTS允许程序写入但不读取用户联系人数据

      android.permission.GET_ACCOUNTS访问一个帐户列表在Accounts Service中

      android.permission.ACCESS_FINE_LOCATION允许一个程序访问精良位置(如GPS)

      android.permission.ACCESS_COARSE_LOCATION允许一个程序访问CellID或WiFi热点来获取粗略的位置

      android.permission.RECORD_AUDIO允许程序录制音频

      android.permission.CALL_PHONE允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认

      android.permission.READ_PHONE_STATE 访问电话状态

      android.permission.READ_CALL_LOG  查看电话日志

      android.permission.WRITE_CALL_LOG写入电话日志

      android.permission.ADD_VOICEMAIL  允许应用程序添加系统中的语音邮件

      android.permission.USE_SIP  允许程序使用SIP视频服务

      android.permission.PROCESS_OUTGOING_CALLS   允许应用程序监视、修改、忽略拨出的电话

      android.permission.BODY_SENSORS  允许该应用存取监测您身体状况的传感器所收集的数据,例如您的心率

      android.permission.SEND_SMS允许程序发送SMS短信

      android.permission.RECEIVE_SMS允许程序监控一个将收到短信息,记录或处理

      android.permission.READ_SMS允许程序读取短信息

      android.permission.RECEIVE_WAP_PUSH允许程序监控将收到WAP PUSH信息

      android.permission.RECEIVE_MMS允许一个程序监控将收到MMS彩信,记录或处理

      android.permission.WRITE_EXTERNAL_STORAGE   允许程序写入外部存储,如SD卡上写文件

      android.permission.READ_EXTERNAL_STORAGE   访问您设备上的照片、媒体内容和文件

  2. 取消支持 Apache HTTP

    解决方案:

    android {

    useLibrary 'org.apache.http.legacy'

    }

  3. BoringSSL

    请勿链接到并非 NDK API 组成部分的加密库,如 libcrypto.so 和 libssl.so

  4. 硬件标识符访问权

    1. WifiInfo.getMacAddress() 方法和 BluetoothAdapter.getAddress() 方法现在会返回常量值 02:00:00:00:00:00。
    2. 现在想访问硬件标识,如:WiFi和蓝牙,必须要有 ACCESS_FINE_LOCATION或者ACCESS_COARSE_LOCATION权限

      WifiManager.getScanResults()

      BluetoothDevice.ACTION_FOUND

      BluetoothLeScanner.startScan()
  5. AudioManager类 不再支持直接设置音量或将特定音频流静音

    1. setStreamSolo() 方法已弃用,您应该改为调用 requestAudioFocus() 方法。
    2. setStreamMute() 方法也已弃用,请改为调用 adjustStreamVolume() 方法并传入方向值 ADJUST_MUTE 或 ADJUST_UNMUTE
  6. 相机服务变更

    1. 相机服务中共享资源的访问模式已从之前的“先到先得”访问模式更改为高优先级进程优先的访问模式
  7. dlopen failed: "has text relocations"

    1. 解决方案一:将targetSdkVersion 修改为<23
    2. 解决方案二: https://wiki.gentoo.org/wiki/Hardened/Textrels_Guide 通过scanelf / objdump定位存在TEXTREL问题的文件, 以及关键代码在文件中的偏移量, 然后根据偏移量对应的特征 (函数名 / hard code的绝对地址等), 定位到代码所在.
    3. 在mk脚本中, 对LOCAL_CFLAGS, 增加-fPIC参数
  8. 电源管理

    在原有的电源管理的基础上加入了两种新的状态:

    1. App Standby—应用待机状态
    2. Doze 系统休眠状态
  9. 规范化App Link (应用程序链接)

  10. 指纹识别(统一API)

Android5.0和Android6.0适配的更多相关文章

  1. Android app 在线更新那点事儿(适配Android6.0、7.0、8.0)

    一.前言 app在线更新是一个比较常见需求,新版本发布时,用户进入我们的app,就会弹出更新提示框,第一时间更新新版本app.在线更新分为以下几个步骤: 1, 通过接口获取线上版本号,versionC ...

  2. android6.0 适配的问题——activity销毁的问题

    1.最近我去运行我们公司所开发的APP,发现出现很多问题,就是从前一个页面跳到另外一个页面后,前一个页面会被销毁. 正常来说,activity跳转过程是这样: A: 存在intent +setActi ...

  3. Android教程 -05 Android6.0权限的管理

    视频为本篇博客知识的讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 上篇文章我们讲解了通过隐式意图拨打电话,在AndroidManifest.xml文件中添加了权限 <uses-permis ...

  4. Android6.0 init 深入分析

    之前写过一篇关于android5.0 init的介绍,这篇博客是介绍android6.0init,之前有的代码介绍不详细.而且分析 解析init.rc那块代码也没有结合init.rc介绍. 一. ma ...

  5. Android6.0以上关于RecyclerView显是不全的问题

    Android6.0以上关于RecyclerView显是不全的问题 需求描述 适配的时候发现Android 6.0以上,RecyclerView显示不全,以下是没有问题的.这个时候查看布局文件,可以看 ...

  6. 高通 NXP NFC(PN547PN548) 移植流程 android6.0

    一.驱动部分 首先向NXP 的 fae要android 6.0 bring up的代码,如:NFC_NCIHALx_AR0F.4.3.0_M_NoSE 结构目录如下: 1. 添加驱动文件 高通平台需使 ...

  7. 说说Android6.0动态申请权限的那些坑

    白天在做SDK23版本的适配,遇到了不少坑,现在抽空记下来,以此为戒. 首先要知道哪些坑,就得先了解一些定义和基本使用方式. 那么先介绍一下动态申请的权限分组情况. 下面的权限组是由谷歌官方定义的,目 ...

  8. 【Android】Android6.0读取通话记录

    需求:读取通话记录,然后列表显示,每条记录的数据包括姓名.号码.类型(来电.去电.未接,字体颜色分别为绿.蓝.红),然后长按条目弹出一个列表弹窗,显示[复制号码到拨号盘].[发短信].[打电话]. 先 ...

  9. imx6 Android6.0.1 init.rc解析

    1. 概述 1.1 概述 之前分析过android5的init.rc,不过还是不够仔细,现在来看看android6的,多的就不写了,只写关键点 忘记一些基本概念可以先看看之前的笔记: Android5 ...

随机推荐

  1. 【WPF学习】第十三章 理解路由事件

    每个.NET开发人员都熟悉“事件”的思想——当有意义的事情发生时,由对象(如WPF元素)发送的用于通知代码的消息.WPF通过事件路由(event routing)的概念增强了.NET事件模型.事件路由 ...

  2. 最近面试 有人问 sqlite 用过么 sqlite 不是 嵌入式的 开发 么 难道最近还 web开发 了?

    找了一个 sqlite expert 安装了一下

  3. c#数字图像处理(八)图像平移

    使图像沿水平方向和垂直方向移动 /// <summary> /// 图像平移 /// </summary> private void translation_Click(obj ...

  4. Django orm常用字段和字段参数

    1.Object Relational Mapping(ORM) 1.1ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象 ...

  5. SqlServer 利用游标批量更新数据

    SqlServer 利用游标批量更新数据 Intro 游标在有时候会很有用,在更新一部分不多的数据时,可以很方便的更新数据,不需要再写一个小工具来做了,直接写 SQL 就可以了 Sample 下面来看 ...

  6. 暑假第三周总结(学习HDFS操作方法)

    本周由于自己出去玩,以及家里的各种事也没好好看书,就对HDFS的一些常用的shell命令进行了学习与应用,观看了林子雨老师关于HDFS的视频,对HDFS的一些存储的原理.规则进行了一定的了解.对uba ...

  7. hdu 1159求最长公共子序列

    题目描述:给出两个字符串,求两个字符串的公共子序列(不是公共子串,不要求连续,但要符合在原字符串中的顺序) in: abcfbc abfcab programming contest abcd mnp ...

  8. 关于Icon,Image,ImageIcon的简单的对比参考

    Icon: Icon位于javax.swing包中,它是一个接口 public interface Icon,介绍为:一个小的固定大小的图片,通常用于装饰组件 有三个方法: int getIconHe ...

  9. Codeforces 977D Divide by three, multiply by two(拓扑排序)

      Polycarp likes to play with numbers. He takes some integer number xx, writes it down on the board, ...

  10. python练习——第2题

    原GitHub地址:https://github.com/Yixiaohan/show-me-the-code 题目:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数 ...