Android工程打包(含React Native工程)

本文记录了新创建的Android工程是如何打包的(即导出签名的APK文件),包含React Native工程中的Android端打包过程。

开发环境:
macOS Sierra 10.12.3
Android Studio 2.2.2

1.生成签名文件

点击创建签名文件入口:Build->Generate Signed APK…

《Android工程打包(含React Native工程)》 img1.jpeg

点击下一步,选择
Create new…(非第一次打包点击另一个按钮,选择已经存在的签名文件)之后如下图所示,根据实际情况进行填写。

《Android工程打包(含React Native工程)》 create-keystone.jpeg

点击
OK,创建成功。

2.导出签名APK包

继续下一步,选择apk存放路径点击确定等几分钟之后就可以了。(未截图,有不清楚可留言)

3.遇到的问题及解决方法

错误1

React Native工程成功导出apk之后安装到手机,打开直接崩溃,查到错误信息如下:

   AndroidRuntime: FATAL EXCEPTION: mqt_js
   Process: com.rn_yunkong, PID: 13555
   java.lang.RuntimeException: com.facebook.react.devsupport.JSException: Could not get BatchedBridge, make sure your bundle is packaged correctly
at com.facebook.react.bridge.DefaultNativeModuleCallExceptionHandler.handleException(DefaultNativeModuleCallExceptionHandler.java:24)
at com.facebook.react.devsupport.DisabledDevSupportManager.handleException(DisabledDevSupportManager.java:158)
at com.facebook.react.cxxbridge.CatalystInstanceImpl.onNativeException(CatalystInstanceImpl.java:431)
at com.facebook.react.cxxbridge.CatalystInstanceImpl.access$400(CatalystInstanceImpl.java:51)
at com.facebook.react.cxxbridge.CatalystInstanceImpl$NativeExceptionHandler.handleException(CatalystInstanceImpl.java:447)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:33)
at android.os.Looper.loop(Looper.java:207)
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:196)
at java.lang.Thread.run(Thread.java:818)
  Caused by: com.facebook.react.devsupport.JSException: Could not get BatchedBridge, make sure your bundle is packaged correctly
at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31)
at android.os.Looper.loop(Looper.java:207) 
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:196) 
at java.lang.Thread.run(Thread.java:818) 
   Caused by: com.facebook.jni.CppException: Could not get BatchedBridge, make sure your bundle is packaged correctly
at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method) 
at android.os.Handler.handleCallback(Handler.java:815) 
at android.os.Handler.dispatchMessage(Handler.java:104) 
at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:31) 
at android.os.Looper.loop(Looper.java:207) 
at com.facebook.react.bridge.queue.MessageQueueThreadImpl$3.run(MessageQueueThreadImpl.java:196) 
at java.lang.Thread.run(Thread.java:818) 

原因:
打离线包需要生成本地bundle文件
解决办法:
在工程根目录下执行:
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/app/src/main/assets文件,需要先创建。

参考:http://facebook.github.io/react-native/docs/signed-apk-android.html

望多交流学习。

    原文作者:不知名bzm
    原文地址: https://www.jianshu.com/p/a43f8cd64ff6
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