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中
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