At the moment, the default choice of input methods for Android apps in Chrome OS seems to be limited to either the physical keyboard, or the built-in Chrome OS virtual keyboard. Installing a third party Android IME and clicking on its 'Enable' button (which, on Android phones and tablets, usually brings up the Languages and Input dialog where third party IMEs can be enabled), brings up CrOS' own 'Languages and Input' settings dialog, usually found at chrome://settings/languages, rendering it impossible to choose a third party input method for Android apps this way.
However, I found that it is possible to enable third party input methods (such as 'Hacker's Keyboard' or 'Gboard') via the shell/terminal. Once the third party input method has been added to the list of enabled Android input methods, it can be selected as the default input method for Android apps.
I already had 'Hacker's Keyboard' (HK) installed on the Android instance but had not been able to enable it, as it didn't seem to be possible to open the Android 'Languages and Input' settings dialog.
<!-- Disallow third-party IME apps in favor of ARC IME. -->
<unavailable-feature name="android.software.input_methods" />
However, it turns out that editing this isn't necessary.
I discovered the following while playing around in the Android terminal emulator (Doing it that way requires root). However, I also tested doing it through Chrome OS via adb, which should be possible without a rooted Android instance. Here's what I did:
1. Enabled ADB debugging in the Android Developer options
2. Opened Chrome OS shell (Ctrl_Alt+T, type shell), and connected to the Android instance with:
adb connect 100.115.92.2
3. Agreed to the RSA authentication dialog popup (ticked the box).
4. To check currently enabled input methods I entered:
adb shell settings get secure enabled_input_methods
which returned: org.chromium.arc.ime/.ArcInputMethodService
5. Added HK to the list of enabled input methods by entering the following into the Chrome OS shell (all one line):
adb shell settings put secure enabled_input_methods org.pocketworkstation.pckeyboard/.LatinIME:org.chromium.arc.ime/.ArcInputMethodService
I then opened the Hacker's Keyboard app via the search button/launcher,`and tapped 'Set input method', which brought up the Android IME picker, where HK was now visible. Picked it as the default, and hit the "show keyboard when a physical keyboard is active" switch and it appeared!
Here's what it looks like in Firefox in tablet mode:
Caution is advised if enabling third party Android input methods this way - I found that HK mostly seemed to function as expected in tablet mode, working perfectly with some Android apps that I tried such as Firefox, e.g. popping up when a text input box was highlighted, then disappearing when I tapped away from the text input box allowing me to navigate by touch normally by dragging to scroll, tapping links, etc, and reappearing if an input box was highlighted again.
However, in other apps, e.g. Terminal Emulator, the interaction seemed perhaps a little buggy; scrolling initially didn't work (but started working after I did a few things (fiddled with the 'Window Size and Orientation' settings in Android's 'Developer Options/maximised HKs parent app/rebooted), and after closing the keyboard, it didn't immediately pop up again when tapping in an input field.
Due to the latter issue, I found it necessary to customize the settings a little; in the Chrome OS shell, I entered
adb shell am start -n org.pocketworkstation.pckeyboard/.PrefScreenActions
which brought up HKs 'Gesture and key actions' preference page. For the gesture 'Swipe Left', I chose 'Launch Settings', and for the gesture 'Swipe Right', I chose 'Close keyboard'. I then went back to the Hacker's Keyboard app and disabled extra languages for ease of swiping left/right over the spacebar.
Finally, I opened up the keyboard's main settings dialog by swiping left over the spacebar area, and ticked the 'Use permanent notification' box so that, should it not pop up automatically in any Android apps, it may still be activated simply by tapping the notification.
Rather than setting up a swipe gesture, for the purpose of opening the settings dialog to enable the permanent notification, I could instead have entered
adb shell am start -n org.pocketworkstation.pckeyboard/.LatinIMESettings
to bring it (HKs main settings dialog activity) up.
For testing purposes, I also tried installing Gboard from the Play Store. Again, it can be chosen as a default input method for Android apps, once its string has been added to enabled_input_methods:
i.e. in my case I entered (all one line):
adb shell settings put secure enabled_input_methods org.pocketworkstation.pckeyboard/.LatinIME:org.chromium.arc.ime/.ArcInputMethodService:com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME
Gboard worked OK but was not perfect; sometimes taking over the screen - the lack of a 'back' button in tablet mode being something of an issue (swiping down not seeming to work to disable it).
I think I'll keep Hacker's Keyboard enabled for the moment, if I get time I might try out some alternatives. All in all, it works quite well. The only real issue now is that I haven't figured out if there's a way to get it auto-resizing properly e.g. on screen rotate, with the current OS version. I just reverted to CrOS v59 temporarily to check something unrelated, and the auto-resizing works perfectly in v59 (Android 6.0.1) with every app I tested, so it's either a vagary of the current N multiwindow support, or one of the settings that I changed in 'Developer options'.