首页 文章

如何生成一个可以在没有带反应原生的服务器的情况下运行的apk?

提问于
浏览
123

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

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

我看到在文档的iOS部分有一个使用脱机捆绑的部分 . 但我无法弄清楚如何为Android做同样的事情 . 这可能吗?如果是这样,怎么样?

UPDATE: 关于这个问题的答案(react native android failed to load JS bundle),据说离线包可以从开发服务器下载 . 但是当我从开发服务器获取捆绑包时,无法加载图像文件 .

12 回答

  • 23

    对于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和其他一些东西 . 转到build->生成签名的APK并按照那里的说明进行操作 . 那个好 .

  • 1

    按照Aditya Singh的回答,生成的(未签名的)apk不会安装在我的手机上 . 我必须使用here指令生成一个签名的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,则可以使用说明here将密码存储在钥匙串中,而不是将其存储在纯文本中 .

    然后编辑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 assembleRelease 命令,并在 android/app/build/outputs/apk/app-release.apk 下找到您的 signed apk

  • 11

    您将必须创建一个密钥来签署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

    UPDATE :根据@shashuec和@Fallen的评论

    如果你得到错误

    ENOENT:没有这样的文件或目录,打开'android / app / src / main / assets / index.android.bundle'

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

  • 2

    你应该只使用android studio来完成这个过程 . 它更简单 . 但首先在您的react本机app目录中运行此命令:

    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和其他一些东西 . 转到build->生成签名的APK并按照那里的说明进行操作 . 这真的很直接 .

  • 149

    运行此命令:

    react-native run-android --variant=release
    

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

  • 0

    如果您收到失败[INSTALL_PARSE_FAILED_NO_CERTIFICATES] .

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

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

    顺便说一句,我们的应用程序是一个功能齐全的Android应用程序,已经存在于Play商店中,我们只是在一口大小的片段中添加React Native,因为它非常棒 .

    总而言之,这是我的步骤:

    1) Generate React Native bundle:

    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) Generate a Signed APK file from Android Studio.

    3) Install Signed APK File to USB device:

    adb -d install -r <path_to_signed_apk>
    

    -d 标志只是告诉 adb 在附加的USB设备上安装,如果你也运行了模拟器 . 如果要在任何模拟器上安装,请删除 -d 标志 .

    4) Profit!

  • 0

    我有另一种解决方案: - 生成签名密钥您可以使用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设备 .

  • 23

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

    cd android && ./gradlew assembleRelease
    
  • 8

    如果您收到涉及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/
    
  • 91

    希望它能帮助新手

    官方文件here

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

    Generating a signing key / Keystore file 您可以使用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 这样的文件

    Setting up gradle variables 将my-release-key.keystore文件放在项目文件夹中的android / app目录下 . 编辑文件android / gradle.properties并添加以下内容(用正确的密钥库密码替换*****,别名和密钥密码),enableAapt2 set false是解决方法,如android gradle 3.0版problem

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

    and Inside Build type release { }

    signingConfig signingConfigs.release
    

    then simply run this command in android studio terminal 以下命令将自动执行上述所有答案

    如果是窗户

    cd android
    gradlew assembleRelease
    

    如果是linux / mac

    $ cd android
    $ ./gradlew assembleRelease
    

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

    gradlew clean
    

    比了

    gradlew assembleRelease
    
  • 5

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

  • 0

    Android Studio中的GUI方式

    • 在Android Studio中打开React Native应用程序的Android应用程序部分(这只是意味着用Android Studio打开您的react-native项目的android文件夹)

    • 转到顶部的"Build"标签

    • 下到"Build Bundle(s) / APK(s)"

    • 然后选择"Build APK(s)"

    • 这将引导您完成定位钥匙以签署APK或创建钥匙的过程,如果您只是练习,您可以生成这些钥匙并将其保存到桌面 .

    • 完成该过程后,如果构建成功,Android Studio中将会显示下面的弹出窗口 . 点击其中显示"locate"(APK)的链接

    • 那将带您到apk文件,将其移动到您的Android设备 . 然后导航到Android设备上的该文件并进行安装 .

相关问题