Android 12 targetSdkVersion为31应用的安装问题

targetSdkVersion 31的应用在Android 12上安装时可能会存在两种安装不上的情况。

问题一:

adb: failed to install xxx.apk: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Scanning Failed.: No signature found in package of version 2 or newer for package com.tomes.sharefile]

解决:

分析与解决请参照我的另一篇帖子Android R(11)targetSdkVersion 30的应用必须使用v2及以上签名,这里不再累述

问题二:

adb: failed to install xxx.apk: Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED: Failed parse during installPackageLI: /data/app/vmdl2054463318.tmp/base.apk (at Binary XML file line #49): com.tomes.ShareOpenTestActivity: Targeting S+ (version 10000 and above) requires that an explicit value for android:exported be defined when intent filters are present]

我的ShareOpenTestActivity在AndroidManifest.xml中的申明是:

        <activity android:name=".ShareOpenTestActivity">
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>
        </activity>

原因:

查看官网文档:https://developer.android.google.cn/about/versions/12/behavior-changes-12#exported

我们知道,当我们的应用以Android 12为目标,使用的activity,service,broadcast receiver含有intent-filter,则必须显示声明android:exported属性,如果没有声明,则我们的应用不能安装在Android 12上

解决方法:

声明android:exported属性即可解决。

如我上面的错误,只需要对ShareOpenTestActivity增加android:exported属性申明就好

        <activity android:name=".ShareOpenTestActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>
        </activity>

总结:

targetSdkVersion为31【以Android 12为目标】的应用务必要加入v2签名,务必要对使用的activity,service,broadcast receiver含有intent-filter,显示声明android:exported属性。

 

更多的Android12上面的信息和思考请看:

Android 12的行为变更和版本兼容思路

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值