3、第一个车载应用:创建车载项目、了解AndroidManifest.xml配置、运行到模拟器

好,咱们开始动手了。

前面两章聊了车载Android的背景和开发环境搭建,说实话,那些都是热身。这一章才是真正的「Hello World」——我们要亲手创建第一个车载应用,把它跑起来。

我个人习惯是,学任何新平台,先让一个空应用在屏幕上亮起来。哪怕它什么都不做,那种「我能控制它了」的感觉,特别重要。

3.1 创建车载项目

打开Android Studio,点「New Project」。这里有个坑——别选错模板。

普通手机应用选「Empty Activity」就行,但车载项目我建议选「No Activity」。为什么?因为车载应用的入口往往不是Activity,而是CarService或者MediaBrowserService。不过咱们是入门,先选「Empty Activity」也没问题,后面再改。

关键配置项:

  • Package Name: 建议用 com.yourcompany.carapp 这种格式
  • Minimum SDK: 车载一般选 API 29 (Android 10) 起步
  • Language: Kotlin 是首选,Java 也行,但我个人推荐 Kotlin

项目创建后,你会看到一堆文件。别慌,咱们重点关注三个:

  • build.gradle (Module: app) —— 项目的构建配置
  • AndroidManifest.xml —— 应用的「身份证」
  • MainActivity.kt —— 入口界面

嗯,这里要注意:车载应用和手机应用在build.gradle里有个区别——需要添加androidx.car.app:app依赖。我刚开始做车载开发时,忘了加这个,结果跑起来直接崩溃,找了半天原因。

// build.gradle (Module: app)
dependencies {
    implementation 'androidx.car.app:app:1.3.0'
    implementation 'androidx.core:core-ktx:1.9.0'
    // ... 其他依赖
}

3.2 AndroidManifest.xml 配置——别小看它

AndroidManifest.xml 是每个Android应用的「户口本」。系统启动你的应用前,会先读这个文件。配置错了,应用根本跑不起来。

车载应用和手机应用在Manifest上有几个关键区别:

配置项 手机应用 车载应用
启动Activity 标准Activity 需要CarAppService
权限声明 普通权限 可能需要车载专属权限
硬件特性 触摸屏 方向盘、旋钮等

来看一个最简的车载Manifest配置:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.carapp">

    <!-- 车载应用需要声明汽车特性 -->
    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <application
        android:allowBackup="true"
        android:label="我的车载应用"
        android:supportsRtl="true"
        android:theme="@style/Theme.CarApp">

        <!-- 车载应用的主入口 -->
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>

我曾经踩过的坑:

有一次我忘了加 uses-feature android:name="android.hardware.type.automotive",结果应用在车载模拟器上根本搜不到。系统认为这是个手机应用,直接过滤掉了。找了整整一下午,最后发现是这行配置的问题。

另外,android:exported="true" 这个属性在Android 12之后必须显式声明。我见过不少新手因为这个报错,一脸懵。

3.3 运行到模拟器

好,代码写完了,Manifest配好了。接下来就是见证奇迹的时刻——跑起来。

首先,你得有一个车载模拟器。如果你按第二章的教程配置好了,现在应该能看到一个带车载界面的模拟器。如果没有,赶紧回去配一下。

运行步骤很简单:

  1. 在Android Studio顶部工具栏,选择你的车载模拟器设备
  2. 点击绿色三角形「Run」按钮
  3. 等待编译和部署

但这里有个常见问题——编译速度慢。尤其是第一次,Gradle要下载一堆依赖。我建议你泡杯咖啡,或者去个洗手间。嗯,真的需要点耐心。

提速小技巧:

  • 在 gradle.properties 里加上 org.gradle.parallel=true
  • 使用 --offline 模式(如果依赖已经下载过)
  • 把模拟器的 RAM 调到 2GB 以上,不然卡到你怀疑人生

应用部署成功后,模拟器上会弹出你的应用界面。如果一切顺利,你会看到一个空白的Activity——这就是你的第一个车载应用。

说实话,我第一次在车载模拟器上看到自己的应用时,还挺激动的。虽然它什么都没做,但那种「我能控制车载系统了」的感觉,真的很棒。

3.4 常见问题与避坑指南

运行过程中,你可能会遇到这些问题:

  • 「INSTALL_FAILED_MISSING_SHARED_LIBRARY」 —— 忘了加 uses-feature automotive
  • 「ActivityNotFoundException」 —— Activity 没在 Manifest 里注册
  • 「模拟器黑屏」 —— 可能是 GPU 渲染问题,试试关闭硬件加速

我曾经遇到一个特别诡异的问题:应用在模拟器上能跑,但一放到真车上就闪退。查了半天,发现是车载系统的API版本比模拟器低,我用了高版本的API。从那以后,我养成了一个习惯——开发时就把targetSdkVersion设成和车载系统一致

好了,到这里,你的第一个车载应用已经成功跑起来了。虽然它还很简陋,但别急,后面我们会一步步给它加上导航、音乐、电话这些真正的车载功能。

下一章,我们来聊聊车载应用的界面设计——和手机完全不一样的那套东西。