はじめに
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タスクに置き換わるので将来的には解消しそうです。