サーバーなしで実行できるapkをreact-nativeで生成するにはどうすればよいですか?


210

私は自分のアプリを作成しました。ローカルエミュレーター(およびデバッグサーバーを変更して、同じネットワーク内のAndroidデバイスでも)で実行できます。

ただし、開発サーバーにアクセスせずに誰かに送信できるAPKを作成し、アプリケーションをテストできるようにしたいと考えています。

ドキュメントの「iOSでのオフラインバンドルの使用」セクションが表示されます。しかし、私はアンドロイドのために同じことを達成する方法を理解することができませんでした。これは可能ですか?もしそうなら、どうですか?

更新:この質問への回答(AndroidはJSバンドルのロードに失敗しました)では、オフラインバンドルを開発サーバーからダウンロードできると言われています。しかし、開発サーバーからバンドルを取得すると、画像ファイルをロードできません。


この簡単な例を確認してapkファイルを生成します。WindowsコマンドプロンプトAndroidを介してネイティブジェネ
レート

回答:


203

Aditya Singhの回答に従って、生成された(署名されていない)apkが私の電話にインストールされません。こちらの手順に従って、署名済みのAPKを生成する必要がありまし

以下は私のために働きました:

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

プロジェクトフォルダーのディレクトリのmy-release-key.keystore下にファイルを配置しandroid/appます。次に、ファイル~/.gradle/gradle.propertiesを編集し て以下を追加します(****を正しいキーストアパスワード、エイリアス、およびキーパスワードに置き換えます)

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****

MacOSを使用している場合は、プレーンテキストで保存する代わりに、ここの手順を使用してパスワードをキーチェーンに保存できます。

次にapp / build.gradleを編集し、以下が存在することを確認します(signingConfigsを含むセクションsigningConfigを追加する必要がある場合があります):

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

次に、コマンドを実行しcd android && ./gradlew assembleRelease

Windows 'cd android'の場合は、gradlew assembleReleasecommand を実行し、署名された apkを以下で見つけますandroid/app/build/outputs/apk/app-release.apk


10
これが最新かつ正確な答えです。ありがとう。
Gokhan Sari

2
app-release.apkがインストールされていません。何が問題でしょうか?
バラブラマニアン

1
apkを作成し、Google Playにアップロードしましたが、機能しません...ヒントがありますか?
Italo Rodrigo

2
android / appフォルダーが見つかりません。これはどこにありますか?
DHLopez 2018

6
ありがとう、そうではありませんでしたが、テストにexpoを使用しているためであり、ネイティブアプリの作成npmの構造が異なるため、後で参照できるように、誰かがこの問題を抱えている場合は、プロジェクトを削除してください。それらのフォルダー、チュートリアルがnpmを使用してアプリを作成するように指示し、それを使用するときに存在しない構造について話す方法が面白い
DHLopez

194

APKに署名するためのキーを作成する必要があります。以下を使用してキーを作成します。

 keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000

プロンプトが表示されたらパスワードを使用する

キーが生成されたら、それを使用してインストール可能なビルドを生成します。

 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/

Gradleを使用してビルドを生成する

 cd android && ./gradlew assembleRelease

APKを携帯電話にアップロードします。-r(存在する場合)フラグは、既存のアプリに置き換えられます

adb install -r ./app/build/outputs/apk/app-release-unsigned.apk

より詳細な説明はここで言及されています:https : //facebook.github.io/react-native/docs/signed-apk-android.html

更新:@shashuecおよび@Fallenのコメントに基づく

エラーが発生した場合

ENOENT:そのようなファイルやディレクトリはありません。「android / app / src / main / assets / index.android.bundle」を開きます

mkdir android / app / src / main / assetsを実行します


4
これを本当にありがとう、それは私のために働いた。私が得た唯一の問題は次のメッセージでした:「必要な引数がありません:bundle-output」en react-native-bundleの部分ですが、2つの「\」記号を削除することで解決します
guinunez

58
彼らが完全にreact-native bundle一部を省略したFacebookの貧弱なドキュメントに私は驚いています。ご回答有難うございます!
テクノフィル2016

2
私はウィンドウで作業していますが、これgradlew.bat assembleReleaseでも動作します。
Tabares 2016

12
このエラーが発生しますFailure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 。APKをインストールしようとしたとき。
developernaren

18
あなたはエラー取得する場合ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle' 、実行mkdir android/app/src/main/assets
shashuec

31

このプロセスにはAndroid Studioを使用する必要があります。単純です。しかし、最初にこのコマンドをreactネイティブアプリディレクトリで実行します。

