突发奇想,把android studio升级,真是痛不欲生的回忆啊,我把我踩的坑分享出来希望可以帮助大家.......
本想着学习一下kotlin,但是在安装完插件时,发现低版本的android studio并不能支付,,,上火啊,于是一不做二不休升级!
android studio升级到的版本是3.2.1
然后升级SDK,升级gradle 一系列全套升级!
1.首先是修改的项目下的build.gradle的改变
buildscript {
repositories {
google() //新增的
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1' //这个跟android studio版本号一致
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google() //新增的
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
2.然后是项目下gradle文件夹->gradle-wrapper.properties 这个文件
#Wed Aug 29 11:08:34 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip //最新的
#distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip
3.修改app 下的build.gradle
//项目配置改到当前的版本
compileSdkVersion 28
buildToolsVersion '28.0.3'
File-->Project structure,打开如下界面,这个是改整个工程的SDK版本。选择你要的sdk的版本
android升级后某认渠道 defaultConfig下配置
flavorDimensions "umeng"
android studio3.0之前的配置
//给apk添加对应的版本号:
// applicationVariants.all { variant ->
// variant.outputs.each { output ->
// def outputFile = output.outputFile
// if (outputFile != null && outputFile.name.endsWith('.apk')) {
// def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
// output.outputFile = new File(outputFile.parent, fileName)
// }
// }
// }
android studio3.0之后的配置
applicationVariants.all { variant ->
variant.outputs.all { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
outputFileName = fileName
}
}
}
导入包的方式也变了: compile变成了implementation
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
implementation files('libs/snappydb-0.5.0.jar')
implementation files('libs/alipaySdk-20170922.jar')
implementation project(':base')
implementation 'com.android.support:appcompat-v7:28.+'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.yanzhenjie:permission:1.1.2'
implementation 'com.android.support:design:28.0.0-alpha1'
implementation 'liji.library.dev:citypickerview:0.7.0'
implementation 'com.yanzhenjie:album:1.0.3'
implementation 'com.feezu.liuli:timeselector:1.1.3'
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
implementation 'cn.jiguang.sdk:jpush:3.1.6'
implementation 'cn.jiguang.sdk:jcore:1.2.5'
implementation 'com.androidkun:XTabLayout:1.1.3'
implementation 'com.contrarywind:Android-PickerView:3.2.5'
implementation 'com.umeng.sdk:common:latest.integration'
implementation 'com.umeng.sdk:analytics:latest.integration'
implementation 'com.jakewharton:butterknife:7.0.1'
testImplementation 'junit:junit:4.12'
implementation 'com.jakewharton:butterknife:7.0.1'引入的时候会出现问题
需要在 defaultConfig 下配置
javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } }
然后是自己写的库base 之所以用api 是因为他在库里面不是在自己的项目下 间接引用的时候用api
api fileTree(include: ['*.jar'], dir: 'libs')
testImplementation 'junit:junit:4.12'
api files('libs/volley.jar')
api 'com.google.code.gson:gson:2.5'
api 'com.inkapplications.viewpageindicator:library:2.4.3'
api files('libs/universal-image-loader-1.8.6-with-sources.jar')
api files('libs/libammsdk.jar')
api files('libs/open_sdk_r5509_lite.jar')
api 'com.android.support:recyclerview-v7:26.0.0-alpha1'
api 'com.android.support:support-v4:25.3.1'
api 'com.squareup.okhttp3:okhttp:3.6.0'
api 'com.umeng.sdk:analytics:7.5.3'
然后所有的都结束的时候程序正常运行,然后发现了奇怪的时候.程序爆红!
所有继承fragmentActivity的界面,所有的生命周期都爆红! 这个图是别人的 我的错误已经没了
发生了这个问题.我就把fragmentactivity 换成了 activity,发现不红了
然后有出现了下面这个问题
adapter = new TabAdapter(getSupportFragmentManager(), fragments);
getSupportFragmentManager不能用了
注意:
此时要注意是否是在Activity中使用,因为Activity中并没有此方法的定义,必须是继承FragmentActivity或者AppCompatActivity,然后使用。
然后整个项目变动太大了.然后又改回了fragmentactivity
如果出现这两个错误就是缺少v4包 或者有v4还有v7冲突了:
Program type already present: android.support.v4.app.BackStackRecord$Op
Program type already present: android.support.v4.app.ActionBarDrawerToggle$Delegate
android studio会退2.2这个错误就清除了
最后发现了是com.android.support:support-v4:25.3.1 这个包的版本过高. 这个应该是android studio的一个小bug.看着实在难受降低了版本,大功告成!