本期主要记录,在Android SDK30及以上版本遇到的开发问题和兼容问题;
笔者是从compileSdkVersion 25升级到 30的,因为升级了as版本顺带也升级sdk嘛;
由于as版本过高,gradle默认版本为7.1;
SDK30对应Android系统是11;
只适合有Android开发基础的朋友看;
Android Studio Bumblebee | 2021.1.1 Patch 3
Build #AI-211.7628.21.2111.8309675, built on March 17, 2022
Runtime version: 11.0.11+9-b60-7590822 amd64
VM: OpenJDK 64-Bit Server VM by Oracle Corporation
minSdkVersion 21
targetSdkVersion 30
gradle-6.7.1
com.android.tools.build:gradle:4.2.0
ext.kotlin_version = '1.7.10'
加入网络权限
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
app依然无法访问网络!
9.0及以上系统已经默认不支持http请求,谷歌公司默认要求是加密的链接
把http改成https,需要后台接口开发人员进行修改。
可以把targetSdkVersion 改成27或者以下。
在res目录里创建xml文件夹,加入network_security_config.xml文件
- "1.0" encoding="utf-8"?>
- <network-security-config>
- <base-config cleartextTrafficPermitted="true" />
- network-security-config>
在AndroidManifest.xml文件里的application标签属性上加入android:networkSecurityConfig="@xml/network_security_config"
即可正常的使用http协议的请求

权限不用多说,需要用代码获取或是手动添加。
运行时创建文件报错如下:
HwRemoteInputMethodManager: isCasting false because IHwDistributedWindowManager is invalid.
因为你用到的Environment.getExternalStorageDirectory()已经过时了(@Deprecated)
在AndroidManifest.xml的application里写入android:requestLegacyExternalStorage="true"
将获取根目录的方法改为context.getExternalFilesDir("myFile" )即可。
路径为:内存卡根目录\Android\data\(一般是项目里的applicationId包路径 )\files\myFile
如果想直接写入files根目录,可以传控:context.getExternalFilesDir(null )
封装方法如下:
- public static void writeFileTxt(Context context,String content,String name){
- try {
- File file = new File(context.getExternalFilesDir("myFile" )+ "/"+ name+ ".txt");
- if(!file.exists()){
- file.createNewFile();
- }
- RandomAccessFile raf = new RandomAccessFile(file, "rwd");
- raf.seek(file.length());
- raf.write(content.getBytes());
- raf.close();
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
Android11后,Google对于Android的安全性提升更大,严格要求权限等。
后续遇到的SDK兼容问题也会记录在这里,方便回顾和分享。