[android]_[adb启动服务]

本文详细阐述如何通过ADB命令直接启动Android服务,无需手动开启应用。内容包括服务类的创建、Mainfest配置、ADB启动服务的命令以及如何防止服务重复启动的实现方法。

本文介绍如何直接在adb中启动服务(无需手动打开app)。

一、创建服务类

首先创建一个服务类并在启动的时候打印内容到Log方便观察,代码如下:

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i("============","WTF");
        return super.onStartCommand(intent, flags, startId);
    }
}

二、Mainfest文件中

<service
    android:name=".MyService"
    android:enabled="true"
    android:exported="true">
</service>

三、ADB启动服务

输入如下命令启动服务:

adb shell am startservice 包名/服务类路径

如图:
这里写图片描述

表示启动成功,编译器也会打印信息如下:
这里写图片描述

四、防止重复启动服务

若第二次启动同一个服务则会调用再次调用onStartCommand,而onCreate只会在第一次启动的时候调用,所以为了避免重复执行相同的逻辑代码,可以把逻辑代码放在服务的onCreate中执行。
代码如下:

    @Override
    public void onCreate() {
        Log.i("============","start service");
        try {
            Thread.sleep(5000);
        }catch (Exception e)
        {

        }
        super.onCreate();
    }

Activity中启动服务:

Intent intent = new Intent(this,MyService.class);
startService(intent);

手动启动app后打印出信息,然后再在adb中启动后没有重复输出信息,验证成立。

### 解决 ADB 和 Emulator 命令中的错误 #### 1. 处理 `unknown command emulator` 错误 此错误通常是因为尝试将 `emulator` 作为 ADB 的子命令使用,而实际上 `emulator` 是 Android SDK 中独立的工具。要启动模拟器,应直接使用以下命令: ```bash $HOME/Android/Sdk/emulator/emulator -avd <AVD_NAME> -writable-system -selinux disabled -qemu -enable-kvm[^1] ``` 这里的 `<AVD_NAME>` 是您创建的虚拟设备名称。 #### 2. 解决 `Unknown AVD name` 错误 当出现 `Unknown AVD name` 错误时,通常是因为指定的 AVD 名称不存在或路径配置不正确。可以通过以下方法验证和修复: - 确认 AVD 是否已创建并检查其名称: ```bash ls ~/.android/avd/ ``` 这将列出所有已创建的 AVD 配置文件。 - 如果 AVD 存在但无法识别,可能需要设置 `ANDROID_SDK_ROOT` 和 `ANDROID_AVD_HOME` 环境变量: ```bash export ANDROID_SDK_ROOT=$HOME/Android/Sdk export ANDROID_AVD_HOME=$HOME/.android/avd ``` #### 3. 配置 AVD 路径以解决模拟器问题 如果模拟器无法正常启动或识别 AVD,可以手动指定 AVD 路径。例如: ```bash emulator -avd dev_adb -datadir /path/to/custom/avd/directory[^1] ``` 确保 `-datadir` 指向正确的 AVD 配置文件路径。 #### 4. 使用 ADB 管理模拟器设备 虽然 ADB 不支持直接启动模拟器,但可以通过以下命令管理已启动的模拟器设备: - 列出所有连接的设备: ```bash adb devices ``` - 连接到特定设备: ```bash adb -s emulator-5554 shell ``` 如果设备未显示,请确保模拟器已成功启动,并检查是否启用了开发者模式和 USB 调试功能。 #### 5. 示例:自动化脚本启动 AVD 并配置系统权限 以下是一个示例脚本,用于启动 AVD 并配置系统权限: ```bash #!/bin/bash # 启动模拟器 $HOME/Android/Sdk/emulator/emulator -avd testAVD -writable-system -selinux disabled -qemu -enable-kvm & # 等待模拟器启动 sleep 30 # 配置 ADB 权限 adb root && adb remount adb shell su --daemon & ``` #### 6. 确保兼容性和更新工具 为避免兼容性问题,请确保 ADB 和模拟器工具版本最新。可以通过以下命令检查版本: ```bash adb version emulator -version ``` 如果版本过旧,建议从 Android SDK Manager 更新相关工具[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值