文章

Android P(28)升级注意点

Android P(28)升级注意点:

1、限制明文(http)传输

建议修改成https,如要支持http传输,则在配置文件AndroidManifest.xml中 的节点中加上:

android:usesCleartextTraffic="true"

例如:

1
2
3
4
5
6
7
8
9
10
<application xmlns:tools="http://schemas.android.com/tools"
    android:name=".SampleApplication"
    android:allowBackup="false"
    android:hardwareAccelerated="true"
    android:icon="@drawable/omt_sdk_icon"
    android:label="@string/app_name"
    android:usesCleartextTraffic="true"
    android:resizeableActivity="false"
    android:theme="@style/AppTheme"
    tools:replace="android:allowBackup">

如果application中有android:networkSecurityConfig=”@xml/network_security_config”,请在network_security_config.xml中,加上

1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

2、添加前台服务的权限

:配置文件AndroidManifest.xml中(备注:游戏中有接入google的下载服务代码,有在使用前台服务下载扩展包)

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

3、org.apache.http.legacy库

如有用到次库,则在配置文件AndroidManifest.xml中 </application> 中加上

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

例如:

1
2
3
4
5
6
7
8
9
10
11
12
<application xmlns:tools="http://schemas.android.com/tools"
    android:name=".SampleApplication"
    android:allowBackup="false"
    android:hardwareAccelerated="true"
    android:icon="@drawable/omt_sdk_icon"
    android:label="@string/app_name"
    android:usesCleartextTraffic="true"
    android:resizeableActivity="false"
    android:theme="@style/AppTheme"
    tools:replace="android:allowBackup">
    <uses-library android:name="org.apache.http.legacy" android:required="false" />
</application>

4、加密变更

3.1、不再支持 Android 安全加密文件

3.2、弃用Bouncy Castle

3.3、使用SecureRandom.getInstance(“SHA1PRNG”, “Crypto”)会发送NoSuchProviderException

3.4、Conscrypt实现更多算法参数(AES、DESEDE、OAEP、EC)

5、对使用非 SDK 接口的限制(黑名单和灰名单)

如果有反射调用私有函数,如果是黑名单或深灰名单,会发生NoSuchFieldException 和 NoSuchMethodException 之类的错误(一般是反射或jni访问某些hide的函数)。浅灰名单,不会崩溃,会输出一行日志:

Accessing hidden method Landroid/location/CountryDetector;->detectCountry()Landroid/location/Country; (light greylist, reflection),任然可使用,建议修改

6、执行 FLAG_ACTIVITY_NEW_TASK 要求

不能从非 Activity 环境中启动 Activity(例如:后台service、广播中),除非传递 Intent 标志 FLAG_ACTIVITY_NEW_TASK,如果尝试在不传递此标志的情况下启动 Activity,则该 Activity 不会启动,系统会在日志中输出一则消息

7、前台服务的应用

使用前台服务的应用必须请求 FOREGROUND_SERVICE 权限:android.permission.FOREGROUND_SERVICE

8、屏幕旋转变更,建议测试下屏幕旋转

Android P 对纵向旋转模式做出了重大变更。 纵向模式已重命名为旋转锁定,它会在自动屏幕旋转关闭时启用。

9、限制访问 Wi-Fi 位置和连接信息

如有用到访问wifi和连接信息比如:获取wifi的SSID,BSSID值,需要权限:ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION、CHANGE_WIFI_STATE,还需要用户开启位置开关

10、获取设备序列号的方法:Build.SERIAL移除

改为请求 READ_PHONE_STATE 权限,然后调用 getSerial()

Android O(26,27)限制行为

1、集合限制

当集合为空时,AbstractCollection.removeAll() 和 AbstractCollection.retainAll() 会引发 NullPointerException;

2、静态隐式广播限制

1、充电广播

2、XML上定义静态广播:使用action发广播,一定要加上setPackage()

3、后台服务限制

除了 前台(包括:具有可见 Activity、前台服务、其它前台应用bindservice、contentProvider到此应用),其它均为后台

4、提醒窗口限制

使用WindowManager添加View,使用了SYSTEM_ALERT_WINDOW权限,窗口类型:TYPE_PHONE、TYPE_PRIORITY_PHONE、TYPE_SYSTEM_ALERT、TYPE_SYSTEM_OVERLAY、TYPE_SYSTEM_ERROR等,则要使用TYPE_APPLICATION_OVERLAY窗口类型,才能其它应用和系统窗口上方显示定义的View

本文由作者按照 CC BY 4.0 进行授权