android - react-native 编译的 apk 不会在设备上运行

标签 android react-native

使用 react-native 教程的演练(react-native 0.30): 我创建的应用程序无法安装在 Android 设备上,步骤如下:

  1. react-native 初始化演示
  2. cd android
  3. gradlew assembleRelease
  4. 将未签名的 apk 复制到移动设备 ( htc m8 mini 2 )

得到的结果是:Application demo was not installed

基于这个类似的问题 apk didn't run on mobile android react native : 未签名的 apk 不会安装在手机上。

但为什么我能够运行由 Ionic 2 制作的未签名应用程序?

有什么问题吗?

最佳答案

在 Ionic 2 中,您运行调试 apk,无法运行未签名的 apk。

你可以在 React 中做的是签署你的 apk 并运行。

第一次设置可能有点复杂,但在您完成设置后,在您需要时可以很容易地生成签名的 apk。

您可以按照以下说明对您的 apk 进行签名:

生成签名 key

您可以使用 keytool 生成私有(private)签名 key 。

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

此命令提示您输入 keystore 和 key 的密码,并为您的 key 提供专有名称字段。然后,它会将 keystore 生成为名为 my-release-key.keystore 的文件。

keystore 包含一个 key ,有效期为 10000 天。别名是您稍后在签署您的应用程序时将使用的名称,因此请记住记下别名。

注意:请记住将您的 keystore 文件保密,切勿将其提交给版本控制。

设置gradle变量

  1. my-release-key.keystore文件放在android/app下 项目文件夹中的目录。
  2. 编辑文件 ~/.gradle/gradle.properties 并添加以下内容 (将 ***** 替换为正确的 keystore 密码、别名和 key 密码),

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore

MYAPP_RELEASE_KEY_ALIAS=my-key-alias

MYAPP_RELEASE_STORE_PASSWORD=*****

MYAPP_RELEASE_KEY_PASSWORD=*****

这些将成为全局 gradle 变量,我们稍后可以在我们的 gradle 配置中使用它们来签署我们的应用程序。

Note about saving the keystore: Once you publish the app on the Play Store, you will need to republish your app under a different package name (losing all downloads and ratings) if you want to change the signing key at any point. So backup your keystore and don't forget the passwords. Note about security: If you are not keen on storing your passwords in plaintext and you are running OSX, you can also store your credentials in the Keychain Access app. Then you can skip the two last rows in ~/.gradle/gradle.properties.

将签名配置添加到您应用的 gradle 配置 编辑项目文件夹中的文件 android/app/build.gradle 并添加签名配置,

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            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
        }
    }
}
...

生成发布 APK

只需在终端中运行以下命令:

$ cd android && ./gradlew assembleRelease

Gradle 的 assembleRelease 会将运行您的应用程序所需的所有 JavaScript bundle 到 APK 中。如果您需要更改 JavaScript 包和/或可绘制资源的 bundle 方式(例如,如果您更改了默认文件/文件夹名称或项目的一般结构),请查看 android/app/build.gradle 以了解如何更新它以反射(reflect)这些变化。

生成的 APK 可以在 android/app/build/outputs/apk/app-release.apk 下找到,并准备分发。

测试您应用的发布版本

在将发布版本上传到 Play 商店之前,请务必对其进行全面测试。使用以下方法将其安装在设备上:

$ cd android && ./gradlew installRelease

请注意,installRelease 仅在您按上述方式设置签名后才可用。

您可以终止任何正在运行的打包程序实例,所有您的和框架的 JavaScript 代码都 bundle 在 APK 的 Assets 中。

关于android - react-native 编译的 apk 不会在设备上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38613927/

相关文章:

react-native - 捆绑失败 : Error: While resolving module `metro/src/lib/bundle-modules/HMRClient`

Android 通知未按预期工作

android - fragment 相互重叠显示

android - 使用 applicationIdSuffix 时 React Native 应用程序不会启动

android - 如果设备被锁定,定时器完成后的通知 - React Native EXPO?

react-native - 更新 react-native 后无法使用 react-native-debugger

android - 如何在 Crittercism 门户网站上查看设备方向

java - 我的单选按钮中只有 1/2 在 android 中工作

android - DrawerLayout 不是滑动抽屉

javascript - 将子组件传递给不支持此功能的组件