Loading... ### 为什么要升级? > Android手机系统近两年更新很快,特别是现在大多数的设备已经升级到了9.0甚至是10.0  ### 升级 * project的build文件修改 只将classpath修改为了3.1.4,有需要的话可以根据需求往上升级 ```Java classpath 'com.android.tools.build:gradle:3.1.4' ``` * 修改gradle-wrapper.properties文件 修改了classpath需要同步修改这个,目前我只改到了4.4 ```Java distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip ``` * module的build文件修改 android节点下修改 ```Java compileSdkVersion 28 buildToolsVersion "28.0.3" ``` defaultConfig节点下修改 ```Java minSdkVersion 21 targetSdkVersion 28 ``` 修改apk的输出名称,先前是这么用的,但是在升级后会出现下面的错误 ```Java Cannot set the value of read-only property 'outputFile' for XXX ``` ```Java applicationVariants.all { variant -> if (variant.buildType.name.equals('release')) { variant.outputs.each { output -> def oldFile = output.outputFile def buildName def releaseApkName variant.productFlavors.each { product -> buildName = product.name } releaseApkName = 'cjprotect_' + defaultConfig.versionName + '.apk' output.outputFile = new File(oldFile.parent, releaseApkName) } }else{ variant.outputs.each { output -> def oldFile = output.outputFile def buildName def releaseApkName variant.productFlavors.each { product -> buildName = product.name } releaseApkName = 'cjprotect_debug_' + defaultConfig.versionName + '.apk' output.outputFile = new File(oldFile.parent, releaseApkName) } } } ``` 现在需要改成这样 ```Java applicationVariants.all { variant -> if (variant.buildType.name == 'release') { variant.outputs.all { outputFileName = "cjprotect_${defaultConfig.versionName}.apk" } }else{ variant.outputs.all { outputFileName = "cjprotect_debug_${defaultConfig.versionName}.apk" } } } ``` 如果你配置了渠道分包 会出现这样的错误 ```Java Error:All flavors must now belong to a named flavor dimension. The flavor 'flavor_name' is not assigned to a flavor dimension. ``` 官方给出的[解释](https://developer.android.com/studio/build/build-variants?utm_source=android-studio#product-flavors)是需要配置flavorDimensions ```Java flavorDimensions "version" productFlavors { phone { dimension "version" buildConfigField('String', 'TYPE', '"Phone"') buildConfigField('boolean', 'NEED_PUSH', 'false') } } ``` 添加两行就好了 如果你使用了HTTP client,会出现这样的错误 ```Java Didn't find class "org.apache.http.impl.client.DefaultHttpClient" on path ``` 需要在manifest的application标签中增加属性 ```Java <uses-library android:name="org.apache.http.legacy" android:required="false" /> ``` > 为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着 Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P 系统的安卓设备无论是接收或者发送流量,未来都不能明码传输,需要使用下一代(Transport Layer Security)传输层安全协议,而 Android Nougat 和 Oreo 则不受影响. 默认联网会失败,解决办法一是降级27,这里我们不采用.第二种如下: 首先在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下: ```xml <?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config cleartextTrafficPermitted="true" /> </network-security-config> ``` 接着,在AndroidManifest.xml文件下的application标签增加以下属性: ```Java <application ... android:networkSecurityConfig="@xml/network_security_config" ... /> ``` 最后还有最简单的办法,在AndroidManifest.xml配置文件的<application>标签中直接插入 ```Java android:usesCleartextTraffic="true" ``` * 最后记得动态权限控制 最后修改:2021 年 07 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