そーす

福岡在住。iOS/Androidアプリ, Webフロントエンドのエンジニアです。Swift, Kotlin, JavaScript, ReactNative

AndroidのカスタムOSが使われている端末でDevメニューが出ない時の対処

もー、クソん。

Oppo。

KeyEvent.KEYCODE_MENU(82番) がシステム側で受け取られててアプリまで来ない。

ちなみにOppoはシェイクしてもDevモード出ない。

しかたなく他の空いているキーコードをアプリで受け取って書き換えることに…

処理は簡単で、ReactActivity内でonKeyUp(int keyCode, KeyEvent event)をオーバーライドするだけ。

とりあえず300番代は空いていたので300を設定してみた。

public class MainActivity extends ReactActivity {

    /**
     * Returns the name of the main component registered from JavaScript.
     * This is used to schedule rendering of the component.
     */
    @Override
    protected String getMainComponentName() {
        return "MyApp";
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        MainApplication.getCallbackManager().onActivityResult(requestCode, resultCode, data);
    }

    // 追加
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        return super.onKeyUp(keyCode == 300 ? KeyEvent.KEYCODE_MENU : keyCode, event);
    }
}
> adb shell input keyevent 300

これでデバッグできる。