React Native - 有一种简单的方法来构建和部署调试APK吗?

时间:2017-05-17 09:07:33

标签: android react-native react-native-android

所有文档似乎都认为其中一个处于开发模式并且正在寻求为开发人员设备切换端口或正在进行生产构建!我只是想创建一个appDebug.apk,任何人都可以使用它来运行应用程序,而不会看到有关桥接,事件发射器或AppRegistry等的错误。我无法告诉其他想要看到React Native应用程序切换端口等的人,每次我分享应用程序时,我都不想完整发布。有什么建议吗?

更新:我不想调试应用程序。我只想发布适用于任何设备的测试版本,以便我可以共享构建以进行测试。

 UPDATE: HERE IS MY PROJECT STRUCTURE:under
   main-project
   -> index.android.js
   ->gridlew
   -> build.properties
   ->build.gradle
   ->package.json
   -> my-app  (App project folder)
       -> build->output->apk->release.apk 
       ->src->main->assets
       ->src->main->res 
       ->src->main->java

4 个答案:

答案 0 :(得分:4)

以下是从创建反应原生应用程序生成的build.grade获取此工作所需的步骤:

这是您的应用构建文件:

import com.android.build.OutputFile
// These properties must be declared above the apply below!
project.ext.react = [
    // whether to bundle JS and assets in debug mode
    bundleInDebug: true,

    // whether to bundle JS and assets in release mode
    bundleInRelease: true,

    bundleIn$releaseDebug: true  // For custom release type

  ]


 apply from: "../node_modules/react-native/react.gradle"  // adjust depending on where your node_modules directory is located.

同时检查build.gradle中是否有使用app package name等定义的ext属性。

这样可以为所有构建类型成功创建包。

答案 1 :(得分:3)

https://stackoverflow.com/a/36961021/6832877

为了在设备上测试应用,我使用其他问题的评论

您需要手动为调试版本创建捆绑包。

捆绑调试版本:

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

创建调试版本:

cd android
./gradlew assembleDebug

.apk将在:

" APP" /机器人/应用程序/生成/输出/ APK

附:另一种方法可能是修改gradle脚本。

对于桥梁问题:

react-native run-android
react-native start --reset-cache

或:

cd myproject  
react-native start > /dev/null 2>&1 &  
curl "http://localhost:8081/index.android.bundle?platform=android" -o
> "android/app/src/main/assets/index.android.bundle

或:

adb reverse tcp:8081 tcp:8081

答案 2 :(得分:2)

也许使用Expocreate-react-native-app

在iOS或Android手机上安装Expo应用程序。

运行您的项目,您将获得一个链接或QRCode。 然后发送此链接或qrcode以将您的应用分享给任何人。

答案 3 :(得分:2)

在我的项目中,我通过创建一个构建变体来实现这一目标,该变体将生成的RN代码捆绑在APK中。

生成bundle.js

使用wget我从Node.JS本地服务器获取RN代码并将其保存为bundle.js

wget "http://127.0.0.1:8081/index.android.bundle?platform=android&dev=false" -O bundle.js

将bundle.js添加到项目

我将bundle.js文件添加到assets/目录。

创建将RN指向文件的构建变体

我不想每当我想在本地(bundle.js)和实时版本之间切换时手动更改我的代码。所以我为这种情况创建了一个构建变体。 关于构建变体here有一个广泛的教程,所以我只会回顾一下这些非常详细的内容。

在我build.gradle的{​​{1}}节点下,我添加了:

android

这会自动生成productFlavors { bundled { buildConfigField 'boolean', 'BUNDLED', 'true' buildConfigField 'String', 'DEV_HOST', "null" } } (有关此here的更多信息):

BuildConfig.java

将RN指向bundle.js

所以现在我根据我的构建版本启动RN:

public final class BuildConfig {
  public static final boolean DEBUG = Boolean.parseBoolean("true");
  public static final String APPLICATION_ID = "....";
  public static final String BUILD_TYPE = "debug";
  public static final String FLAVOR = "bundled";
  public static final int VERSION_CODE = ...;
  public static final String VERSION_NAME = ...;
  // Fields from product flavor: bundled
  public static final boolean BUNDLED = true;
}

生成APK

我从Build Variants屏幕中选择了正确的构建变体: enter image description here

然后点击 Build - >照常进行操作。 构建APK

我稍后可能会添加更详细的博文。