解决由于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这个问题解决。

当将Android项目的`targetSdkVersion`升级到Android 11 (API级别30)及以上时,可能会遇到与`ConstraintLayout`相关的错误,这是因为新版本的系统对布局组件的行为进行了调整,尤其是在处理视图约束(Constraints)上。 在Android 11中,Google引入了一些新的变化,比如View Binding API,这可能导致之前基于旧版SDK使用的依赖库或XML约束配置不再适用。当你尝试运行应用时,`ConstraintLayout`可能会抛出关于`Constraints`解析或支持的问题,例如找不到视图、约束冲突等。 解决这个问题通常需要做以下步骤: 1. **检查约束设置**:确保你的`ConstraintLayout` XML文件里的约束(如`app:layout_constraint*`属性)已经适应了最新的约束语法,特别是在使用`androidx.constraintlayout.widget.ConstraintLayout`而不是旧版`com.android.support.constraint.ConstraintLayout`。 2. **更新依赖**:如果你正在使用第三方库,确认其是否支持Android 11以上的版本,并将其更新到最新版本。 3. **启用View Binding**:如果尚未启用,可以在`build.gradle`文件中添加`implementation 'androidx.databinding:viewbinding:4.1.0'`并创建对应的`ViewModel`绑定类。 4. **检查并修复错误**:运行应用,查看错误日志,找出具体的错误提示,根据它提供的信息修改布局或代码。 5. **测试兼容**:在模拟器和真机上分别测试,确保在所有目标API级别上都能正常工作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值