7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

React NativeでAndroidアプリ @ Windows 備忘録

Posted at

React Nativeのインストールからリリースビルドまでの備忘録

準備

node.jsをインストール

Android Studioをインストール

PATHを通す

  • C:/Program Files/Android/Android Studio/jre/bin
    • keytool.exe
    • jarsigner.exe
  • %USERPROFILE%/AppData/Local/Android/SDK/tools
    • android.bat
    • emulator.exe
  • %USERPROFILE%/AppData/Local/Android/SDK/platform-tools
    • adb.exe

環境変数をセット

ANDROID_HOME %USERPROFILE%/AppData/Local/Android/SDK
JAVA_HOME C:/Program Files/Android/Android Studio/jre
JAVA_OPTS -DproxyHost=your.proxy.server -DproxyPort=8888

プロキシの設定は必要に応じて

プロジェクトの初期化

$ npm install -g react-native-cli
$ react-native init AwesomeProject
$ cd AwesomeProject

エミュレータでデバッグ

エミュレータの起動

  1. デバイス名を調べる
$ android list avd
  1. 起動
$ emulator -avd <デバイス名>

デバッグビルドと起動

$ react-native run-android

実機でデバッグ(USB接続)

$ adb reverse tcp:8081 tcp:8081
$ react-native run-android

リリースビルド

鍵の作成

$ keytool -genkey -v -keystore ./android/app/android-release.keystore -alias android-release -keyalg RSA -keysize 2048 -validity 36524

設定ファイル等の修正

以下の記事を参考にパスワードその都度コンソールで入力するようにする
Android Studio(Gradle)でapkファイルを作成する時にstorePassword/keyAlias/keyPasswordの指定方法をいくつか検証してみた。

diff --git a/android/app/build.gradle b/android/app/build.gradle
index aef0c43..959f6e1 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -89,6 +89,15 @@ def enableSeparateBuildPerCPUArchitecture = false
  */
 def enableProguardInReleaseBuilds = false
 
+gradle.taskGraph.whenReady { taskGraph ->
+    if(taskGraph.hasTask(':app:assembleRelease')) {
+        def storePasswordValue = new String(System.console().readPassword("Enter store password: "))
+        def keyPasswordValue = new String(System.console().readPassword("Enter key password: "))
+        android.signingConfigs.release.storePassword = storePasswordValue
+        android.signingConfigs.release.keyPassword = keyPasswordValue
+    }
+}
+
 android {
     compileSdkVersion 23
     buildToolsVersion "23.0.1"
@@ -103,6 +112,16 @@ android {
             abiFilters "armeabi-v7a", "x86"
         }
     }
+    signingConfigs {
+        release {
+            if (project.hasProperty('RELEASE_STORE_FILE')) {
+                storeFile file(RELEASE_STORE_FILE)
+                storePassword ""
+                keyAlias RELEASE_KEY_ALIAS
+                keyPassword ""
+            }
+        }
+    }
     splits {
         abi {
             reset()
diff --git a/android/gradle.properties b/android/gradle.properties
index 1fd964e..68738d2 100644
--- a/android/gradle.properties
+++ b/android/gradle.properties
@@ -18,3 +18,6 @@
 # org.gradle.parallel=true
 
 android.useDeprecatedNdk=true
+
+RELEASE_STORE_FILE=android-release.keystore
+RELEASE_KEY_ALIAS=android-release

ビルド

$ cd ./android
$ gradlew assembleRelease

インストール

  1. デバッグビルドをインストールしたままだと[INSTALL_FAILED_UPDATE_INCOMPATIBLE: ]云々
    と署名が違う旨のエラーを吐くのでアンインストールしておく

  2. そのままインストールしようとしても[INSTALL_PARSE_FAILED_NO_CERTIFICATES: ]云々
    とエラーが出てインストールできないので署名し直してからインストールする

$ jarsigner -verbose -keystore app/android-release.keystore app/build/outputs/apk/app-release-unsigned.apk android-release
$ adb -d install app/build/outputs/apk/app-release-unsigned.apk
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?