新しいバージョンのreact-nativeの場合(たとえば、react native 0.49.0など...)

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

古いバージョンのreact-native(0.49.0以下)の場合

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/

次に、android studioを使用して、ネイティブアプリディレクトリに反応する「android」フォルダーを開きます。gradleやその他のアップグレードが要求されます。ビルド->署名済みAPKの生成に移動し、そこからの指示に従います。それは本当に簡単です。


私はまた、Android StudioとXcodeを使用して、React Nativeアプリのリリースバージョンを構築しています...しかし、Android生成は、@ Aditya Singh
WiRa

これはもはや必要ではありませんproandroiddev.com/...
onmyway133

30

次のコマンドを実行します。

react-native run-android --variant=release

での--variant=release署名を設定した場合にのみ使用できることに注意してくださいcd android && ./gradlew assembleRelease


@jasan私はここにあなたのような別の問題を見つけました:github.com/facebook/react-native/issues/11586 これは問題を修正するかもしれません:cd android && ./gradlew installRelease
Ahmed Ashraf

cd android && ./gradlew installReleaseはこのエラーを試してみましたTask 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
ThomasReggi

はい、キーストアファイルを生成する必要があります。そしてgradleファイルを編集します。この問題を修正するには、以下の手順に従ってください。facebook.github.io/react-native/docs/signed-apk-android.html
Ahmed Ashraf

21

React Native 0.49以降の場合

あなたはターミナルのプロジェクトディレクトリに行き、そのコマンドを実行する必要があります

1 - mkdir android/app/src/main/assets
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

0.49未満の場合

  1 - mkdir android/app/src/main/assets
  2 - 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

次に、android studioを使用して、ネイティブアプリディレクトリに反応する「android」フォルダーを開きます。gradleやその他のアップグレードが要求されます。ビルド->署名済みAPKの生成に移動し、そこからの指示に従います。そのオーケー。


これは、Android Studioがインストールされている場合に簡単に実行できる方法です(キーストアの使用または作成を処理します)。ありがとう。
leosok 2018年

ちょっと..簡単な質問があります..上記の手順が必要ですか?..ネイティブドキュメントはどこにも言及していない反応
pravin

1
@pravin必須ではありませんが、apkを生成する方法の1つです。
Yasin Ugurlu

12

あなたが得る場合Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

署名なしのAPKファイルを生成してインストールする@Adityaの方法を使用してみましたが、Androidタブレットにインストールしようとすると、のエラーが発生しましたFailure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

これは、APKファイルが署名されておらず、タブレットがこれに満足していないためだと思います。そのため、React Nativeバンドルファイルを生成した後、通常どおりAndroid Studioを介して署名済みAPKファイルを生成することができました。

ちなみに、私たちのアプリはPlayストアに既に存在する完全に機能するAndroidアプリであり、素晴らしいので、React Nativeを一口サイズで追加しています。

要約すると、ここに私のステップがありました:

1)React Nativeバンドルを生成します。

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/<your-package-name>/src/main/assets/index.android.bu‌​ndle --assets-dest android/<your-package-name>/src/main/res/ 

2)Android Studioから署名済みAPKファイルを生成します。

3)署名済みAPKファイルをUSBデバイスにインストールします。

adb -d install -r <path_to_signed_apk> 

-dフラグはちょうど告げるadbあなたはエミュレータが同様に実行されていた場合に、接続されたUSBデバイスにインストールします。エミュレータにインストールしたい場合は、-dフラグをドロップしてください。

4)利益!


11

以下をお試しください。root/ android / app / build / outputs / apk / debugフォルダーにapp-debug.apkが生成されます

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

次にandroidフォルダーに移動して実行します

./gradlew assembleDebug


ここで生成されたAPKを実行するにはMetroが必要です...ですから、まだ
開発

11

Playstoreキーなしでビルドしたい場合、このコマンドは非常に役立ちます。

# react-native run-android --variant=release

ビルド完了後、リリースビルドファイルでapkを見つけることができます。


7

プロジェクトディレクトリに移動して、次のコマンドを実行します。

cd android && ./gradlew assembleRelease

(Pedramが言ったように)必要な設定を行わなかった場合、これは未署名のapkを生成します。
Gokhan Sari

生成されたフォルダにデバッグ、リリース、署名のないapkを作成します。私の意図は、リリースAPKを共有することでした。
Sidharth Taneja 2017年

6

