如何生成无需服务器即可运行带有react-native的apk?

2020/10/12 21:21 · javascript ·  · 0评论

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

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

我看到文档中有一节在iOS上使用脱机捆绑包。但是我不知道如何为android实现相同的功能。这可能吗?如果是这样,怎么办?

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

按照Aditya Singh的回答,生成的(未签名)apk将不会安装在我的手机上。我必须按照此处的说明生成签名的apk

以下为我工作:

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

my-release-key.keystore文件放在android/app
项目文件夹中
目录然后编辑文件
~/.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 assembleRelease

对于Windows'cd android',然后运行gradlew assembleReleasecommand,然后在下面找到您签名的apkandroid/app/build/outputs/apk/app-release.apk

您将必须创建一个密钥来对apk进行签名。在下面使用它来创建您的密钥:

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

出现提示时使用密码

生成密钥后,使用它来生成可安装的内部版本:

 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/

使用gradle生成构建

 cd android && ./gradlew assembleRelease

将APK上传到您的手机。-r标志将替换现有应用(如果存在)

adb install -r ./app/build/outputs/apk/app-release-unsigned.apk

这里提到了更详细的描述:https : //facebook.github.io/react-native/docs/signed-apk-android.html

更新:基于@shashuec和@Fallen的评论

如果遇到错误

ENOENT:没有此类文件或目录,请打开“ android / app / src / main / assets / index.android.bundle”

运行mkdir android / app / src / main / assets

运行以下命令:

react-native run-android --variant=release

请注意,--variant=release仅当您使用设置了签名时才可用cd android && ./gradlew assembleRelease

您应该只使用android studio来完成此过程。这只是更简单。但是首先在您的本机应用程序目录中运行以下命令:

对于较新版本的react-native(例如react native 0.49.0等等)

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

对于旧版本的react-native(0.49.0及以下)

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 studio在您的本机应用程序目录中打开'android'文件夹,它将要求升级gradle和其他一些东西。转到构建->生成签名的APK并按照那里的说明进行操作。这真的很简单。

适用于React Native 0.49及更高版本

您应该转到终端上的项目目录并运行该命令

1 - mkdir android/app/src/main/assets
2 - 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

如果低于0.49

  1 - mkdir android/app/src/main/assets
  2 - 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 studio在您的本机应用程序目录中打开'android'文件夹,它将要求升级gradle和其他一些东西。转到构建->生成签名的APK并按照那里的说明进行操作。没关系。

如果任何人都想在没有Playstore Key的情况下进行构建,那么此命令将非常有帮助。

# react-native run-android --variant=release

构建完成后,您可以在发布构建文件中找到apk。

如果得到Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

我尝试使用@Aditya的方法来生成未签名的APK文件并进行安装,但是当我将其安装到Android平板电脑上时,出现了错误Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

我想这是因为APK文件未签名,平板电脑对此不满意。因此,生成React Native捆绑包文件后,我能够正常通过Android Studio生成一个签名的APK文件。

顺便说一下,我们的应用程序是Play商店中已经存在的功能齐全的Android应用程序,由于它很棒,我们只是在它的基础上添加了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)利润!

尝试以下操作,它将在您的root / android / app / build / outputs / apk / debug文件夹中生成一个app-debug.apk

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

转到项目目录并运行命令:

cd android && ./gradlew assembleRelease

我有另一个解决方案:-生成签名密钥您可以使用keytool生成私有签名密钥。在Windows上,必须从C:\ Program Files \ Java \ jdkx.x.x_x \ bin运行keytool。

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

将my-release-key.keystore文件放置在项目文件夹中android / app目录下。

在您的项目文件夹中编辑文件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现在将app-release.apk安装在您的android设备中。

如果遇到涉及index.android.js的错误。这是因为您使用的是新的React-native版本(我使用的是0.55.4),只需将“ index.android.js”替换为“ index.js”

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/

希望它将对新手有所帮助

官方文件在这里

如果您没有密钥库而不是在命令之前使用,则跳过

生成签名密钥/密钥库文件
您可以使用keytool生成私有签名密钥。
在Windows上,必须从C:\ Program Files \ Java \ jdkx.x.x_x \ bin运行keytool。

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

您将获得像my-release-key.keystore这样的文件

设置gradle变量
将my-release-key.keystore文件放置在项目文件夹中android / app目录下。
编辑文件android / gradle.properties并添加以下内容(用正确的密钥库密码,别名和密钥密码替换*****),enableAapt2 set 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 / buid.gradle(app)

低于默认配置

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
            }
        }

和内部版本类型发布{}

 signingConfig signingConfigs.release

然后只需在android studio终端中运行此命令,
下面的命令将自动执行所有答案

如果窗户

cd android
gradlew assembleRelease

如果是linux / mac

$ cd android
$ ./gradlew assembleRelease

如果遇到任何错误,请删除所有构建文件夹并运行命令

gradlew clean

不止一次

gradlew assembleRelease

对于最新反应本机版本以捆绑项目

安卓系统

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

Android Studio中的GUI方式

  • 在Android Studio中打开React Native应用程序的Android应用程序部分(这仅意味着使用Android Studio打开您的react-native项目的android文件夹)
  • 转到顶部的“构建”标签
  • 转到“构建捆绑包/ APK”
  • 然后选择“构建APK”
  • 这将引导您完成查找密钥以签名APK或创建密钥(如果您还没有密钥)的过程,这非常简单。如果您只是在练习,则可以生成这些密钥并将其保存到桌面。
  • 完成该过程后,如果构建成功,Android Studio下面将弹出一个对话框。点击其中的“定位”链接(APK)
  • 那将带您到apk文件,将其移至您的android设备。然后在Android设备上导航到该文件并安装。

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

请参阅有关生成签名APK的react-native官方文档

React-Native生成签名APK

本文地址:http://javascript.askforanswer.com/ruheshengchengwuxufuwuqijikeyunxingdaiyoureact-nativedeapk.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!