Android 应用程序自定义输入法在从 Android Studio 启动应用程序时被禁用并取消选择

问题描述 投票:0回答:1

上下文:

我正在开发一个实现自定义输入法(自定义键盘)的应用程序。它构建得很好,我可以手动启用并切换到键盘,但每次我从 Android Studio 启动应用程序时,它都会被禁用和取消选择,然后我必须再次挖掘设置,等等。

我知道有命令可以使用 ADB 重新启用它:

adb -d shell ime enable com.example.app/.services.Keyboard

adb -d shell ime set com.example.app/.services.Keyboard

我想在应用程序安装和应用程序启动之间运行这些,但我不知道到底在哪里配置它。

我已经尝试过:

添加自定义 Gradle 任务

我将此添加到我的

build.gradle.kts

afterEvaluate {
    tasks.register("enableKB", Exec::class) {
        val adbPath = android.sdkDirectory.resolve("platform-tools/adb").toString()
        commandLine(
            adbPath,
            "-d",
            "shell",
            "ime enable com.example.app/.services.Keyboard"
        )
        commandLine(
            adbPath,
            "-d",
            "shell",
            "ime set com.example.app/.services.Keyboard"
        )
    }

    tasks.named("installDebug").configure {
        finalizedBy("enableKB")
    }
}

这不会执行任何操作(我认为

installDebug
任务从未被调用过)

如果我将其添加为应用程序配置中的

Before Launch
步骤,它将到达第二个命令(设置键盘的位置)并失败并显示
Unknown input method com.example.app/.services.Keyboard cannot be selected for user #0
。似乎第一个命令已运行,但键盘也已设置。

添加额外的运行配置

我尝试在 Android Studio 运行配置中添加 shell 脚本,并将应用程序运行作为先决条件,但应用程序运行被阻止。

我的想法:

我认为在安装应用程序后我需要使用 ADB 命令,因为安装应用程序似乎会重置输入法的状态。似乎运行配置在一大步中完成了安装/启动,我不确定在哪里添加这些命令,或者是否有更好的方法。

android android-studio gradle android-input-method
1个回答
0
投票

我想通了。有几个步骤。

首先需要单独调用

commandLine
任务。

tasks.register("enableKB", Exec::class) {
    val adbPath = android.sdkDirectory.resolve("platform-tools/adb").toString()
    commandLine(
        adbPath,
        "-d",
        "shell",
        "ime enable com.varrett.keybrrrrd/.services.Keyboard"
    )
}

tasks.register("setKB", Exec::class) {
    val adbPath = android.sdkDirectory.resolve("platform-tools/adb").toString()
    commandLine(
        adbPath,
        "-d",
        "shell",
        "ime set com.varrett.keybrrrrd/.services.Keyboard"
    )
    dependsOn("enableKB")
}

然后,需要手动启动应用程序(我会在一秒钟内解释。)这可以挂在

installDebug

的末尾

tasks.register("startDebug", Exec::class) {
    val adbPath = android.sdkDirectory.resolve("platform-tools/adb").toString()
    commandLine(
        adbPath,
        "-d",
        "shell",
        "am start -n com.varrett.keybrrrrd/com.varrett.keybrrrrd.main.MainActivity"
    )
    dependsOn("setKB")
}

afterEvaluate {
    tasks.named("installDebug").configure {
        finalizedBy("startDebug")
    }
}

然后需要更改应用程序配置。 需要禁用安装和启动选项,因为它们会以某种方式干扰设置键盘的命令。

Gradle Aware Make
也必须删除;它会干扰自定义构建步骤。可以手动选择
installDebug
(或其他一些任务)作为“启动前”步骤。

enter image description here

当我可以只使用 Gradle 任务时,为什么我还要使用 Android 应用程序配置?因为我需要自动附加 logcat。

这是我现在能想到的最好的办法。我对我的发现有更好的解释,但是我的答案中途下降了,我失去了一半。

© www.soinside.com 2019 - 2024. All rights reserved.