1.viewbinding
build.gradle.kts中
1 2 3 4 5 6 7
   | android{ ... buildFeatures {     viewBinding = true
  } }
  | 
 
2.compileSdk
build.gradle.kts中compileSdk=34改成compileSdk=35
3.dependencies
在dependencies中添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
   | plugins {     alias(libs.plugins.android.application)     alias(libs.plugins.kotlin.android)     id("kotlin-kapt") }
  android {     namespace = "com.example.superbili"     compileSdk = 35
      defaultConfig {         applicationId = "com.example.superbili"         minSdk = 26         targetSdk = 34         versionCode = 1         versionName = "1.0"
          testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"     }
      buildTypes {         release {             isMinifyEnabled = false             proguardFiles(                 getDefaultProguardFile("proguard-android-optimize.txt"),                 "proguard-rules.pro"             )         }     }     compileOptions {         sourceCompatibility = JavaVersion.VERSION_11         targetCompatibility = JavaVersion.VERSION_11     }     kotlinOptions {         jvmTarget = "11"     }     buildFeatures {         viewBinding = true
      } }
  dependencies {
      implementation(libs.androidx.core.ktx)     implementation(libs.androidx.appcompat)     implementation(libs.material)     implementation(libs.androidx.activity)     implementation(libs.androidx.constraintlayout)     testImplementation(libs.junit)     androidTestImplementation(libs.androidx.junit)     androidTestImplementation(libs.androidx.espresso.core)
 
 
 
 
      implementation("androidx.fragment:fragment:1.6.2")     implementation("com.squareup.okhttp3:okhttp:4.10.0")     implementation("com.google.code.gson:gson:2.10.1")     implementation("com.squareup.retrofit2:retrofit:2.9.0")     implementation("com.squareup.retrofit2:converter-gson:2.9.0")     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1")     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1")     implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0")     implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.7")     implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0")     implementation("androidx.room:room-runtime:2.6.1")     kapt("androidx.room:room-compiler:2.6.1")     implementation("androidx.work:work-runtime:2.10.0")     implementation("com.github.bumptech.glide:glide:4.15.1")     implementation ("androidx.lifecycle:lifecycle-livedata-ktx:2.3.1")     implementation ("androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1")     implementation ("com.github.bumptech.glide:glide:4.13.0")     annotationProcessor ("com.github.bumptech.glide:compiler:4.13.0")     implementation("androidx.room:room-runtime:2.5.2")     kapt("androidx.room:room-compiler:2.5.2")     implementation("androidx.room:room-ktx:2.5.2")     implementation("com.google.android.material:material:1.12.0")     implementation("de.hdodenhof:circleimageview:3.1.0")     implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")     implementation("com.tbuonomo:dotsindicator:4.3")        implementation ("androidx.fragment:fragment-ktx:1.5.5")  implementation ("androidx.security:security-crypto:1.1.0-alpha03")      implementation ("com.squareup.okhttp3:logging-interceptor:4.12.0")
      implementation ("com.squareup.retrofit2:converter-scalars:2.9.0")     implementation ("com.squareup.retrofit2:converter-gson:2.9.0")
      implementation ("com.davemorrissey.labs:subsampling-scale-image-view:3.10.0")         implementation ("androidx.media3:media3-exoplayer:1.2.1")     implementation ("androidx.media3:media3-ui:1.2.1") }
  | 
 
