開発サーバーなしでデバイスに署名なしapkをビルドしてインストールしますか?


166

私は反応ネイティブの初心者なので、手順に問題がある場合はお知らせください。

ドキュメントに従ってコマンドを使用して、反応するネイティブAndroidアプリを作成しました

反応ネイティブのアンドロイド

デバイスで実行中に次のコマンドが使用されました

反応ネイティブ実行アンドロイド

私のプロジェクトフォルダ/ android / app / build / outputs / apkにある2つのapkファイルの出力を私に与えます

ここに画像の説明を入力してください

インストール後にこのapkをインストールするために使用するとき、JSをバンドルするために接続する開発サーバーを要求します。しかし、私の要件は、ユーザーがapkをインストールする必要があるだけで開発サーバーと格闘する必要がなく、すべてが完了していることです。

いくつかのスタックオーバーフローの質問を通過しましたが、開発サーバーを必要としない署名されていないapkの作成には役立ちません。

React NativeでAPKを作成して署名しない方法を見つけるのを手伝ってくれませんか?


1
'react-native start'を実行すると、jsバンドルが開発モードで提供されます。目的は、その場でjsファイルを編集できるようにすることです。リリースモードには、必要なバンドルが含まれているため、サーバーを必要としません。下記の回答を参照してください
kar

回答:


250

デバッグビルド用のバンドルを手動で作成する必要があります。

バンドルデバッグビルド:

#React-Native 0.59
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/src/main/assets/index.android.bundle --assets-dest ./android/app/src/main/res

#React-Native 0.49.0+
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

#React-Native 0-0.49.0
react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

次に、バンドル後にAPKをビルドします。

