我已经构建了我的应用程序,可以在本地仿真器上运行它,也可以通过更改调试服务器在同一网络中的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 assembleRelease
command,然后在下面找到您签名的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.bundle --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官方文档
文章标签:android , javascript , mobile-application , react-native
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!