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

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

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

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


当前回答

希望对初学者有所帮助

这里是官方文档

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

生成签名密钥/ 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

其他回答

不使用dev-server生成调试APK

如果你真的想生成一个调试APK(用于测试),可以在没有开发服务器的情况下运行,这里是我对另一篇类似文章的回答的链接,这可能会对你有帮助。 https://stackoverflow.com/a/65762142/7755579

你所要做的就是:

编辑/ app / android构建gradle。

project.ext.react = [
    ...
    bundleInDebug: true, // add this line
]

在项目的根目录下运行此命令

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

然后,在/android文件夹内运行。/gradlew assembleDebug (Mac或Linux)或gradlew assembleDebug (Windows) 如果构建失败,我建议您从Android studio构建应用程序

我有另一个解决办法:- 生成签名密钥 您可以使用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

把我的释放钥匙放上去。在项目文件夹的android/app目录下的Keystore文件。

编辑文件android/app/build。Gradle在你的项目文件夹,并添加签名配置,

android {
....
signingConfigs { 
  release { 

      storeFile file('my-release-key.keystore') 
      storePassword 'yourpassword' 
      keyAlias 'my-key-alias' 
      keyPassword 'yourpassword' 

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

和运行

gradlew assembleRelease

这将给你两个文件在android\app\build\outputs\apk App-release.apk和app-release-unsigned.apk 现在在你的android设备上安装app-release.apk。

参考react-native关于生成签名APK的官方文档

原生生成签名APK

对于最新的react原生版本来捆绑项目

安卓

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/

iOS

React-native bundle——entry-file index.js——platform ios——dev false——bundle-output ios/main。Jsbundle——assets-dest ios

根据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