我已经构建了我的应用程序,我可以在我的本地模拟器上运行它(也可以在同一网络内通过更改调试服务器在我的android设备上运行)。

然而,我想构建一个APK,我可以发送给没有访问开发服务器的人,我希望他们能够测试应用程序。

我看到有一节使用离线捆绑在iOS部分的文档。但我不知道如何在android上实现同样的功能。这可能吗?如果有,怎么做?

更新:关于这个问题的答案(Android无法加载JS包),据说离线包可以从开发服务器下载。但是当我从开发服务器获取包时,图像文件无法加载。


当前回答

根据Aditya Singh的回答,生成的(未签名的)apk不会安装在我的手机上。我必须使用这里的说明生成一个签名apk。

下面的方法对我很有效:

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

把我的释放钥匙放上去。android/app下的Keystore文件 目录。然后编辑文件 ~ / .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 assemblerrelease命令,

对于Windows, cd android,然后执行gradlew assemblerrelease命令,在android/app/build/outputs/apk/app-release.apk或android/app/build/outputs/apk/release/app-release.apk下找到签名的apk

其他回答

如果您得到“Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].”

我尝试使用@Aditya的方法来生成一个无签名APK文件并安装它,但当我在我的Android平板电脑上安装它时,它给了我一个失败的错误[INSTALL_PARSE_FAILED_NO_CERTIFICATES]。

我想这是因为APK文件没有签名,平板电脑对此不满意。所以,在生成React Native包文件后,我能够通过Android Studio生成一个签名的APK文件。

顺便说一句,我们的应用是一款功能齐全的Android应用,已经在Play Store中存在,我们只是将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生成一个Signed APK文件。

3)将签名APK文件安装到USB设备:

adb -d install -r <path_to_signed_apk> 

-d标志只是告诉adb在附加的usb设备上安装,如果您有一个模拟器也在运行。如果你想在任何模拟器上安装,去掉-d标志。

4)利润!

Android Studio中的GUI方式

Have the Android app part of the React Native app open in Android Studio (this just means opening the android folder of your react-native project with Android Studio) Go to the "Build" tab at the top Go down to "Build Bundle(s) / APK(s)" Then select "Build APK(s)" This will walk you through a process of locating your keys to sign the APK or creating your keys if you don't have them already which is all very straightforward. If you're just practicing, you can generate these keys and save them to your desktop. Once that process is complete and if the build was successful, there will be a popup down below in Android Studio. Click the link within it that says "locate" (the APK) That will take you to the apk file, move that over to your android device. Then navigate to that file on the Android device and install it.

希望对初学者有所帮助

这里是官方文档

如果您没有密钥存储库,请使用之前的命令否则跳过

生成签名密钥/ Keystore文件 您可以使用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变量 把我的释放钥匙放上去。在项目文件夹的android/app目录下的Keystore文件。 编辑文件android/gradle。属性并添加以下内容(将*****替换为正确的密钥库密码、别名和密钥密码), enableAapt2设置为false是变通的,因为android gradle 3.0版本的问题

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/ build。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类型release {}

 signingConfig signingConfigs.release

然后在android studio终端上简单地运行这个命令 以下命令将自动回答以上所有问题

如果窗户

cd android
gradlew assembleRelease

Linux / MAC

$ cd android
$ ./gradlew assembleRelease

如果你得到任何错误删除所有构建文件夹和运行命令

gradlew clean

又比

gradlew assembleRelease

使用android studio为react的android项目生成签名apk也是一个很好的和简单的选择,在android studio中打开react的android项目并生成击键和签名apk。

一些有用的脚本为windows用户

在包中复制粘贴这些代码。“script”下的Json文件:{}

 * VS Code
   --Enable NPM SCRIPT

   --Now you can directly run scripts from here


    "android": "react-native run-android",
    "clean-run-android": "cd android && ./gradlew clean && cd.. && react-native run-android  ",
    "start": "node node_modules/react-native/local-cli/cli.js start --reset-cache",
    "reset": "rm -rf node_modules/ && npm cache clear && watchman watch-del-all && npm i",
    "debug-build": "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/ && cd android && ./gradlew assembleDebug && cd app/src/main/res/ && rmdir /S /Q raw && rmdir /S /Q drawable-mdpi",
    "release-build": "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/build/intermediates/res/merged/release/ && cd android && ./gradlew assembleRelease && cd..",
    "install-apk": "cd android && ./gradlew installRelease",
    "release-aab": "cd android && ./gradlew bundleRelease"