Android APP实现TCP网络通信的前提配置

为了让自己开发的Android APP实现TCP功能,需要在Android APP项目中对AndroidManifest.xmlbuild.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)
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值