这是我第一次遇到这个问题,反正我也是第一次做完整的安卓app,很多个第一次。
我之前做的那个老旧手机做桌面摆件的app,因为原来的“无干预”版本无法使用,所以又用回了“和风版”,但这个版本很久没用了,有些东西其实很旧就停了,所以重新搞搞,之前这个app在安卓11和鸿蒙上都可以了。但今天用安卓12的模拟器或鸿蒙启动后(可以启动),却无法进入主界面,直接FC。并出现下面出错信息:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.thirdversionclock, PID: 14346
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.thirdversionclock/com.example.thirdversionclock.FullscreenActivity_desktop}: java.lang.IllegalArgumentException: com.example.thirdversionclock: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
看样子是PendingIntent参数的问题,于是在网上搜了一下,发现也是有很多人遇到这个问题,解决的方法大致有如下三种(我是每一种都试了,都没好使):
1、修改androidmanisfestj.xml每个activity和service的exported="false"改为“true”
2、修改pendingIntent参数
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, 0);
修改为:
PendingIntent pendingIntent = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
把最后一个参数的0改为PendingIntent.FLAG_IMMUTABLE)或PendingIntent.FLAG_MUTABLE)
3、在build.gradle中添加依赖:
implementation 'androidx.work:work-runtime:2.7.1'
但是它最小使用版本是26,但我的app适配最低版本是17,即使改成了26,也可是只可启动,无法进入主页面。
没再看到其他的方法,但也没解决我的问题,最后我想那我就是兼容安卓12呗,于是我就把目标sdk版本的31改成了30.
然后我的app就可以完全正常的在安卓12的模拟器和鸿蒙手机上正常运行了,其他什么都没改。真是见了鬼!难道是我对这个“compileSdkVersion”和“targetSdkVersion ”有什么误解?目标版本和编译版本都是安卓11,但app在安卓12上可以正常运行,如果目标版本和编译版本都是安卓12反而不能正常运行?
那所谓的向下兼容是不是就是你最高版本没超过我,但我可以让你运行,如果允许版本超过我,代码就必须按照我的来,否则就不运行,还是有点迷迷糊糊。反正能用就行,我要求也不高,以后遇到类似的事也大致有个方向,应该我这个情况不是个案吧?如有大神可指点一二。