解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
   | implementation("androidx.fragment:fragment-ktx:1.6.2") implementation("com.squareup.okhttp3:okhttp:4.10.0")//引用OkHttp库 implementation("com.google.code.gson:gson:2.10.1")//使用gson implementation("com.squareup.retrofit2:retrofit:2.9.0")//使用Retrofit,会自动将Retrofit、OkHttp、和Okio这几个库一起下载,不用再手动引入OkHttp库。 implementation("com.squareup.retrofit2:converter-gson:2.9.0")//使用Retrofit,这是一个Retrofit的转换库,它是借助GSON来解析JSON数据的,所以会自动将GSON库下载下来,所以不用手动引入GSON库了 implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1")//协程 implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1")//协程 implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.0")//使用ViewModel组件 implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.8.7")//使用ViewModel、livedata组件 implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.4.0")//使用ViewModel组件 implementation("androidx.room:room-runtime:2.6.1")//room kapt("androidx.room:room-compiler:2.6.1")//room implementation("androidx.work:work-runtime:2.10.0")//WorkManager implementation("com.github.bumptech.glide:glide:4.15.1")/*Glide,另外,Glide中需要用到网络功能,因此你还得在AndroidManifest.xml中声明一下网络权限才行:<uses-permission android:name="android.permission.INTERNET" />*/ annotationProcessor ("com.github.bumptech.glide:compiler:4.13.0") implementation("androidx.room:room-runtime:2.5.2") kapt("androidx.room:room-compiler:2.5.2") implementation("androidx.room:room-ktx:2.5.2") implementation("com.google.android.material:material:1.12.0") implementation("de.hdodenhof:circleimageview:3.1.0") implementation("com.tbuonomo:dotsindicator:4.3")    implementation ("androidx.fragment:fragment-ktx:1.5.5")     implementation ("androidx.security:security-crypto:1.1.0-alpha03")         implementation ("com.squareup.okhttp3:logging-interceptor:4.12.0")             implementation ("com.squareup.retrofit2:converter-scalars:2.9.0")     implementation ("com.squareup.retrofit2:converter-gson:2.9.0")     implementation ("com.davemorrissey.labs:subsampling-scale-image-view:3.10.0")         implementation ("androidx.media3:media3-exoplayer:1.2.1")     implementation ("androidx.media3:media3-ui:1.2.1")
 
 
  | 
 
4.plugins
添加
解释
1
   | id("kotlin-kapt")//为了dependencies中能使用kapt("...")这样的语法
  | 
 
5.binding
改用binding.root
6.声明网络权限
在AndroidManifest.xml开头添加
1
   | <uses-permission android:name="android.permission.INTERNET"/>
   | 
 
如下面例子
1 2 3 4
   | <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"> <uses-permission android:name="android.permission.INTERNET"/>
   | 
 
7.使用HTTP
在res->xml文件夹下,新建network_config.xml文件,然后修改文件中内容如下
1 2 3 4 5 6 7 8 9
   | <?xml version="1.0" encoding="utf-8" ?> <network-security-config>     <base-config cleartextTrafficPermitted="true">         <trust-anchors>             <certificates src="system"/>         </trust-anchors>     </base-config> </network-security-config>
 
   | 
 
这段配置文件的意思是允许我们以明文的方式在网络上传输数据,而HTTP使用的就是明文传输方式。
接下来修改AndroidManifest.xml中的代码来启用我们刚才创建的配置文件
1 2 3 4 5 6 7 8 9 10 11 12
   | <application         android:allowBackup="true"         android:dataExtractionRules="@xml/data_extraction_rules"         android:fullBackupContent="@xml/backup_rules"         android:icon="@mipmap/ic_launcher"         android:label="@string/app_name"         android:roundIcon="@mipmap/ic_launcher_round"         android:supportsRtl="true"         android:theme="@style/Theme.NetworkTest"         tools:targetApi="31"         android:networkSecurityConfig="@xml/network_config"//就是添加这一行哦         >
   | 
 
AndroidManifest.xml的权限声明
1 2 3 4 5 6 7 8 9 10 11 12 13
   | <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- 普通前台服务权限 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <!-- MediaPlayback 类型的前台服务需要额外的权限 --> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/> <uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />     <uses-permission android:name="android.permission.RECORD_AUDIO"/>
 
   | 
 
Activity
1.删enableEdgeToEdge(),其实还是别删了
2.删ViewCompat.setOnApplyWindowInsetsListener,其实还是别删了,但是ViewCompat.setOnApplyWindowInsetsListener和fitsSystemWindows=”true”有冲突,所以不得已的时候只能删了,但是其实ViewCompat.setOnApplyWindowInsetsListener比fitsSystemWindows好用多了,还不如保留ViewCompat.setOnApplyWindowInsetsListener,删除fitsSystemWindows。
3.初始化binding和改setContentView(binding.root)