一、准备
1.升级AS:
将AS更新至 AS 3.2及以上,我用的是4.2.1
2.Gradle 版本改为 4.6及以上,项目下gradle/wrapper/gradle-wrapper.propertie文件中的distributionUrl改为:
distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
3.升级插件版本:
buildscript{
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
}
}
4.修改SdkVersion
compileSdkVersion 版本升级到 28 及以上buildToolsVersion 版本改为 28.0.2 及以上。
android{
compileSdkVersion 28
}
-
compileSdkVersion: 29
-
targetSdkVersion : 29
-
buildToolsVersion "29.0.0"
5.在gradle.properties文件中添加下列项。
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
android.enableJetifier=true
二、迁移
1、使用 Migrate to androidx
如果是AS 3.2或更高版本,则提供了一键迁移,选择菜单Refactor-> Migrate to AndroidX
,会提示备份当前工程,勾选Backup project as Zip file
,可以自动帮你备份。
直接File->Invalidate Caches / restart,重新启动。
三、项目改动
这波操作以后,你的项目就会有大变动了:
例如:原来的android.xxx.xxx.28.0.2全部变为androidx.xxx.xxx.1.0.0;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.appcompat.widget.AppCompatTextView;
包更改对应关系,可以看官网:
https://developer.android.google.cn/jetpack/androidx/migrate/class-mappings
可以下载gradle:https://services.gradle.org/distributions/
改变后有的依赖包可以改变过来,但是有的需要手动修改,特别是需要java文件和XML文件;本人改完Java文件后,编译没错,但是就是运行不起来,结果发现布局XML文件中的依赖包也需要改。尽量检查所有文件(配置文件等);
例如:
旧版本android包
java 代码:
//import android.support.v4.view.PagerAdapt
//import android.support.v4.view.ViewPager;
新版本androidx包中改为
import androidx.viewpager.widget.PagerAdapter;
import androidx.viewpager.widget.ViewPager;
下拉刷新swiperefreshlayout
导入swiperefreshlayout库
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
使用:androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:line 不推荐使用。
替换为:android:singleLine="true"
android.support.v4.content.FileProvider
改为:androidx.core.content.FileProvider 即可
四、解决各种问题’
1、AndroidStudio Gradle 解决Error:All flavors must now belong to a named flavor dimension. Learn more at
是(Gradle)这个插件现在(3.0.0)需要将你原来所有的flavor进行统一管理,用属性名flavor dimension进行配置,即使你只有一维属性也需要这样做,否则你就会得到如题的错误。解决的方式就是首先你需要用flavorDimensions这个属性声明一个或多个维度,然后,给每个flavor分配一个你已经声明好的维度(就像下面的例子中给出的)。因为这个插件会为你自动匹配依赖所以你应该仔细的命名你的flavor dimension是,最好不要太随意。这样做的好处就是让你对你本地的代码和资源与它们相应版本的App进行匹配时更具可控性。其实就是进行版本差异化开发时,不同版本的App能够很好的访问与它相对应的资源(比如图片,字符串)和依赖库之类。
读不懂没关系,看个大概或者google翻译,然后照猫画虎的去做,如图:
其中,flavorDimensions这个属性在模块(module,一般就是项目中的app目录)下的build.gradle文件的android{}节点中任意一个位置写就行,里面的参数就是你原来想要配置的多个flavor,比如xiaomi{},360{},anzhi{}等等,这里写成多个字符串就行了,是可变参数。比如这例子中只有一个FUN。
然后就可以像原来一样在productFlavors{}节点中使用这个维度(dimension)了,它里面的这个大括号的名字(FUN)是你自己随便起的,不一定要和里面的dimension相同,里面的dimension FUN就是flavorDimensions中的一个。
————————————
注意:flavorDimensions中带括号;
————
版权声明:本文为CSDN博主「Builder_Tony」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Builder_Taoge/article/details/78406734
2.Disable Gradle 'offline mode' and sync project
需要添加依赖:goole()
allprojects {
repositories {
mavenCentral()
jcenter()
maven { url "https://jitpack.io" }
google()
}
}
buildscript {
repositories {
google()
jcenter()
jcenter { url "http://jcenter.bintray.com/" }//关键
maven { url 'https://maven.fabric.io/public' }//关键
maven { url 'https://jitpack.io' }//关键
maven { url 'https://maven.fabric.io/public' }//关键
maven { url "https://maven.google.com" }//关键
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
classpath 'com.bugtags.library:bugtags-gradle:latest.integration'
classpath 'com.growingio.android:vds-gradle-plugin:1.1.1'
}
}
参考:https://www.jianshu.com/p/4aab863ae86d
3.Android Studio Debug 调试时一直卡在 waiting for debugger 界面
AS3.0.1版本中:
1.在Androidmainfest.xml文件中,注释掉:
android:process=":remote"
2.查看build.gradle文件里面的配置
buildTypes {
debug {
minifyEnabled false
debuggable true
jniDebuggable true
}
release {
minifyEnabled false
debuggable true
jniDebuggable true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
3.点击settings-Instance Run的配置
4.点击左下角的build Variants,把app设置为debug
参考:https://blog.csdn.net/songzi1228/article/details/83544000
4.Android9.0 默认是禁止所有的http请求
解决办法有好以下几种。
- 符合规范,改用https,需要后台支持
- 将targetSdkVersion 改成27及以下
- 更改默认属性,使它支持Http链接
详细讲下第三种配置:
- 在res/xml 目录下新建一个 network_security_config.xml 的文件。 文件内容为:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
2.在 AndroidManifest 的 application 标签中添加
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true"
3.添加该权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
man配置文件:
需要在AndroidManifest.xml的application节点中加上android:usesCleartextTraffic="true"属性,
<application
android:name=".application.MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:largeHeap="true"
android:theme="@style/QMUI.Compat.NoActionBar"
android:usesCleartextTraffic="true"
tools:ignore="GoogleAppIndexingWarning">
<!--android9闪退-->
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
https://blog.csdn.net/u011368551/article/details/104437327/