2. 车载应用Manifest配置与车辆权限声明
任务目标
在车载Android应用开发中,环境搭建是第一步。本案例将指导你完成Android Studio、SDK、NDK的配置,并创建车载模拟器,最终生成一个可运行的车载应用项目骨架。
环境依赖
- 操作系统:Windows 10/11、macOS 或 Ubuntu 20.04+
- Android Studio:Hedgehog (2023.1.1) 或更高版本
- JDK:17(Android Studio 自带或单独安装)
- SDK Platform:Android 12 (API 31) 及以上(车载系统通常基于 API 31+)
- NDK:25.2.9519653 或更高(用于后续JNI开发)
实现步骤
1. 安装并配置Android Studio
从 developer.android.com/studio 下载对应系统的Android Studio安装包。安装完成后,首次启动进入SDK Manager(通过 More Actions → SDK Manager 或 Settings → Languages & Frameworks → Android SDK)。
2. 安装SDK与NDK
在SDK Manager中,切换到 SDK Platforms 标签页,勾选 Android 12.0 (API 31) 或更高版本;切换到 SDK Tools 标签页,勾选 NDK (Side by side) 并选择 25.2.9519653,同时勾选 CMake。点击 Apply 完成安装。
3. 创建车载模拟器
车载应用通常运行在横屏、无返回键的系统中。创建模拟器时,在AVD Manager中点击 Create Virtual Device,选择 Automotive 分类下的 Automotive (1024p landscape) 设备定义,然后选择API 31或更高版本的系统镜像(如 Android 12 (Automotive))。
4. 创建第一个车载应用项目
在Android Studio中点击 New Project,选择 Empty Views Activity。项目创建后,需要修改 AndroidManifest.xml 以适配车载环境——声明 automotive 特征并移除对触摸屏的强制依赖(车载设备可能无触摸屏,但本案例保留触摸支持以便在模拟器上操作)。
5. 核心代码实现
以下为最小可运行的车载应用项目关键文件。项目结构为:MainActivity.kt(界面逻辑)、activity_main.xml(布局)、AndroidManifest.xml(清单)、build.gradle.kts(模块配置)。
// MainActivity.kt
package com.example.carapp
import android.os.Bundle
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val tvMessage = findViewById<TextView>(R.id.tv_message)
tvMessage.text = "车载环境搭建成功\nSDK: ${android.os.Build.VERSION.SDK_INT}\nNDK: ${getNdkVersion()}"
}
private fun getNdkVersion(): String {
return try {
val abi = android.system.Os.uname().machine
"可用 (ABI: $abi)"
} catch (e: Exception) {
"未检测到"
}
}
}
<!-- activity_main.xml -->
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="加载中..." />
</LinearLayout>
<!-- AndroidManifest.xml -->
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/Theme.CarApp">
<activity
android:name=".MainActivity"
android:exported="true"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
// app/build.gradle.kts(模块级关键配置)
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.example.carapp"
compileSdk = 34
defaultConfig {
applicationId = "com.example.carapp"
minSdk = 31 // 车载系统最低API
targetSdk = 34
versionCode = 1
versionName = "1.0"
ndk {
abiFilters += listOf("arm64-v8a", "x86_64")
}
}
buildTypes {
release {
isMinifyEnabled = false
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
}
dependencies {
implementation("androidx.core:core-ktx:1.12.0")
implementation("androidx.appcompat:appcompat:1.6.1")
}
运行与验证
- 在Android Studio中,选择已创建的 Automotive 模拟器,点击 Run 按钮(绿色三角形)。
- 等待Gradle同步与构建完成,应用将自动安装并启动到模拟器中。
- 验证通过条件:模拟器横屏显示应用界面,TextView中显示文本
车载环境搭建成功,且SDK版本为31或更高,NDK状态显示可用(x86_64或arm64-v8a)。
常见问题
- 模拟器启动失败:确认已安装
Android 12 (Automotive)系统镜像,且电脑开启硬件加速(Intel HAXM或AEHD)。 - NDK未检测到:在SDK Manager中确认NDK已安装,并在
local.properties中设置ndk.dir指向NDK路径(通常自动配置)。 - 清单合并冲突:若使用AndroidX库,确保
gradle.properties中包含android.useAndroidX=true。
至此,车载应用开发环境已搭建完成,项目可在车载模拟器上正常运行,为后续车载应用功能开发提供基础。