# Android端M3升级TargetSDK Version 30的修改点和修改方法

# 影响

影响范围:影响所有对M3 Android端进行了定制开发并上架到小米、华为等应用商店的项目。

影响后果:如果未按要求进行SDK升级,将导致2024年1月定制开发的APP被小米、华为从应用商店下架。

所有IOS APP不受影响。

处理思路:修改APP的源码,将Android SDK升级到30或以上,同步修改升级后的影响点,确保升级后功能可用。

# 快速解决方案

Android SDK30适配代码已上架应用商城,完整代码已推送客开代码平台,有升级SDK需求的项目请通过标准流程从客开总部申请最新的源代码,参考修改记录做合并

M3 Android SDK30适配稳定版本:M3 4.5.9及更高版本

# 背景

接到华为和小米官方平台最新通知:因工信部要求和安全等相关问题,要求线上 APP 必须升级 Android 底层代码 Android Traget SDK Version 到 30 以上。并且华为要求必须在 2024年1月31日前完成,否则将下架 APP(后续其余平台可能也会跟进)。

依此规定,所有涉及上架到小米、华为应用商城的APP,都需要按照规范升级到Android Traget SDK Version 30或以上。致远M3 APP也同样需要遵守此规则,包括所有针对M3 Android进行了定制开发的项目(只影响上架应用商店的APP,不影响私有化)。

# 依据

工信部通知参见:关于侵害用户权益行为的APP(SDK)通报 (opens new window)

华为应用商店通知如下:

1702126436263.png

小米应用商店通知如下:

1702126453869.png

# 修改点

如下是在M3 Android 4.5.5版本基础上整理的修改点,请参考进行升级:

# 0. 修改targetSdkVersion号码为30

如下图,在android studio中全局搜索,找到对应配置文件,将后面的号码改为30

1702127614225.png

# 1.外勤签到语音无法保存

问题原因: 1.录制音频保存文件的时候需要访问手机存储 2.targetsdk30后强制执行分区存储,所以老的调用方法不能直接运行,需要申请管理所有文件的权限才行

修改方法: M3\src\main\java\org\apache\cordova\media\AudioPlayer.java文件中添加申请管理全部文件的权限,具体如下

1702127673073.png

运行效果: 在加上以上代码之后,在android11及以上机器运行,点击录制签到语音的时候,就会跳转到设置页面,需要用户手动点击授权给m3对应权限,授权后返回m3,即可正常使用

# 2.活动推送分享图片保存文件失败

问题原因:

1.重要消息分享的时候会先保存一张图片文件到本地,再进行分享 2.targetsdk30后强制执行分区存储,所以老的调用方法不能直接运行,需要把文件保存地址改为应用内部地址才能正常保存

修改方法: M3\src\main\java\com\seeyon\cmp\ui\fragment\ImportantMsgFragment.kt文件中修改文件的保存位置为内部路径,代码如下

1702127736826.png

运行效果: 在加上以上代码之后,在android11及以上机器运行,点击分享重要消息,就不会报错了

# 3.wpspro打开文件无权限失败

问题原因: 1.wpspro打开文件的时候,会读取文件,再进行打开,该处也需要文件管理权限 2.targetsdk30后强制执行分区存储,所以老的调用方法不能直接运行,需要申请新的文件管理权限才能正常访问

修改方法: M3\src\main\java\com\seeyon\cmp\plugins\attachment\AttachmentPlugin.java文件中添加权限申请代码,代码如下

1702127767195.png

运行效果: 在加上以上代码之后,在android11及以上机器运行,使用wpspro打开文件,就不会报错了

# 4.聊天选文件发送的时候过滤掉了.word等文件

问题原因: 1.targetsdk30后强制执行分区存储,所以老的调用方法不能访问全部的手机文件,需要申请新的文件管理权限才能正常访问 修改方法: M3\src\main\java\com\seeyon\cmp\plugins\file\ui\FileSelectActivity.java文件中添加权限申请代码,代码如下

1702127790188.png

运行效果: 在加上以上代码之后,在android11及以上机器运行,聊天中选择手机文件,就包含了全部的文件

# 5.Kotlin语法错误

问题原因: 1.修改到targetsdk30后kotlin语法发生了变化,主要集中在变量的赋值和空判断方面

修改方法: 根据ide的提示进行语法修改即可,无需特殊处理,对于类似常量赋值的问题,可以使用对应的set方法进行处理,例如

1702127829771.png

运行效果: 在修改完成kotlin语法错误后,即可正常编译

# 6.鸿蒙3.0文件系统适配

问题原因: 1.修改到targetsdk30后由于鸿蒙3.0系统基于的是sdk29,会导致选择文件白屏等问题的出现

修改方法: 由于鸿蒙3对应的是sdk29,所以需要添加特殊的标记来实现对文件访问的向下兼容,具体代码如下: M3\src\main\AndroidManifest.xml

1702127901611.png

运行效果: 添加完该配置后,在鸿蒙3上就可以正常的访问文件系统了

# 7.致信语音需要点进聊天详情才会自动弹出

问题原因: 1.由于致信代码初始化的顺序问题,每次语音通话需要点进过具体聊天页面才能弹出对应页面

修改方法: 提前初始化致信代码,就可以在没有点进具体的对话的情况下弹出语音通话的界面,具体代码如下: M3\src\main\java\com\seeyon\cmp\manager\bg\CMPBackgroundRequestsManager.java

1702127942737.png

运行效果: 添加完该配置后,在使用m3的过程中有语音通话就能自动弹出对应页面了

# 8.Android8.0透明主题冲突

问题原因: 1.升级到targetsdk30之后原有的设置透明主题方式与旋转屏幕方法在Android8.0上有冲突会导致应用闪退

修改方法: 1.对于透明activity做了转换拦截

1702127956312.png

2.针对于强制需要横竖屏切换的页面,修改了透明属性

运行效果: 在Android8.0版本无闪退情况, 几个关键页面能正常横竖屏切换

修改完成后,透明主题与旋转屏幕在android8.0上不再会导致闪退的情况出现

# 9.融云聊天中点击位置,弹出页面无法定位

问题原因: 1.高德老的api在Android13设备无法正常返回 修改方法: 1.换用新的方式定位

1702127995214.png

1702128004940.png

运行效果:Android13设备正常定位成功, 后续逻辑正常

创建人:het
修改人:admin