上下文:
我正在开发一个实现自定义输入法(自定义键盘)的应用程序。它构建得很好,我可以手动启用并切换到键盘,但每次我从 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 命令,因为安装应用程序似乎会重置输入法的状态。似乎运行配置在一大步中完成了安装/启动,我不确定在哪里添加这些命令,或者是否有更好的方法。
我想通了。有几个步骤。
首先需要单独调用
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
(或其他一些任务)作为“启动前”步骤。
当我可以只使用 Gradle 任务时,为什么我还要使用 Android 应用程序配置?因为我需要自动附加 logcat。
这是我现在能想到的最好的办法。我对我的发现有更好的解释,但是我的答案中途下降了,我失去了一半。