热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android开发分享Android5.0和Android6.0适配

gradle配置项1.compileSdkVersion用哪个AndroidSDK版本编译你的应用。因此我们强烈推荐总是使用最新的SDK进行编译。在现有代码上使用新的编译检查可以获

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
    解决方案()
    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)


推荐阅读
  • 本文介绍了一种通过设置主题(Theme)来实现快速启动的Android引导页,并详细说明了如何避免因不同屏幕分辨率导致的图片拉伸问题。 ... [详细]
  • 2023年,Android开发前景如何?25岁还能转行吗?
    近期,关于Android开发行业的讨论在多个平台上热度不减,许多人担忧其未来发展。本文将探讨当前Android开发市场的现状、薪资水平及职业选择建议。 ... [详细]
  • 本文详细介绍了如何在 Ubuntu 16.04 系统上配置 Qt 5.5 的交叉编译环境,特别针对 i.MX6 平台进行了优化设置。内容涵盖从基本的软件安装到高级配置的全过程。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 数据类型--char一、char1.1char占用2个字节char取值范围:【0~65535】char采用unicode编码方式char类型的字面量用单引号括起来char可以存储一 ... [详细]
  • 如何在PHP中安装Xdebug扩展
    本文介绍了如何从PECL下载并编译安装Xdebug扩展,以及如何配置PHP和PHPStorm以启用调试功能。 ... [详细]
  • Android与JUnit集成测试实践
    本文探讨了如何在Android项目中集成JUnit进行单元测试,并详细介绍了修改AndroidManifest.xml文件以支持测试的方法。 ... [详细]
  • 深入理解Java SE 8新特性:Lambda表达式与函数式编程
    本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ... [详细]
  • 在将 Android Studio 从 3.0 升级到 3.1 版本后,遇到项目无法正常编译的问题,具体错误信息为:org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:processDemoProductDebugResources'。 ... [详细]
  • 在Effective Java第三版中,建议在方法返回类型中优先考虑使用Collection而非Stream,以提高代码的灵活性和兼容性。 ... [详细]
  • 本文介绍了如何在Android应用中通过Intent调用其他应用的Activity,并提供了详细的代码示例和注意事项。 ... [详细]
  • 2023年最新Linux环境下Android开发环境搭建指南
    2023年最新Linux环境下Android开发环境搭建指南,帮助Android开发者在Linux系统上快速搭建开发环境,解决常见的配置问题。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 使用QT构建基础串口辅助工具
    本文详细介绍了如何利用QT框架创建一个简易的串口助手应用程序,包括项目的建立、界面设计与编程实现、运行测试以及最终的应用程序打包。 ... [详细]
author-avatar
mobiledu2502873927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有