android q_android 驱动 - CSDN
  • Android Q(10.0)版本新特性和兼容性适配

    万次阅读 热门讨论 2019-04-18 13:35:19
    北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了。Android Q 为开发者们带来了许多新功能,如折叠屏增强项、新网络连接 API、全新...

    北京时间2019年3月14日Google正式对外发布Android Q Beta 1及预览版SDK,这意味着安卓开发者们又即将迎来一年一度的新版本适配工作了。Android Q 为开发者们带来了许多新功能,如折叠屏增强项、新网络连接 API、全新的媒体解码器、摄像头新功能、NNAPI 扩展、Vulkan 1.1 图形支持等等。2019/4  Beta2版本发布 ,5月份将会正式发布,本文将带大家对Android Q变更和新特性的详细解读。

    还有一点值得Android开发者注意的事件,华为应用市场在3.26日发布了一则公告,要求华为市场上的App在2019年5月底前完成Android Q版本适配工作并自检通过,针对未适配或在Android Q版本体验欠佳的应用,华为应用市场将在Android Q版本机型上采取下架、不推荐更新或屏蔽策略。这一点还需要所有开发者注意了。以下是公告截图:

     同时华为4.2号的公告也需要开发者注意了:

    自2019年5月1日起,华为应用市场新上架应用应基于Android 8.0 (API等级26,即targetSdkVersion大于等于26)及以上开发。自2019年8月1日起,现有应用的更新应基于Android 8.0 (API等级26,即targetSdkVersion大于等于26)及以上开发。

    2019年5月1日后,未达到要求的新应用,华为应用市场将拒绝上架。2019年8月1日后,未达到要求的现有应用,华为应用市场将拒绝更新。如您的应用API等级小于26,请尽快完成应用的升级改造。

    本文将从三个角度介绍Android Q的重要部分的适配问题,也是大家开发适配过程中大概率会遇到的问题:

    1. Android Q 行为变更:所有应用 (不管targetSdk是多少,对所有跑在Q设备上的应用均有影响)

    2. Android Q 行为变更:以 Android Q 为目标平台的应用(targetSDK == Q 才有影响)

    3. 项目升级遇到的问题

     一、Android Q 行为变更:所有应用

    官方文档将这一部分内容独立于Q 行为变更:所有应用来介绍,是因为这一部分内容庞大且重要,其中最大的更新就是用户隐私权限变更。具体变更的权限如下:

                  权限                       受影响应用                 如何启用(影响范围)
    存储权限 访问和共享外部存储设备中的文件的应用 adb shell sm set-isolated-storage on(下文详述)
    定位权限 在后台时请求访问用户位置信息的应用 这种权限策略在 Android Q 上始终处于启用状态
    从后台启动 Activity 不需要用户互动就启动 Activity 的应用 关闭允许系统执行后台活动开发者选项即可启用限制
    设备标识符(deviceId) 访问设备序列号或 IMEI 的应用 在搭载 Android Q 的设备上安装应用
    无线扫描权限 使用 WLAN API 和 Bluetooth API 的应用 以 Android Q 为目标平台

    从后台启动Activity权限和无线扫描权限两种权限的变更影响较少 ,本文就不做介绍,详细可以查看请查阅官方文档:

    https://developer.android.com/preview/privacy/background-activity-starts

    从后台启动Activity权限变更仅针对与用户毫无交互就启动一个Activity的情况,(比如微信登陆授权)。

    本文将重点讲述存储权限,定位权限和设备标识符三种权限的变更与适配。

    1.用户存储权限的变更

    Android Q 在外部存储设备中为每个应用提供了一个“隔离存储沙盒”(例如 /sdcard)。任何其他应用都无法直接访问您应用的沙盒文件。由于文件是您应用的私有文件,因此您不再需要任何权限即可在外部存储设备中访问和保存自己的文件。此变更可让您更轻松地保证用户文件的隐私性,并有助于减少应用所需的权限数量。

    沙盒,简单而言就是应用专属文件夹,并且访问这个文件夹无需权限。谷歌官方推荐应用在沙盒内存储文件的地址为Context.getExternalFilesDir()下的文件夹。比如要存储一张图片,则应放在Context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)中

    以下将按访问的目标文件的地址介绍如何适配。

    1. 访问自己文件:Q中用更精细的媒体特定权限替换并取消了 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE权限,并且无需特定权限,应用即可访问自己沙盒中的文件。

    2. 访问系统媒体文件:Q中引入了一个新定义媒体文件的共享集合,如果要访问沙盒外的媒体共享文件,比如照片,音乐,视频等,需要申请新的媒体权限:READ_MEDIA_IMAGES,READ_MEDIA_VIDEO,READ_MEDIA_AUDIO,申请方法同原来的存储权限。

    3. 访问系统下载文件:对于系统下载文件夹的访问,暂时没做限制,但是,要访问其中其他应用的文件,必须允许用户使用系统的文件选择器应用来选择文件。

    4. 访问其他应用沙盒文件:如果你的应用需要使用其他应用在沙盒内创建的文件,请点击使用其他应用的文件,本文不做介绍。

    所以请判断当应用运行在Q平台上时,取消对READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE两个权限的申请。并替换为新的媒体特定权限。

    当满足以下每个条件时,将开启兼容模式,即不开启Q设备中的存储权限改动:

    1. 应用targetSDK<=P。

    2. 应用安装在从 Android P 升级到 Android Q 的设备上。

    但是当应用重新安装(更新)时,不会重新开启兼容模式,存储权限改动将生效。

    所以按官方文档所说,无论targetSDK是否为Q,必须对应用进行存储权限改动的适配。

    在测试中,当targetSDK<=P,在Q Beat1版上申请两个旧权限时会自动改成申请三个新权限,不会影响应用正常使用,但当targetSDK==Q时,申请旧权限将失败并影响应用正常使用。

    2.用户的定位权限的变更

    为了让用户更好地控制应用对位置信息的访问权限,Android Q 引入了新的位置权限 ACCESS_BACKGROUND_LOCATION

    与现有的 ACCESS_FINE_LOCATION 和 ACCESS_COARSE_LOCATION 权限不同,新权限仅会影响应用在后台运行时对位置信息的访问权。除非应用的某个 Activity 可见或应用正在运行前台服务,否则应用将被视为在后台运行。

    与iOS系统一样,Q中也加入了后台位置权限ACCESS_BACKGROUND_LOCATION,如果应用需要在后台时也获得用户位置(比如滴滴),就需要动态申请ACCESS_BACKGROUND_LOCATION权限。

    当然如果不需要的话,应用就无需任何改动,且谷歌会按照应用的targetSDK作出不同处理:

    targetSDK <= P 应用如果请求了ACCESS_FINE_LOCATION 或 ACCESS_COARSE_LOCATION权限,Q设备会自动帮你申请ACCESS_BACKGROUND_LOCATION权限

    3.设备唯一标识符的变更

    从 Android Q 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE 签名权限才能访问设备的不可重置标识符(包含 IMEI 和序列号)。

    许多用例不需要不可重置的设备标识符。如果您的应用没有该权限,但您仍尝试查询标识符的相关信息。会返回空值或报错。

    设备唯一标识符需要特别注意,原来的READ_PHONE_STATE权限已经不能获得IMEI和序列号,如果想在Q设备上通过使用以下代码获取设备的ID

    ((TelephonyManager)getActivity().getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId()

    则执行以上代码会返回空值(targetSDK<=P)或者报错(targetSDK==Q)。且官方所说的READ_PRIVILEGED_PHONE_STATE权限只提供给系统app,所以这个方法行不通了

    谷歌官方给予了设备唯一ID最佳做法,但是此方法给出的ID可变,可以按照具体需求具体解决。本文给出一个不变和基本不重复的UUID方法。

    public static String getUUID() {
    
      String serial = null;
    
      String m_szDevIDShort = "35" +
            Build.BOARD.length() % 10 + Build.BRAND.length() % 10 +
    
            Build.CPU_ABI.length() % 10 + Build.DEVICE.length() % 10 +
    
            Build.DISPLAY.length() % 10 + Build.HOST.length() % 10 +
    
            Build.ID.length() % 10 + Build.MANUFACTURER.length() % 10 +
    
            Build.MODEL.length() % 10 + Build.PRODUCT.length() % 10 +
    
            Build.TAGS.length() % 10 + Build.TYPE.length() % 10 +
    
            Build.USER.length() % 10; //13 位
    
      try {
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            serial = android.os.Build.getSerial();
          } else {
            serial = Build.SERIAL;
          }
          //API>=9 使用serial号
          return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
        } catch (Exception exception) {
        //serial需要一个初始化
        serial = "serial"; // 随便一个初始化
      }
        //使用硬件信息拼凑出来的15位号码
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    }

    虽然由于唯一标识符权限的更改会导致android.os.Build.getSerial()返回unknown,但是由于m_szDevIDShort是由硬件信息拼出来的,所以仍然保证了UUID的唯一性和持久性。

    经测试上述方法完全相同的手机有可能重复,网上还有其他方案比如androidID,但是androidID可能由于机型原因返回null,所以个人任务两种方法半斤八两。设备ID的获取一个版本比一个版本艰难,如果有好的方法欢迎指出。

    4.关于minSDK警告

    在 Android Q 中,当用户首次运行以 Android 6.0(API 级别 23)以下的版本为目标平台的任何应用时,Android平台会向用户发出警告。

    如果此应用要求用户授予权限,则系统会先向用户提供调整应用权限的机会,然后才会允许此应用首次运行。

    谷歌要求运行在Q设备上的应用targetSDK>=23,不然会向用户发出警告。

    二、Android Q 行为变更:以 Android Q 为目标平台的应用

    非 SDK 接口限制

    非SDK接口限制在Android P中就已提出,但是在Q中,被限制的接口的分类有较大变化。

    非SDK接口介绍

    为了确保应用稳定性和兼容性,Android 平台开始限制您的应用可在 Android 9(API 级别 28)中使用哪些非 SDK 接口。Android Q 包含更新后的受限非 SDK 接口列表(基于与 Android 开发者之间的协作以及最新的内部测试)。

    非SDK接口限制就是某些SDK中的私用方法,如private方法,你通过Java反射等方法获取并调用了。那么这些调用将在target>=P或target>=Q的设备上被限制使用,当你使用了这些方法后,会报错:

                                     获取方法                            报错信息
    Dalvik instruction referencing a field NoSuchFieldError thrown
    Dalvik instruction referencing a method NoSuchMethodError thrown
    Reflection via Class.getDeclaredField() or Class.getField() NoSuchFieldException thrown
    Reflection via Class.getDeclaredMethod(), Class.getMethod() NoSuchMethodException thrown
    Reflection via Class.getDeclaredFields(), Class.getFields() Non-SDK members not in results
    Reflection via Class.getDeclaredMethods(), Class.getMethods() Non-SDK members not in results
    JNI via env->GetFieldID() NULL returned, NoSuchFieldError thrown
    JNI via env->GetMethodID() NULL returned, NoSuchMethodError thrown

    非SDK接口查找

    如果您不确定自己的应用是否使用了非 SDK 接口,则可以测试该应用进行确认。当你调用了非SDK接口时,会有类似Accessing hidden XXX的日志:

    Accessing hidden field Landroid/os/Message;->flags:I (light greylist, JNI)

    但是一个大项目到底哪里使用了这些方法,靠review代码和看日志肯定是不现实的,谷歌官方也提供了官方检查器veridex用来检测一个apk中哪里使用了非SDK接口。veridex下载。https://android.googlesource.com/platform/prebuilts/runtime/+/master/appcompat,其中有windows,linux和mac版本,对应下载即可。下载解压后命令行cd到veridex目录下使用./appcompat.sh --dex-file=Q.apk即可自动扫描。Q.apk为包的绝对路径,如果包与veridex在相同目录下直接输入包文件名即可。扫描结果分为两部分,一部分为被调用的非SDK接口的位置,另一部分为非SDK接口数量统计。

    非SDK接口适配

    如果您的应用依赖于非 SDK 接口,则应该开始计划迁移到 SDK 替代方案。如果您无法为应用中的某项功能找到使用非 SDK 接口的替代方案,则应该请求新的公共 API。

    官方要求targetSDK>=P的应用不使用这些方法,并寻找其他的公共API去替代这些非SDK接口,如果找不到,则可以向谷歌申请,请求一个新的公共API https://developer.android.com/distribute/best-practices/develop/restrictions-non-sdk-interfaces#feature-request (一般不需要)。

    就我个人扫描并定位的结果来看,项目中使用非SDK接口大概率有以下两种情况:

    1. 在自定义View的过程中为了方便,使用反射修改某个参数。

    2. 三方SDK中使用了非SDK接口(这种情况比较多)。

    第一种是好解决的,毕竟是我们自己写的代码。第二种就头疼了,只能更新到最新的三方SDK版本,或者提工单、换库(也是整个适配过程中工作量最庞大的部分)。

     三、Android项目升级遇到的问题

    模拟器X86,项目中SO库为v7

    • 找到so库源代码,编译成x86

    • 如果so库只是某个功能点使用,对APP整体没大影响,就可以屏蔽特定so库功能或略过测试

    • 如果so库是项目核心库必须加载,也可使用腾讯云测,上面有谷歌亲儿子Q版本。腾讯云测有adb远程连接调试功能(我没成功过)。adb连不上也没关系,直接安装就行,云测上也可以直接看日志。

    • 至于inter的houdini我尝试研究过,理论上能安装在x86模拟器上让它编译v7的so库,但是由于关于houdini的介绍比较少也比较旧,建议大家时间不充裕的话就别研究了。

    Requires development platform Q but this is a release platform.

    由于目前Q是preview版,所以targetSDK==Q 的应用只能在Q设备上跑。

    INSTALL_FAILED_INVALID_APK: Failed to extract native libraries, res=-2

    这个错误是由于打包压缩so库时造成的,具体原因可见:https://issuetracker.google.com/issues/37045367

    在AndroidManifest.xml的application节点下加入android:extractNativeLibs="true"
    

    可能有人加了上面代码还是不行,在app/build.gradle中的defaultConfig节点下加入

    packagingOptions{ 
          doNotStrip "/armeabi/.so" doNotStrip "/armeabi-v7a/.so" doNotStrip "/x86/.so" }
    

    Didn't find class “org.apache.http.client.methods.HttpPost"

     

    在AndroidManifest.xml的application节点下加入

    <uses-library android:name="org.apache.http.legacy" android:required="false"/>
    

    如果你的项目没有适配过android O或P,那么你需要注意:

    1. android O的读取已安装应用权限(对应用内自动更新有影响)

    2. android P的默认禁止访问http的API

    这两个版本的适配问题本文就不做详述,大家可以查看网上详细的介绍。

    以上就是Android Q(10.0)版本新特性和兼容性适配,中间会遇到各种各样的坑,还是建议详细查看Google的官方文档。

    本文的参考文档:

    Android Q Beta开发者文档链接::https://developer.android.com/preview

    Android Q Beta镜像下载链接:https://developer.android.com/preview/download

    Android Q Beta 发布 blog:https://android-developers.googleblog.com/2019/03/introducing-android-q-beta.html

    非SDK接口:https://juejin.im/post/5afe50eef265da0b70262463

     

    展开全文
  • Android Q:安全与隐私

    2019-08-02 12:03:39
    Android Q是谷歌发布的第10代安卓操作系统,开发的三大主题是:创新、安全、隐私。本文主要介绍安卓Android Q引入的安全和隐私机制和策略。 隐私 隐私是开发Android Q过程中的首要考虑因素,目前用户对APP和手机...

    Android Q:安全与隐私

    Android Q是谷歌发布的第10代安卓操作系统,开发的三大主题是:创新、安全、隐私。本文主要介绍安卓Android Q引入的安全和隐私机制和策略。

    隐私

    隐私是开发Android Q过程中的首要考虑因素,目前用户对APP和手机收集和使用的信息的控制和透明是非常主要的。Android Q在跨平台改善隐私方面有明显的变化。

    注:开发者将需要检查新的安全特征并测试开发的APP。根据每个APP的核心功能、目标和其他因素,带来的影响是不同的。

    设备位置

    首先看一下设备位置。APP可以要求用户请求访问位置的权限,但是在新版本的Android Q中,用户会看到更多的选项来允许访问位置,如图1所示。用户可以授予APP全部位置数据的访问权限或运行时权限。PHP大马

    Android Q:安全与隐私

    图1

    Android Q中还引入了新的位置权限ACCESS_BACKGROUND_LOCATION,该权限运行app在后台访问位置信息,这样就增加了额外对位置的控制。

    Scoped storage

    除了位置意外,还引入了一个新的特征scoped storage来给与用户更多的安全。Android Q中仍然使用READ_EXTERNAL_STORAGE 和WRITE_EXTERNAL_STORAGE权限,但Android Q中的APP默认给外部存储filtered view 。

    这样的APP只能看到特定的目录和特定类型的媒体文件,而读写文件夹中的文件都不需要权限。开发者在设备存储中还可以有自己的空间,而无需要求特定的权限。

    注:文件如何包含在filtered view以及如何更新app以继续共享、访问、修改保存在外部存储设备上的文件参见https://developer.android.com/preview/privacy/scoped-storage#filtered-view

    从安全的角度来看,这是一个很有利的更新。可以阻止依赖授予敏感数据访问权限的恶意APP,因为用户之前只能看到一个对话框然后选yes,现在可以了解地更加详细。

    后台限制

    另一个重要的变化是对开发者从后台在没有用户交互的情况下启动活动有了限制。这一特性可以减少中断,并让用户对屏幕显示的内容有更多的控制。

    这一变化在运行Android Q系统的所有APP都生效。即使app有level 28或更低级的API,而且原来安装在Android 9的设备上,设备升级到Android Q后限制仍然是有效的。

    数据和ID

    为了防止被记录和追踪,从Android Q开始,谷歌要求app开发者在访问设备的IMEI和序列化等不可重置的id前要请求特定的权限READ_PRIVILEGED_PHONE_STATE。

    Android Q设备默认情况下会传输一个随机的MAC地址。虽然谷歌在Android 6.0中引入了MAC地址随机化功能,即智能手机在后台WiFi或蓝牙扫描过程中仍然中可以广播随机的MAC地址。需要注意的是,安全研究人员已经证明了使用随机的MAC地址也可以记录和追踪设备。

    无线网络限制

    Android Q中引入的另一个安全相关的特征就是app无法启用或关闭WiFi。WifiManager.setWifiEnabled()方法会返回false。

    目前Android Q用户会通过设置面版来启用或关闭WiFi,这是一个允许app来在app内向用户显示设置的API。

    为了保护用户的隐私,对WiFi为了列表的手动设备被限制在系统app和 device policy controllers (DPCs)中。给定的DPC可以是设备所有者也可能是配置文件所有者。

    权限

    Android Q修改了READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT和CAPTURE_SECURE_VIDEO_OUTPUT权限的范围。目前是signature-access,所以可以防止对设备屏幕内容的静默访问。

    Android Q:安全与隐私

    图2

    需要访问设备屏幕内容的APP需要使用 MediaProjection API。如果APP目标是Android 5.1(API level 22)及更低,在Android Q上首次运行时用户会看到一个权限请求,如图2所示。这样用户就可以取消或修改系统在安装app时所授予的权限。

    此外,Android Q中引入了新的权限ACTIVITY_RECOGNITION,app在检测用户的步数或对用户活动进行分类时需要请求该权限。这可以在设置的设备传感器数据中看到。天天好彩

    安全

    Android Pie中引入了BiometricPrompt API来帮助APP使用生物数据,包括面部、指纹和虹膜。为了保证用户的安全,Android Q 对该API进行了扩展以支持更多的用例,包括隐形和显性认证。

    首先说一下显性认证,用户必须要执行操作才能继续。比如按一下指纹传感器,或进行面部或虹膜认证,用户必须要点击一个按钮才能继续。所有大额支付都要通过显性认证。

    隐形认证不需要用户的额外操作。比如,sign-in和自动填充就是这样,在简单、不重要的交易上无需执行复杂的操作。

    Android Q还引入了对TLS 1.3的支持。与TLS 1.2相比,TLS 1.3建立的连接要快约40%。从安全的角度来看,TLS 1.3也更干净、错误率更低、更加可靠。从隐私的角度来看,TLS 1.3加密了握手数据来更好地保护参与方的身份。

    BiometricPrompt中还加入了一个新的特征就是在调用BiometricPrompt之前检查设备是否支持生物认证。这在app想要显示“enable biometric sign-in”或使用类似的登入页时非常有用。

    Adiantum是引入的存储加密机制,当你的手机落入他人之手时可以保护你的数据。Adiantum在密码学领域是一个创新,设计的目的就是保证设备在没有加速加密的情况下来确保所有的设备都进行加密并且使加密更加有效。在Android Q中,Adiantum成为安卓平台的一部分,Google也准备更新Android Compatibility Definition Document (CDD)来要求所有的新安卓设备使用其中严重允许的加密算法来进行加密。

    Beta 5

    Android Q Beta 1是今年3月13日发布,目前已经可以现在Beta 5版本。如果有用户想尝试Beta版本可以访问android.com/beta 页面来讲i按察设备是否在支持的列表中,并下载beta版。

    Android Q:安全与隐私

    Android 10 Q发布时间轴

    根据Android 10 Q发布时间轴,在今年3季度之前,还会有一个bata版本发布。开发者应该关注Android Q并开始学习其中引入的新的特征和API。

    还有一个问题就是Android Q到底会叫什么名字呢?以Q开头的候选名其实很少,包括

    · Qurabiya

    · Quindim

    · Queen of Puddings

    · Qottab

    · Quesito

    · Queijadinha

    · Quirks

    · Quince 

    展开全文
  • Android Q 不叫 Q,正式命名为 Android 10

    千次阅读 2019-08-24 15:28:04
    根据官方博文,谷歌已经公布了 Android Q 的名称,它并不像以前一样,以甜食命名,也不是以任何以字母 Q 开头来命名,而是简单称它为 Android 10。 该公司表示,正在改变其发布版本的命名方式。该公司写道: 这些...

     

    根据官方博文,谷歌已经公布了 Android Q 的名称,它并不像以前一样,以甜食命名,也不是以任何以字母 Q 开头来命名,而是简单称它为 Android 10。

    该公司表示,正在改变其发布版本的命名方式。该公司写道:

    这些年来,我们听到的很多反馈,我们的命名并不总是被全球社会中的每个人所理解。

    谷歌说,改变命名的实际原因并不是 Q 很难找到实际的甜点名称,而是甜点不是很具包容性,比如馅饼并不总是甜点,棒棒糖在某些地区很难发音。棉花糖在很多地方甚至都不算甜点。

    换句话说,以前的一些 Android 版本的名字虽然名字很有趣,但它们并不能与全部用户产生共鸣,该公司认为“是时候做出这种改变了”。

    谷歌表示它将在几周内正式发布,除了对 Android 命名做改动之外,Android 10 中还增加了新的功能,不只是在 5 月份的谷歌 I/O 上发布的内容。它更新了移动平台的标志,它将文本从绿色改为黑色,以便于阅读,转换字体,并使用特写的机器人,现在是一种新的绿色。

    Brand

     

    Bubbles

    正如下面的截图中所看到的,通过主动呼叫触发 Bubbles,一个小圆圈就会显示联系人的照片。在拖动 Bubbles 时,屏幕底部可以看到两个选项:Hide 和 End Call,只要将图标拖到任意一个选项都会触发该操作发生。点击一下 Bubbles,还会出现几个选项,比如启用扬声器或静音通话。

    Wi-Fi 和 QR Code

    Android 10 有一个新功能,允许您为 Wi-Fi 网络创建一个 QR 码,或者扫描一个 QR 码,就直接在设备的 Wi-Fi 设置中加入 Wi-Fi 网络。若要使用此新功能,需转到 Wi-Fi 设置,然后选择您的家庭网络,然后是共享按钮,上面有一个小 QR 码。这样避免了与人分享密码或询问别人密码的尴尬。

    Undo app removal

    使用 Android 10,在应用程序被删除几秒钟后,您还可以撤销更改,在屏幕底部找到“撤消”按钮,点击即可恢复应用程序。

    隐私设置

    Android 10,在设置应用程序有一个专门的隐私模块,打开它会显示应用程序对日历、位置、相机、联系人和麦克风等各种权限的要求,使找到和撤销特定应用程序的权限变得更加容易。

    通知控制

    选择 Alerting 将允许应用程序每一个新的通知发出声音,而 Silent 不会发出声音或手机振动。通过进入 Settings > Apps & notifications > Notifications.,可以进一步调整通知的行为。这种更改,使得只要长按,选择选项就可以设置完毕。

     

    展开全文
  • Android Q

    2019-05-17 11:26:55
    Android Q 前言 感觉还没怎么见过Android 9.0,10 都已经出来了,虽然只是测试版,但是提前了解下也是很有必要的,尤其对于我们开发者而言。新版本出来意味着适配工作又要搞起了,之前的华为开发者平台已经要求上架...

    Android Q

    前言

    感觉还没怎么见过Android 9.0,10 都已经出来了,虽然只是测试版,但是提前了解下也是很有必要的,尤其对于我们开发者而言。新版本出来意味着适配工作又要搞起了,之前的华为开发者平台已经要求上架的应用目标版本适配到Q
    https://developer.huawei.com/consumer/cn/notice/20190328
    下面主要介绍下Q的适配。
    官网:https://developer.android.google.cn/

    正文

    首先是下载Q所需要的工具及模拟器,我用AS看了一下,需要4.5G,算了,你们搞吧。本文完。
    需要注意的是,如果要编译Q,需要在应用的bulid.gradle中声明:

    • compileSdkVersion “android-Q”
    • buildToolsVersion “29.0.0 rc1”
    • targetSdkVersion “Q”

    官方提到的重大隐私变更包括一下几点:

    1. SCOPED STORAGE
      简单的说Q又修改了存储文件权限,现在Q上的每个应用都有自己一个独立的沙盒(存储区域),这个区域只有自己的应用可以访问,这个沙盒里面的文件随着应用被卸载而删除.

    我们可以直接访问而\color{red}{不再需要申请}READ_EXTERNAL_STRAGE和WRITE权限。

    官方推荐我们在外部存储文件的位置是Context.getExternalFilesDir(String type),type可以传Environment.DIRECTORY_IMAGES等类型,如果应用中没有这个文件夹,会自动创建,路径为/storage/emulated/0/Android/data/包名/files/Music,我们可以根据传入不同的type类型保存不同类型的文件。

    如果我们希望应用卸载的时候也保存这些文件,那么最好保存到公共文件夹下,如公共的照片,音乐,下载等。

    如果我们希望访问公共文件夹照片,视频,音乐中其他应用的文件,需要READ_MEDIA_IMAGES ,READ_MEDIA_VIDEO,READ_MEDIA_AUDIO 权限,具体根据文件类型定。

    如果希望访问公共文件夹下载中其他应用的文件,则必须通过系统的文件选择器来选择。通过ContentResolver.openFileDescriptor()之类的API来读取数据。

    1. DEVICE LOCATION
      Q限制了应用处于后台时获取位置信息的能力,这项行为在Q上是默认开启的。
      我们现在如果在Q上请求获取位置信息,会弹出选项:
      在使用中(仅限前台)
      始终(前台和后台)
      在这里插入图片描述

    Q中新增了ACCESS_BACKGROUND_LOCATION权限,这个权限只是用来在后台运行时访问,除非应用的某个 Activity 可见或应用正在运行前台服务,否则应用将被视为在后台运行。

    	<manifest>
          <!--允许获得精确的GPS定位-->
    	<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    	<!--允许获得粗略的基站网络定位-->
    	<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    	<!--允许后台获取位置-->
          <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
        </manifest>
    

    因此,要获取后台位置信息需要以下操作:
    开启前台服务。类型为 location\color{red}{location}

    	 <service
            android:name="MyNavigationService"
            android:foregroundServiceType="location" ... >
            ...
        </service>
    

    我们在获取位置信息之前需要判断是否已经开启了权限:

    val permissionAccessCoarseLocationApproved = ActivityCompat
            .checkSelfPermission(this, permission.ACCESS_COARSE_LOCATION) ==
            PackageManager.PERMISSION_GRANTED
    
        if (permissionAccessCoarseLocationApproved) {
           val backgroundLocationPermissionApproved = ActivityCompat
               .checkSelfPermission(this, permission.ACCESS_BACKGROUND_LOCATION) ==
               PackageManager.PERMISSION_GRANTED
    
           if (backgroundLocationPermissionApproved) {
           //前后台都可以获取位置信息,因此不需要开启前台服务
               // App can access location both in the foreground and in the background.
               // Start your service that doesn't have a foreground service type
               // defined.
           } else {
           //只能获取前台位置,展示对话框告诉用户必须始终获取位置信息才能正常工作,然后请求后台位置信息
               // App can only access location in the foreground. Display a dialog
               // warning the user that your app must have all-the-time access to
               // location in order to function properly. Then, request background
               // location.
               ActivityCompat.requestPermissions(this,
                   arrayOf(Manifest.permission.ACCESS_BACKGROUND_LOCATION),
                   your-permission-request-code
               )
           }
        } else {
        //没有任何位置信息权限,申请一下
           // App doesn't have access to the user's location at all. Make full request
           // for permission.
           ActivityCompat.requestPermissions(this,
               arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,
                       Manifest.permission.ACCESS_BACKGROUND_LOCATION),
               your-permission-request-code
           )
        }
        
    
    1. BACKGROUND APP STARTS
      Q针对从后台启动Activity做了限制,如果在没有和用户互动情况下启动Activity,则很可能会影响您的应用,比如一般App都用2s的启动页,如果在2s内切换到后台,此时就可认为是后台启动Activity,目前仅仅会toast提示,这项行为变更是只要安装在Q设备上都会生效。
    This background activity start from package-name will be blocked in future Q builds.
    

    目前限制为只有满足以下一个或多个条件才可以启动Activity:
    a.该应用具有可见窗口,例如在前台运行的 Activity。
    b.在前台运行的另一个应用会发送属于该应用的 PendingIntent。
    c.系统发送属于该应用的 PendingIntent
    d.系统向应用发送广播
    因此,为了避免这种情况发生,官方推荐我们通过创建通知提示用户,而不是直接打开Activity,当然,某些功能可能确实需要,比如来电,解决办法如下:

    -> 创建高优先级通知,使用全屏PendingIntent.如果使用全屏Intent,则 USEFULLSCREENINTENT\color{red}{需要申请USE_FULL_SCREEN_INTENT权限}
    ->通过\color{red}{开启前台服务}与通知相关联
    该功能默认是关闭的,如果要开启,需要到设置里面修改。

    val fullScreenIntent = Intent(this, CallActivity::class.java)
        val fullScreenPendingIntent = PendingIntent.getActivity(this, 0,
            fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT)
    
        val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
            .setSmallIcon(R.drawable.notification_icon)
            .setContentTitle("Incoming call")
            .setContentText("(919) 555-1234")
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setCategory(NotificationCompat.CATEGORY_CALL)
    
            // Use a full-screen intent only for the highest-priority alerts where you
            // have an associated activity that you would like to launch after the user
            // interacts with the notification. Also, if your app targets Android Q, you
            // need to request the USE_FULL_SCREEN_INTENT permission in order for the
            // platform to invoke this notification.
            .setFullScreenIntent(fullScreenPendingIntent, true)
    
        val incomingCallNotification = notificationBuilder.build()
    

    注意:应用无法通过前台服务让应用处于前台豁免该管控
    4. HARDWARE IDENTIFIES
    这项变更主要是对系统标识增加的几项限制,有助于保护用户的隐私。
    只要运行在Q上的应用:
    获取随机的MAC地址,通过调用getRandomizedMacAddress()获取特定网络的随机MAC地址。
    获取系统的MAC地址,通过调用getWifiMacAddress()检索实际硬件的MAC地址。
    如果需要访问设备网络状态,使用NetworkStatsManager 和 ConnectivityManager 类。
    获取IMEI和设备序列号:Q需要READ_PRIVILEGED_PHONE_STATE权限,低版本需要READ_PHONE_STATE,否则发生异常。
    5. LOCATION AND NETWORK
    这就用的不多了,但是依然是在Q 上运行的所有应用会产生影响。如:
    Q 上运行的应用无法启用或停用 WLAN,需要到设置面板。
    以Q为目标平台影响:
    应用无法使用 WLAN API、WLAN Aware API 或 Bluetooth API 中的多种方法,除非应用具有 ACCESS_FINE_LOCATION 权限。

    折叠屏

    除此之外,Q一个极为重要的变更就是支持可折叠屏,怕了怕了,这个适配对我们开发者而言感觉是相当困难啊。为了更好的适配可折叠屏,官网建议:

    1. 为了保证屏幕的展开和收缩时应用的连续性,我们应该及时的保存当前的状态和位置。
    2. 如果应用屏幕可支持大小调整,需要增加Activity属性resizeableActivity=true,这个好像在8.0就有了,如果设置false,则代表应用不支持屏幕大小调整,但是展开的情况下系统会调整到展开的合适位置。
    3. 这是目前Q的屏幕比例,如果不支持某些比率,可以通过 maxAspectRatio和minAspectRatio来指示应用可以处理的最高和最低比率,屏幕超出这些限制,则可能会处于兼容模式。在这里插入图片描述
    4. 在Q中,新增了 onTopResumedActivityChanged() 方法,可以监听当前Activity获取或者是失去topmost resumed position(最顶部显示的位置),我们可以在这个方法里对一些公用的资源进行处理。
    protected void onTopResumedActivityChanged(boolean topResumed) {
        if (topResumed) {
            // Top resumed activity
            // Can be a signal to re-acquire exclusive resources
        } else {
            // No longer the top resumed activity
        }
    }
    
    展开全文
  • Android Q 正式命名为 Android 10

    千次阅读 2019-08-23 18:02:20
    根据官方博文,谷歌已经公布了 Android Q 的名称,它并不是想以前一样,以甜食命名,也不是以任何以字母 Q 开头来命名,而是简单称它为 Android 10。 该公司表示,它正在改变其发布版本的命名方式,以推动更大程度的...
  • Android Q 适配,看这篇就妥了

    千次阅读 2019-06-05 03:04:53
    转载自公众号:刘望舒作者:吃猫猫的鱼地址:https://juejin.im/post/5cad5b7ce51d456e5a0728b01. 导读Android ...
  • Android QAndroid 10.0)系统新特性

    千次阅读 2019-02-28 01:25:33
    热文导读|点击标题阅读金九银十跳槽季如何进阶找到合适满意的工作?真实靠谱:百度的职级、T系列、薪资、及晋升潜规则北京互联网人寒冬求职记作者 | 程六金本文转载自:ht...
  • Android Q隐私权:权限变更 本文档介绍了权限模型的一些变更。这些变更有助于增强用户隐私。 其中一些变更会影响在Android Q上运行的所有应用,而其他变更仅会影响以Android Q为目标平台的应用。 影响所有应用的...
  • Android Q的全新特性与隐私权限

    万次阅读 2019-05-10 23:50:53
    在前几天的Google I/O 2019大会上,发布了Android Q版本(Android 10)。Android Q带来了许多新特性,也增强安全隐私保护,包括支持折叠屏、非SDK接口限制、共享内存、分区存储、系统二进制文件映射到只执行内存、WLAN...
  • Android Q隐私:更改相机和连接 本文档描述了访问摄像机和连接信息的几个限制。这些更改有助于保护用户的隐私。 其中一些更改会影响在Android Q上运行的所有应用,而其他更改仅会影响针对Android Q的应用。 影响...
  • 其中一些变更会影响在 Android Q 上运行的所有应用,而其他变更仅会影响以 Android Q 为目标平台的应用。 影响所有应用的变更 以下变更会影响在 Android Q 上运行的所有应用,即使这些应用以 Android 9(API 级别 ...
  • 适配Android Q上读取多媒体文件

    千次阅读 2019-08-16 19:11:19
    Android Q版本出来也有一段时间了,但是大部分我们都没有去适配过它,首选说一下Android Q版,最大的亮点集中在隐私安全和智能交互两方面,其中在隐私安全方面Android Q增加了外部存储策略变更、位置权限的后台访问...
  • Android Q分区存储权限变更及适配

    万次阅读 2019-06-30 11:18:17
    Android Q中引入了分区储存功能,在外部存储设备中为每个应用提供了一个“隔离存储沙盒”。其他应用无法直接访问应用的沙盒文件。由于文件是应用的私有文件,不再需要任何权限即可访问和保存自己的文件。此变更并...
  • androidQ系统新特性

    千次阅读 2019-05-15 18:24:38
    目录Android Q是什么Android Q发布日期Android Q新的特性1.黑暗模式2.桌面模式3.隐私增强4.超级锁定模式5.屏幕录制6.移除 Android Beam7.运营商锁定8.面部识别9.不允许从后台读取剪贴板信息10.降级应用程序更新11.新...
  • Android Q 适配详细操作

    千次阅读 2019-08-22 16:23:14
    升级Android Q 的两种情况, 1.API在28以下的未适配Android X 的项目适配Android Q。 2.已经适配Android X 的被应用市场平台要求项目适配Android Q。 思路就是,先适配Android X(适配过的跳过),再从Android X ...
  • AndroidQ(十)Android Q功能和API

    千次阅读 2019-04-28 17:14:37
    Android Q 功能和 API Android Q 为用户和开发者引入了强大的新功能。本文重点介绍面向开发者的新功能。 要了解新版 API,请阅读API 差异报告或访问Android API 参考。为醒目起见,将突出显示新版 API。此外,请...
  • Android Q 平台做了一些行为变更,这些变更可能会影响您的应用。以下行为变更仅影响以 Android Q 或更高版本为目标平台的应用。如果您的应用将targetSdkVersion设为“android-Q”或更高版本,则应修改您的应用以适当...
  • Android Q 测试版现已推出,可供尝鲜者和开发者试用下一个 Android 版本。 您可以通过以下任一种方式获得 Android Q 测试版: 在 Google Pixel 设备上以无线下载方式获取 Android Q 测试版(Pixel 3、Pixel 3 XL、...
  • Android Q(10.0)你想要知道的一切

    千次阅读 2019-03-25 11:17:41
    最新的Android Pie我们还没吃上,后继Android Q就已出现,那么我们先初步了解下Android Q。 首先Android Q将会何时发布呢?预计2019年3月为开发者预览构建发布公开测试版,预计Android Q开发者预览1(Android Q DP1...
  • Android Q 适配指南

    千次阅读 2019-11-28 09:19:32
    Android Q 适配 官方文档: https://developer.android.com/about/versions/10 在Android 10开始版本中,官方的改动较大,相应的开发者适配成本还是很高的。 这里按照2019.11.11 google android q workshop流程,...
1 2 3 4 5 ... 20
收藏数 69,441
精华内容 27,776
关键字:

android q