为了让自己开发的Android APP实现TCP功能,需要在Android APP项目中对AndroidManifest.xml和build.gradle.kts文件进行配置,它们对于主文件的关系就好比APP的“身份证”和“施工图纸”,前者向 Android 系统登记 APP 的核心信息(包名、版本号、启动页面等)和申请系统权限,后者告诉编译器“怎么把你的 Kotlin/Compose 代码变成可运行的 APP”,相当于编译指令集的存在。

一般的项目模板架构如上图所示,首先对AndroidManifest.xml进行修改,为了获得网络通信权限,需要在<manifest>添加如下代码
<!-- 1. 添加网络通信权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
第一行代码的作用是授予APP网络访问权限
第二行代码的作用是授予APP查看网络状态
需要注意的是因为该文件用的是xml语言所以添加的层级不要搞错了
然后将application层的android:usesCleartextTraffic设置为ture,这一步主要是为了允许明文TCP通信(因为Android 9.0 + 系统默认禁止 APP 的明文网络通信)
修改后的AndroidManifest.xml代码如下所示
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 1. 添加网络通信权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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.Falldetection"
android:usesCleartextTraffic="true"> <!-- 2. Android 9+ 允许明文TCP通信(必须加) -->
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.Falldetection">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
然后修改build.gradle.kts文件,这个文件主要修改两个地方,一个是Compose框架声明(如果你要用这个框架就要打开),还有一个是引用两个包
buildFeatures {//打开compose开发框架的开关
compose = true
}
// 协程依赖(适配Android 11+)
//org.jetbrains.kotlinx:kotlinx-coroutines-android是 Kotlin 官方推出的、专门适配 Android 系统的协程核心依赖库
//这个库主要用于解决kotlin协程问题,kotlin协程是kotlin语言中的一种用于处理异步编程的机制
//比如网络请求、TCP 数据接收、文件读写这些都是异步编程处理的耗时操作(主线程是UI线程)
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0")
// Compose Runtime核心依赖(解决LaunchedEffect找不到)
implementation("androidx.compose.runtime:runtime:1.7.0")//这个包用于给compose提供底层核心管理方法,比如数据驱动UI、声明周期管理等作用的函数
implementation("androidx.compose.runtime:runtime-livedata:1.7.0")
引入的这两个包第一个是用于处理kotlin的协程问题,对于APP主线程是UI线程,而TCP、网络服务这些都是异步程序;第二个包用于给compose提供管理办法,比如数据驱动UI、声明周期管理等作用的函数,如果没有用compose框架就不需要引用这个包。最后整体的build.gradle.kts文件如下
plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
}
android {
namespace = "com.example.falldetection"
compileSdk = 36 // 简化写法,和你的release(36)等效
defaultConfig {
applicationId = "com.example.falldetection"
minSdk = 24
targetSdk = 36
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 {//打开compose开发框架的开关
compose = true
}
// 关键:指定Compose编译器版本(和BOM版本匹配)
composeOptions {
kotlinCompilerExtensionVersion = "1.6.0"
}
}
dependencies {
// 协程依赖(适配Android 11+)
//org.jetbrains.kotlinx:kotlinx-coroutines-android是 Kotlin 官方推出的、专门适配 Android 系统的协程核心依赖库
//这个库主要用于解决kotlin协程问题,kotlin协程是kotlin语言中的一种用于处理异步编程的机制
//比如网络请求、TCP 数据接收、文件读写这些都是异步编程处理的耗时操作(主线程是UI线程)
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0")
// Compose Runtime核心依赖(解决LaunchedEffect找不到)
implementation("androidx.compose.runtime:runtime:1.7.0")//这个包用于给compose提供底层核心管理方法,比如数据驱动UI、声明周期管理等作用的函数
implementation("androidx.compose.runtime:runtime-livedata:1.7.0")
// 原有依赖(保留,用libs方式引入)
implementation(libs.androidx.core.ktx)
implementation(libs.androidx.lifecycle.runtime.ktx)
implementation(libs.androidx.activity.compose)
implementation(platform(libs.androidx.compose.bom))
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.graphics)
implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3)
// 测试依赖
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
androidTestImplementation(platform(libs.androidx.compose.bom))
androidTestImplementation(libs.androidx.compose.ui.test.junit4)
debugImplementation(libs.androidx.compose.ui.tooling)
debugImplementation(libs.androidx.compose.ui.test.manifest)
}

492

被折叠的 条评论
为什么被折叠?



