6
3

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でindex.android.bundleがAPKに保存されない

Posted at

React Native 0.52でAndroidのリリースビルドを行った際に生成されるAPKファイルにindex.android.bundleが保存されず、実行できないという問題に直面しました。

いろいろ調べたところ、使っているReact NativeのバージョンのAndroidビルドに問題があることがわかったのでまとめました。

経緯

具体的にはAndroid用のリリースビルドを行うときには

$ cd android
$ ./gradlew assembleRelease

を実行し、app-release.apkというAPKファイルを生成し、それを配布する、というのが通常の流れになります。

APKファイルにはReact Nativeのランタイムやアプリのリソース、そして、自分たちが書いたJavaScriptのコードがバンドルされます。

APKファイルの実態はZIPアーカイブなので、 unzip -lなどで中身を見ることができます。

$ unzip -l app-release.apk

問題はこの中に自分たちのJavaScriptが保存されなくなってしまったことです。

すべてはこいつ react.gradle

Androidはgradleというビルドツールを使ってビルドしており、React Nativeにおいてはfacebook/react-nativereact.gradleというファイルに問題があったようです。

ざっくりいうと、react-native bundleを実行し、自分が書いたJavaScriptのコードをindex.android.bundleという1つのファイルにまとめてくれます。

いろいろ調べていると、どうもこのロジックが怪しい模様でした。調査結果から言うと、

試しに0.57のファイルを node_modules/react-native/ にコピーしたところ、無事にAPKに追加されるようになりました。

さらに深掘り

こちらの2つを比べると分かるのですが、index.android.bundleの出力先が変更されていることがわかります。

  • 0.52: android/app/build/intermediates/assets/release
  • 0.57: android/app/build/generated/assets/react/release

GitHubのIssueなどを探してみたところ、やはりビルドのようにクリティカルな話だけあって、 かなり盛り上がっておりました。

最終的にはこのコメント に書いてあるのが最終的な修正のようです。一番キーのメッセージがこちら :arrow_down:

Output to "build/generated" instead of "build/intermediates"

ただ、やはりビルド全体が複雑なのか、「何が」「いつから」「どう」「なんで」変わったのかは記載されておらず、自分たちの環境でも何故突然起きたのか分かりませんでした。

結論

とは言いつつも、node_modules/react-native/の下のファイルを入れ替えたりするのは危なっかしいので、実際には別の回避策を設けておいて、React Nativeのバージョンアップを待つこととしました。

余談1: enableAapt2

AndroidのパッケージツールのAapt2ですが、こちらはReact Nativeと相性が悪く、だいたいgradle.propertiesとかでenableAapt2=falseとしてオフにすることになるのですが、上記の修正の一環としてビルドの順番とかを修正したおかげで、再び使えるようになりました!enableAapt2=true、もしくは消してしまってもビルドできるようになります。

余談2: PRが出たり入ったり

ちなみ、facebook/react-native#17967で一度入ったのですが、revertされたらしく、最終的にはfacebook/react-native#20526になります(変更内容は同じのようです)。

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?