最近华为市场要求app的targetSdkVersion在2024年1月前升至30+,于是修改后检查各项功能,目前发现的主要问题是连网功能有问题。
1、访问http链接提示ERR_CLEARTEXT_NOT_PERMITTED
临时解决办法:
<application
...
android:usesCleartextTraffic="true"
...
>
终极解决办法:
自己的服务器http -> https
第三方接口服务器:要求对方提供https接口
2、QQ SDK 无法转入QQ登录界面
提示QQ不是最新版(实际上已经是最新版);本以为是自己的QQ SDK版本过低(2018年的),想着替换到最新版,但在网上发现了更简单的解决办法:
“添加Android API 31 系统版本 12 的权限查询,否则Android 12 系统跳转不到授权页,导致点击登录按钮,查询不到手机上已安装的腾讯QQ的APP。”
实际上,我的小米青春10是Android11版本,也是无法转入QQ登录界面,并非上述“31/12”;用下边办法同样可以解决(即在manifest内加mobileqq的queries)
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:installLocation="auto"
package="your.package.name"
android:versionCode="66"
android:versionName="6.6.6" >
<queries>
<package android:name="com.tencent.mobileqq" />
</queries>
<!-- ... -->
</manifest>
不过,对于本人的app来说,上述targetSdkVersion修改、增加<queries>后编译导致出错:
at com.android.build.gradle.internal.tasks.manifest.ManifestHelperKt.mergeManifestsForApplication
我的工程是多个子工程组成的,所以查看了下各子工程.gradle,确实只将入口工程的.gradle里的targetSdkVersion改为30了,把各子工程的也修改后,仍提示上述错误,于是在Android Studio的Terminal内执行:
gradlew processDebugManifest --stacktrace
得到更详细的提示,其中有:
Missing 'package' key attribute on element package at AndroidManifest.xml:10
网上搜了下这个的解决办法,需要升级主工程的gradle插件版本(原来是3.5.2)
dependencies {
classpath 'com.android.tools.build:gradle:3.5.4'
}
目前暂时就发现这些问题,还需要测试微博SDK等所有第三方接口、以及打包后的安装。
安装测试(用360加固后本地jarsigner命令重新签名)
1、✔到荣耀青春10:EMUI 10.0.0/Android 10
2、✔ 到MIX2: MIUI 12.0.1/Android 9
3、× 到小米青春10: MIUI12.1.7/Android 11,提示 解析软件包时出现问题。(33) 详细信息: packageinfo is null
测试了腾讯加固、梆梆加固也是如此。
最初以为是Android Studio版本/Gradle版本的问题,升级到最新的Giraffe,gradle升至7.5,
classpath 'com.android.tools.build:gradle:3.5.4' 升至 7.4.2,仍然如此。
(从Android Studio V3.5.2升至Giraffe,以及gradle从5.4.1升至7.5, tools.build:gradle从3.5.4升至7.4.2又是一堆错,以后有时间总结一下)
如果使用未加固的签名包,或加固后的包直接安装,即不用本地jarsigner命令签名则没有3这种问题。
所以确定是本地jarsigner的版本在targetVersion改为30后有问题(即在某些设备可以安装,某些设备不能)。
于是下载了360加固客户端,用里边的工具包里的签名V3(=V1+V2)签名加固后的包,发现3这个问题解决。