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中的申明是:

        
            
                
                
                
            
        

原因:

Android 12 targetSdkVersion为31应用的安装问题_第1张图片

查看官网文档: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属性申明就好

        
            
                
                
                
            
        

总结:

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

 

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

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

你可能感兴趣的:(android开发实战,android,android)