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
| 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")
}
|
解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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")
|
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
| <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"/>
|
Activity
1.删enableEdgeToEdge(),其实还是别删了
2.删ViewCompat.setOnApplyWindowInsetsListener,其实还是别删了,但是ViewCompat.setOnApplyWindowInsetsListener和fitsSystemWindows=”true”有冲突,所以不得已的时候只能删了,但是其实ViewCompat.setOnApplyWindowInsetsListener比fitsSystemWindows好用多了,还不如保留ViewCompat.setOnApplyWindowInsetsListener,删除fitsSystemWindows。
3.初始化binding和改setContentView(binding.root)