はじめに
React Nativeのrun-androidコマンドはPCに接続したAndroid端末すべてにapkをインストールします。
一方で--deviceId
でデバイスIDを指定すると特定のAndroid端末だけにapkをインストールできます。
ですがデバイスID指定ありとなしでは実行されるGradleタスクに違いがあったので調べた結果をまとめました。
バージョン
- @react-native-community/cli-platform-android: 4.9.0
実行されるタスクの調査方法
react-native
コマンドの --verbose
オプションを指定すると実行されるコマンドが分かるのでこれで確認します。
デバイスIDを指定しない場合
$ react-native run-android --verbose
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 1041 file(s) to forward-jetify. Using 8 workers...
info JS server already running.
info Installing the app...
debug Running command "cd android && gradlew.bat app:installDebug -PreactNativeDevServerPort=8081"
app:installDebug
タスクが実行されています。これはアプリをビルドして全Android端末にapkをインストールします。
デバイスIDを指定する場合
$ react-native run-android --verbose --deviceId xxxxx
info Running jetifier to migrate libraries to AndroidX. You can disable it using "--no-jetifier" flag.
Jetifier found 1391 file(s) to forward-jetify. Using 8 workers...
info JS server already running.
info Building the app...
debug Running command "gradlew.bat build -x lint"
build
タスクが実行されています。これはアプリのビルド、テスト、Javadocのビルドなどが実行されます。
更に--tasks
オプションでタスクを指定しても反映されないのでビルド以外のタスクを除外できません。
apkビルドだけで特定の端末にインストールしたい
現状はオプションなどで変更できないので以下のどちらかしかなさそうです。
- インストールしたくないAndroid端末の電源を切るかUSBケーブルを抜く
-
node_modules/@react-native-community/cli-platform-android/build/commands/runAndroid/index.js
のbuildApk
内の"build"
を"assembleDebug"
に書き換える
以下のPull Requestが取り込まれるとビルドコマンドが統一されてassembleDebug
タスクに置き換わるので将来的には解消しそうです。