如何处理targetSdkVersion提升到30后遇到的麻烦?
最近华为市场要求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这个问题解决。
上一篇: 搞定iOS单元测试系列:统一的编码规则
下一篇: Rust是什么时候发布的?
推荐阅读
-
卷积的意义--我见过最生动易懂的解释--就是在图像处理中,将两组分辨率不同的图像进行卷积处理,从而形成易于处理的平滑图像。卷积甚至可以用在考试作弊中,为了让照片中的两个人同时像,只要对两个人的图像进行卷积处理就可以了,这是一种平滑处理,但我们如何才能真正把这个公式与实际建立一种联系,也就是说我们能不能从生活中找到一个很方便具体的例子来表达这个公式的物理意义呢? 有一个七品县令,喜欢打骂无赖,并有一个惯例:只要不犯大罪,只打一顿就放他回家,以示爱民如子。 有一种无赖,想扬名立万却又不抱多大希望,心想:既然扬不了好名,出了臭名也成啊。怎样才能出恶名呢?炒作!怎么炒作?找名人!他自然而然地想到了自己的长官--县令。 无赖于是在光天化日之下,站在县衙门口撒了泡尿,后果可想而知,自然是被请进堂上挨了板子,然后昂首挺胸地回家,躺了一天,哎!身体并无大碍!第二天照样如此,全然不顾行政长管的仁慈和衙门的尊严,第三天、第四天 ......每天去县衙领板子回来,还兴高采烈,坚持了一个月之久!这个无赖的名声像衙门口的臭气一样传遍了八方! 县太爷噤了噤鼻子,愣愣地望着惊堂木案,皱了皱眉头,思考着一个问题:这三十块大木板怎么会不好用呢?......想想也是,当年这位大人金榜题名的时候,我数学考了满分,所以这道题至少今天得解出来: --人(系统!)会怎么样(系统!)之后会怎么样(输出!)人(系统!)被打之后会怎么样? --有什么用,很疼! --我问的是:会发生什么? --取决于有多疼。就像这个无赖的体质,每天挨一板什么事都不会发生,连哼哼两声都不行,你看他那得意洋洋的样子(输出 0);如果一次连打他十板,他可能会皱着眉头,咬着牙,硬是不哼一声(输出 1);打到二十板,他会疼得脸都变形了,像猪一样哼哼唧唧(输出 3);打到三十板,他可能会像驴一样嚎叫,一把鼻涕一把泪,求你饶他一命(输出 5);打到四十板,他会大小便失禁,勉强哼哼(输出 1);打到五十板,他连哼哼都不能哼一下(输出 0)--死! 县官摊开坐标纸,绘制了一条以挨打次数为 X 轴、哼唱程度(输出)为 Y 轴的曲线: --"呜呼!这条曲线就像一座山,想不通,想不通。为什么那个无赖被打了三十天也不喊救命? --哦,你打的时间间隔(Δτ=24小时)太长了,这样无赖一天承受的痛苦程度,没有叠加,始终是个常数;如果缩短时间间隔(建议Δτ=0。5 秒),那么他的疼痛程度就可以迅速叠加;等到无赖挨了三十下(t=30)时,疼痛程度已经达到他叫喊能力的极限,就会收到最好的惩戒效果,再多挨几下也不会手下留情。 --还是不太明白,为什么疼痛程度会在小时间间隔内叠加? --这跟人(线性时变系统)对木板(脉冲、输入、激发)的反应有关。什么是响应?人收到板子后,疼痛的感觉会在一天内(假设,因人而异)慢慢消失(衰减),而不是突然消失。这样,只要中风的时间间隔较小,每次中风造成的疼痛就没有时间完全衰减,都会对最终的疼痛程度产生不同的影响: t 块大板造成的疼痛程度 = Σ(第 τ 块大板造成的疼痛程度 * 衰减系数)[衰减系数是 (t - τ) 的函数,请仔细品味] 数学表达式为:y(t) = ∫T(τ)H(t-τ)
-
如何处理targetSdkVersion提升到30后遇到的麻烦?