专栏首页憧憬博客分享React-Native Android打包

React-Native Android打包

生成签名密钥

  • 打开终端
  • 查看java 根目录路径
/usr/libexec/java_home -V
Matching Java Virtual Machines (1):
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
  • 去到java安装的根目录,即输入
cd /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
  • 当前用户没有最高权限,在Library文件夹下不能生成任何文件,可以到当前指定目录下生成文件,比如目录:/Users/hanjin/Desktop/key/android.keystore
keytool -genkey -v -alias android -keyalg RSA -validity 20000 -keystore /Users/hanjin/Desktop/key/android.keystore

Alias 是别名,填写APP名称即可,别的名称也行

  • 按照提示输入信息

设置 gradle 变量

  • my-release-key.keystore密钥库文件放到工程中的android/app文件夹下
  • 编辑 项目目录/android/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=*****

my-release-key.keystore 为密钥库文件名,在android/app文件夹下。 my-key-alias 为生成秘钥的时候设置的别名。

把签名配置加入到项目的 gradle 配置中

编辑项目目录下的android/app/build.gradle,添加如下的签名配置

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

测试应用的发行版本

注意:在 debugrelease 版本间来回切换安装时可能会报错签名不匹配,此时需要先卸载前一个版本再尝试安装。

react-native run-android --variant=release

生成发行 APK 包

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/

$ cd android
$ ./gradlew assembleRelease

GradleassembleRelease 参数会把所有用到的 JavaScript 代码都打包到一起,然后内置到 APK 包中。

注意:请确保 gradle.properties 中没有包含_org.gradle.configureondemand=true_,否则会跳过 js 打包的步骤,导致最终生成的 apk 是一个无法运行的空壳。

生成的 APK 文件位于android/app/build/outputs/apk/app-release.apk,它已经可以用来发布了。

本文为作者原创,手码不易,允许转载,转载后请以链接形式说明文章出处。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iptables速查

    iptables -L -n           查询当前iptables的规则 iptables -F              清除预设表fliter中的所...

    憧憬博客
  • 设计模式 | 工厂方法模式

    这个设计模式属于创建型, 也是常用设计模式之一, 工厂模式分为: 简单工厂、工厂方法、静态工厂、抽象工厂

    憧憬博客
  • 快速学习UML类图查看

    先说明一下UML是一种建模的语言, 他可以建很多图, 在我们设计程序 代码的时候, 就会建立类图。 UML从考虑系统的不同角度出发,定义了用况图、类图、对象图、...

    憧憬博客
  • Android 进阶3:Intent 与 IntentFilter 匹配规则

    Intent Intent 是一个消息传递对象,我们可以使用它启动其他应用组件完成特定的任务。 我们可以通过 Intent 来启动以下三个组件: Activit...

    张拭心 shixinzhang
  • 028android初级篇之调起Activity Service的方法

    我们知道调起另外一个组件一般有两种方式,显式的和隐式的。显式的会直接指定要启动的组件,而隐式的则通过匹配条件,调起匹配的组件。

    上善若水.夏
  • 用ABAP代码实现从1累加到100

    Jerry Wang
  • Mac下配置安卓开发环境

    1.下载 android-sdk_r10-mac_x86 3.0.zip(原因是因为不能下载!!!所以只好下载这个,然后更新!!!需要的可以留言给我) ec...

    苦咖啡
  • python 实现多继承

    python是少数支持多重继承的现代编程语言之一。多重继承是同时从多个基类派生一个类的能力

    公众号---志学Python
  • Linux基础(day 34)

    10.15 iptables filter表案例 iptables常用知识回顾点 iptables -I/-A/-D 后紧跟 链 ,可以是INPUT,OUTPU...

    运维小白
  • python实现简单爬取图片保存到本地

    py3study

扫码关注云+社区

领取腾讯云代金券