$ cd android
#Create debug build:
$ ./gradlew assembleDebug
#Create release build:
$ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`

PS別のアプローチはgradleスクリプトを変更することかもしれません。


3
誰かが資産を失っている場合:これは私にとってはうまくいった--assets-dest ./android/app/src/main/res/
Juan Solano '10

11
これを行うと、アプリを起動したときに大きな赤い画面が表示されますか?(注:イジェクトした直後にこれを実行しています)
Simon Forsberg 2017

3
index.android.jsがないため、最新バージョンのビルドを取得するにはどうすればよいですか?
Vivek 2017年

9
最新バージョンの人は、エントリポイントを--entry-file index.jsに変更してください。
Rishabh Bhatia

4
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest。 / android / app / build / intermediates / res / merged / debug( index.jsがiosとandroidに統合された新しい反応バージョンの場合
ir2pid

100

これらの手順に従ってください。

あなたのjsをバンドルしてください:

プロジェクトルートにindex.android.jsがある場合は、実行します

react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

プロジェクトルートにindex.jsがある場合は、実行します

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

デバッグAPKを作成します。

cd android/
./gradlew assembleDebug

次に、ここにあなたのapkを見つけることができます:

cd app/build/outputs/apk/

11
これを行うと、アプリを起動したときに大きな赤い画面が表示されますか?(注:イジェクトした直後にこれを実行しています)
Simon Forsberg、2017

2
あなたが使用している場合@SimonForsbergは、代わりにApp.jsまたはindex.android.jsのindex.jsにエントリポイントを変更する、0.5 ^反応 react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
d.bayo

3
動作していません。このコマンドはapkをビルドしていますが、そのapkはパッケージャーサーバーなしでは実行されていません。
Vishal Chhodwani

1
開発

1
同じ問題が発生しています。デバッグAPKを生成するときにインストールできますが、開発サーバーが必要です。また、リリースAPKを使用すると、電話にインストールできませんでした。何がわからないのですか。それは間違っています
aName

61

最新のアップデート

ルートプロジェクトディレクトリ

すでにディレクトリandroid / app / src / main / assets /があることを確認します。ディレクトリが作成されていない場合は、新しいファイルを作成して保存しindex.android.bundle、このandroid / app / src / main / assets / index.androidのようにファイルを保存します。。バンドル

その後、これを実行します

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/

cd android && ./gradlew assembleDebug

次にapkapp / build / outputs / apk / debug / app-debug.apkにアクセスできます


この回答は本当に効果的です。ありがとうございました
aName

この回答は本当に効果的です。ありがとうございました
aName

@jeeva:アプリケーションを反応ネイティブの開発サーバーに戻す方法は?
Mayur Baldha

作成するポイントindex.android.bundleは、ホストで開発サーバーを使用しない場合に非常に重要です。
Lee Elton、

@ Mayur Balha:usbまたはwifi(同じネットワークで接続)を介して接続できます。WiFiの場合は、reactアプリのサーバーに接続してエミュレーターでモバイルをシェイクし、Win + Rを押してからdev設定をクリックします。「Debug Server Host&Port」を下にスクロールして、IPアドレスとポートを入力します(windowsで開くcmdで「ipconfig」またはMacを開く)端末は "ifconfig"のように入力します)192.168.1.1:8080のように入力してから、もう一度okを押してシェイクするか、エミュレーターの場合はWin + Rを押してリロードを押します。アプリが開発に接続していることがわかります(リリースApkではなく、デバッグでのみ機能します)。
Jeeva

29

私と一緒に、プロジェクトディレクトリで次のコマンドを実行します。

ネイティブの古いバージョンを反応させるには(ルートにindex.android.jsが表示されます):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew clean assembleRelease && cd ../

ネイティブの新しいバージョンを反応させるには(ルートにindex.jsが表示されるだけです):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew clean assembleRelease && cd ../

apkファイルは次の場所に生成されます:

  • Gradle <3.0:android / app / build / outputs / apk /
  • Gradle 3.0以降:android / app / build / outputs / apk / release /

少し詳しく説明してもらえますか、そしてそれはどのように問題を解決しますか?
Priyal 2017

index.android.bundleでエラーが発生しましたが、あなたの提案で解決しました。ありがとう... :)
ゼファー

6
私にとっては$ mkdir -p android/app/src/main/assets && rm -rf android/app/build && react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && cd android && ./gradlew assembleDebug
アリフ

ファイルが見つかりません:プロジェクトルートのいずれかに
index.android.js

1
の代わりに、プロジェクトディレクトリのルートにある新しいプロジェクトに--entry-file index.android.js置き換える必要があることに注意してください。--entry-file index.jsindex.jsindex.android.js
daka

8

最初の応答を実行した後、次を使用してアプリを実行できます

react-native run-android --variant=debug

そしてあなたのアプリはパッケージャを必要とせずに実行されます


1
最も単純な答えはずっと最も効率的で、完璧に機能し、さまざまなコマンドラインと大量のjs構成をテストするのに何日も費やし、すべてが再開されました
Nicolas Silva

4

反応ネイティブ0.57以降、gradleがバンドルとアセットを見つけることを期待しているディレクトリが変更されたため、以前に提供された回答はどれも機能しなくなりました。

反応ネイティブバンドルなしのシンプルな方法

デバッグビルドをビルドする最も簡単な方法は、react-native bundleコマンドをまったく使用せずに、単にapp/build.gradleファイルを変更することです。

ファイル内のproject.ext.reactマップ内app/build.gradleに、bundleInDebug: trueエントリを追加します。あなたはそれがないようにしたい場合は--dev、ビルド(警告なしと縮小さバンドル)その後も追加する必要がありdevDisabledInDebug: true、同じマップにエントリを。

反応ネイティブバンドルを使用

何らかの理由でreact-native bundleコマンドを使用してバンドルを作成する必要がある場合、またはを使用./gradlew assembleDebugしてバンドルとアセットを含むAPKを作成する場合は、バンドルとアセットを正しいパスに配置する必要があります。それらを見つけます。

反応ネイティブ0.57以降、これらのパスは android/app/build/generated/assets/react/debug/index.android.jsバンドル用です

そしてandroid/app/build/generated/res/react/debug資産のために。したがって、手動でバンドルして、バンドルとアセットでAPKをビルドするための完全なコマンドは次のとおりです。

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/generated/assets/react/debug/index.android.bundle --assets-dest ./android/app/build/res/react/debug

その後

./gradlew assembleDebug

バンドルとアセットのパス

Gradleがバンドルとアセットを探すパスは変更される可能性があることに注意してください。これらのパスの場所を確認するには、ディレクトリreact.gradle内のファイルを確認してくださいnode_modules/react-native。で始まる行とdef jsBundleDir =def resourcesDir =gradleがバンドルとアセットをそれぞれ探すディレクトリを指定します。


3

Windowsユーザーの場合、すべての手順がこれから適切に実行された場合:https : //facebook.github.io/react-native/docs/signed-apk-android.html

あなただけを実行する必要があります: gradlew assembleRelease

そしてあなたのファイルは:

  • app-release.apk
  • app-release-unaligned.apk

ロケーション: E:\YourProjectName\android\app\build\outputs\apk


app-release.apkを任意のデバイスにインストール/共有できます
Dharam Mali

2
通常、デバッグビルドの構成はリリースビルドとは異なります(ステージングAPIを使用するなど)。リリースとは異なるビルド構成を使用するスタンドアロンAPKが必要な場合、これは役に立ちません
Josh

このAPKは、開発/テスト専用です。
Dharam Mali

3

私はネイティブの0.55.4を反応させています、基本的に手動でバンドルする必要がありました:

react-native bundle --dev false --platform android --entry-file index.js --bundle- 
output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets- 
dest ./android/app/build/intermediates/res/merged/debug

次に、USB経由でデバイスを接続し、USBデバッグを有効にします。で接続されているデバイスを確認しadb devicesます。

最後に走る react-native run-androidすると、お使いの携帯電話にデバッグAPKがインストールされ、開発サーバーで問題なく実行できます

注意:

  • 0.49.0以降、エントリポイントは単一です index.js
  • gradlew assembleRelease インストールできないリリース署名なしのAPKのみを生成します

3

テスト目的で署名なしのapkバージョンを生成して、モバイルで実行できるようにすることができます。

ここで最も言及されているように、最初に赤い画面エラーが発生しました。しかし、私はここで言及されたのと同じことを続け、それは私のために働いた。

作業ディレクトリのコンソールで、次の4つのコマンドを実行します

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

cd android

gradlew assembleDebug

gradlew assembleRelease

APKファイルは次の場所に生成されます:android \ app \ build \ outputs \ apk \ debug \ app-debug.apk


3

他の誰かが最近同じ問題に遭遇している場合に備えて、私はReact Native 0.59.8(RN 0.60でもテスト済み)を使用しています。他の回答のいくつかを確認できます。手順は次のとおりです。

  1. デバイスにインストールされているアプリの最新のコンパイル済みバージョンをアンインストールします

  2. 走る react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

  3. 走る cd android/ && ./gradlew assembleDebug

  4. android / app / build / outputs / apk / debugフォルダーにapp-debug.apkを取得します

幸運を!


1
動作しません!!!、デバッグAPKが生成されますが、アプリには引き続き開発サーバーが必要です
aName

これは、gradleがバンドルが存在android/app/build/generated/assets/react/debug/index.android.jsし、アセットandroid/app/build/generated/res/react/debugがreact-native 0.57以降にあると想定しているため、react-native 0.59.8では機能しません。
TheBaj

反応ネイティブ0.60で問題なく動作します>
Moso Akinyemi

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.