index.android.jsに関連するエラーが発生した場合。これは、新しいReactネイティブバージョンを使用しているためです(私は0.55.4を使用しています)「index.android.js」を「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/

5

別の解決策があります:-署名鍵の生成keytoolを使用して秘密署名鍵を生成できます。Windowsでは、keytoolはC:\ Program Files \ Java \ jdkx.x.x_x \ binから実行する必要があります。

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

my-release-key.keystoreファイルをプロジェクトフォルダーのandroid / appディレクトリに配置します。

プロジェクトフォルダーのandroid / app / build.gradleファイルを編集し、署名設定を追加します。

android {
....
signingConfigs { 
  release { 

      storeFile file('my-release-key.keystore') 
      storePassword 'yourpassword' 
      keyAlias 'my-key-alias' 
      keyPassword 'yourpassword' 

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

そして走る

gradlew assembleRelease

これにより、android \ app \ build \ outputs \ apk app-release.apkとapp-release-unsigned.apkにある2つのファイルが提供され、app-release.apkがAndroidデバイスにインストールされます。


android \ appフォルダーはどこにありますか?プロジェクトの下には表示されません(node_modulesのみが表示され、内部にはandroid / appはありません)
DHLopez

1
@DHLopezでは、純粋なReact Nativeプロジェクトを使用して、androidフォルダーにアクセスする必要があります。Expoを使用している場合は、expo取り出しを使用してExpoプロジェクトを切り離す必要があります。
fxbayuanggara

5

うまくいけば、それは新しい初心者を助けるでしょう

公式ドキュメントはこちら

コマンドの前に使用するよりもキーストアがない場合はスキップします

署名鍵/キーストアファイルの 生成keytoolを使用して秘密署名鍵を生成できます。Windowsでは、keytoolはC:\ Program Files \ Java \ jdkx.x.x_x \ binから実行する必要があります。

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

my-release-key.keystoreのようなファイルを取得します

Gradle 変数の設定 my-release-key.keystoreファイルをプロジェクトフォルダーのandroid / appディレクトリに配置します。android / gradle.propertiesファイルを編集し、次を追加します(*****を正しいキーストアのパスワード、エイリアス、およびキーのパスワードに置き換えます)。androidgradleバージョン3.0の問題として、enableAapt2 set falseは回避策です

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

android.enableAapt2=false

次に、これらのapp / buid.gradle(アプリ)を追加します

デフォルト設定以下

signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }

およびInside Buildタイプのリリース{}

 signingConfig signingConfigs.release

次に、このコマンドをアンドロイドスタジオターミナルで 実行します

Windowsの場合

cd android
gradlew assembleRelease

Linux / Macの場合

$ cd android
$ ./gradlew assembleRelease

エラーが発生した場合は、すべてのビルドフォルダーを削除してコマンドを実行します

gradlew clean

再びより

gradlew assembleRelease

1
omg gradle clean...私はしばらくの間、これらのビルドエラーを取得するのに苦労してきました。この回答をどうもありがとう!
nerdlinger

5

プロジェクトをバンドルする最新の反応ネイティブバージョンについて

アンドロイド

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/

iOS

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios


3

Android StudioでのGUIの方法

  • React NativeアプリのAndroidアプリをAndroid Studioで開く(これは、Android Studioでreact-nativeプロジェクトのandroidフォルダーを開くことを意味します)
  • 上部の「ビルド」タブに移動します
  • 「Build Bundle(s)/ APK(s)」に移動します
  • 次に、「APKのビルド」を選択します
  • これにより、APKに署名するためのキーを見つけるプロセス、またはキーをまだ持っていない場合はキーを作成するプロセスが順を追って説明されます。練習しているだけなら、これらのキーを生成してデスクトップに保存できます。
  • そのプロセスが完了すると、ビルドが成功した場合、Android Studioの下にポップアップが表示されます。その中にある「locate」というリンクをクリックします(APK)
  • これでapkファイルが表示され、それをAndroidデバイスに移動します。次に、Androidデバイスでそのファイルに移動してインストールします。

0

Android Studioを使用して、ReactのAndroidプロジェクトの署名済みAPKを生成することも、優れた簡単なオプションです。AndroidStudioでReactのAndroidプロジェクトを開き、キーストロークと署名済みAPKを生成します。


-2

署名済みAPKの生成に関する反応ネイティブの公式ドキュメントを参照してください

React-Native生成の署名済みAPK


ユーザーの質問に対応していなくても、これは良い答えではありません。リリース版ではなく、スタンドアロンのデバッグAPKを構築したいと考えています。
user37309
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.