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. 基于 Lind.DDD 的 权限管理系统

    先起个头,在跟吧 表结构  12个表   ps: sxiaomais.blog.163.com/blog/static/31741203200811102630406/ 需要数据库 文件的 附件 权限 ...

  2. 在python开发工具PyCharm中搭建QtPy环境(详细)

    在python开发工具PyCharm中搭建QtPy环境(详细) 在Python的开发工具PyCharm中安装QtPy5(版本5):打开“File”——“Settings”——“Project Inte ...

  3. 痞子衡嵌入式:知名半导体MCU大厂软件开发C代码规范

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是飞思卡尔软件开发C语言编码规范. 2020鼠年春节是个漫长的假期,痞子衡在家百无聊赖,翻出了2016年10月1日(这个时间是痞子衡正式开始 ...

  4. Docker基础内容之镜像构建

    前言 Docker可以通过读取Dockerfile中的指令来自动构建图像.Dockerfile是一个文本文档,包含用户可以在命令行上调用的所有命令来组装一个图像.使用docker构建用户可以创建一个自 ...

  5. shiro 基础使用

    引 言 相关内容 : https://blog.csdn.net/superyayaya/article/details/94408805 在web 中, 不同角色的用户, 具有不同的访问权限, 有的 ...

  6. java web 项目中基础技术

    1. 选择版本控制器(git, svn) 2. 用户登录的时候, 你需要进行认证, 权限受理 可以使用 spring shiro 框架,进行上面的工作 3. 过滤器(filter),监听器(liste ...

  7. 外网通过frp进行windows远程文件共享

    需求 远程访问位于内网中的文件.例如,家里,公司内. 所需技术 frp windows文件共享 具有公网地址的服务器一台 实现过程 windows文件共享,首先自己在局域网内实现.这不是本文重点. 公 ...

  8. 理解RabbitMQ中的AMQP-0-9-1模型

    前提 之前有个打算在学习RabbitMQ之前,把AMQP详细阅读一次,挑出里面的重点内容.后来找了下RabbitMQ的官方文档,发现了有一篇文档专门介绍了RabbitMQ中实现的AMQP模型部分,于是 ...

  9. vue-particles做背景,鼠标动画粒子连线填坑(按钮没有点击响应)

    为了提高页面展示效果,登录界面内容比较单一的,粒子效果作为背景经常使用到,vue工程中利用vue-particles可以很简单的实现页面的粒子背景效果. 解决问题: 以背景方式显示 无法获取按钮焦点, ...

  10. 通过域名直接访问Linux服务器中的项目

    参考:https://blog.csdn.net/m0_37802616/article/details/87623077 https://blog.csdn.net/u013176571/artic ...