Gok*_*ari 173 javascript android mobile-application react-native
我已经构建了我的应用程序,我可以在我的本地模拟器上运行它(也可以通过更改调试服务器在同一网络中的我的Android设备上运行).
但是,我想构建一个apk,我可以发送给没有访问开发服务器的人,我希望他们能够测试应用程序.
我看到在文档的iOS部分有一个使用脱机捆绑的部分.但我无法弄清楚如何为Android做同样的事情.这可能吗?如果是这样,怎么样?
更新:关于这个问题的答案(反应原生android无法加载JS包),据说离线包可以从开发服务器下载.但是当我从开发服务器获取捆绑包时,无法加载图像文件.
Adi*_*ngh 177
您将必须创建一个密钥来签署apk.使用以下方法创建密钥:
keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000
Run Code Online (Sandbox Code Playgroud)
出现提示时使用密码
生成密钥后,使用它生成可安装的构建:
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/
Run Code Online (Sandbox Code Playgroud)
使用gradle生成构建
cd android && ./gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
将APK上传到手机上.该-r标志将替换现有应用程序(如果存在)
adb install -r ./app/build/outputs/apk/app-release-unsigned.apk
Run Code Online (Sandbox Code Playgroud)
这里提到更详细的描述: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
Ped*_*ram 166
按照Aditya Singh的回答,生成的(未签名的)apk不会安装在我的手机上.我必须使用这里的说明生成一个签名的apk .
以下对我有用:
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
Run Code Online (Sandbox Code Playgroud)
将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=****
Run Code Online (Sandbox Code Playgroud)
如果您使用的是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
}
}
}
...
Run Code Online (Sandbox Code Playgroud)
然后运行命令cd android && ./gradlew assembleRelease,
对于 Windows'cd android'然后运行gradlew assembleRelease命令,并在下面找到你签名的 apkandroid/app/build/outputs/apk/app-release.apk
小智 26
运行此命令:
react-native run-android --variant=release
Run Code Online (Sandbox Code Playgroud)
请注意,
--variant=release仅当您设置了签名时才可用cd android && ./gradlew assembleRelease.
Mik*_*xle 26
你应该只使用android studio来完成这个过程.它更简单.但首先在您的react本机app目录中运行此命令:
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
Run Code Online (Sandbox Code Playgroud)
然后使用android studio打开你在本机应用程序目录中的'android'文件夹,它会要求升级gradle和其他一些东西.转到build->生成签名的APK并按照那里的说明进行操作.这真的很直接.
Yas*_*rlu 18
对于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
Run Code Online (Sandbox Code Playgroud)
如果低于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
Run Code Online (Sandbox Code Playgroud)
然后使用android studio打开你在本机应用程序目录中的'android'文件夹,它会要求升级gradle和其他一些东西.转到build->生成签名的APK并按照那里的说明进行操作.那个好.
Jos*_*ter 11
Failure [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)生成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/
Run Code Online (Sandbox Code Playgroud)
2)从Android Studio生成签名的APK文件.
3)将签名的APK文件安装到USB设备:
adb -d install -r <path_to_signed_apk>
Run Code Online (Sandbox Code Playgroud)
该-d标志只是告诉adb安装在附加的USB设备上,如果您还运行了模拟器.如果要在任何模拟器上安装,请删除该-d标志.
4)利润!
希望对新手有帮助
官方文档在这里
如果你没有密钥库而不是在命令之前使用 else 跳过
生成签名密钥/密钥库文件 您可以使用 keytool 生成私有签名密钥。在 Windows 上,keytool 必须从 C:\Program Files\Java\jdkx.x.x_x\bin 运行。
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
Run Code Online (Sandbox Code Playgroud)
你会得到一个像my-release-key.keystore这样的文件
设置 gradle 变量 将 my-release-key.keystore 文件放在项目文件夹中的 android/app 目录下。编辑文件 android/gradle.properties 并添加以下内容(将 ***** 替换为正确的密钥库密码、别名和密钥密码), enableAapt2 set false 是解决方法,因为 android gradle version 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
Run Code Online (Sandbox Code Playgroud)
然后添加这些 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
}
}
Run Code Online (Sandbox Code Playgroud)
和内部构建类型发布{}
signingConfig signingConfigs.release
Run Code Online (Sandbox Code Playgroud)
然后只需在 android studio 终端中运行此命令 下面的命令将自动执行以上所有答案
如果窗户
cd android
gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
如果 linux/mac
$ cd android
$ ./gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
如果出现任何错误,请删除所有构建文件夹并运行命令
gradlew clean
Run Code Online (Sandbox Code Playgroud)
再比
gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
小智 7
尝试以下操作,它将在您的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
Run Code Online (Sandbox Code Playgroud)
然后运行
./gradlew installRelease
Run Code Online (Sandbox Code Playgroud)
最后您将能够在这里找到该应用程序。
Project\android\app\build\outputs\apk\release\app-release.apk
Run Code Online (Sandbox Code Playgroud)
对我来说这有效(MACOS)
打开终端
cd project_directory
Run Code Online (Sandbox Code Playgroud)
运行这个命令
yarn start
Run Code Online (Sandbox Code Playgroud)
打开另一个终端
运行这些命令
cd android
./gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
我有另一种解决方案: - 生成签名密钥您可以使用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
Run Code Online (Sandbox Code Playgroud)
将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}}
Run Code Online (Sandbox Code Playgroud)
并运行
gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
这将给你两个文件在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/
Run Code Online (Sandbox Code Playgroud)
小智 5
对于最新的 React Native 版本来捆绑项目
安卓
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
小智 5
如果任何人都想在没有Playstore Key的情况下进行构建,那么此命令将非常有帮助。
# react-native run-android --variant=release
构建完成后,您可以在发行版本的构建文件中找到apk。
将这些代码复制粘贴到下面的 package.json 文件中 "script":{}
* VS Code
--Enable NPM SCRIPT
--Now you can directly run scripts from here
"android": "react-native run-android",
"clean-run-android": "cd android && ./gradlew clean && cd.. && react-native run-android ",
"start": "node node_modules/react-native/local-cli/cli.js start --reset-cache",
"reset": "rm -rf node_modules/ && npm cache clear && watchman watch-del-all && npm i",
"debug-build": "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/ && cd android && ./gradlew assembleDebug && cd app/src/main/res/ && rmdir /S /Q raw && rmdir /S /Q drawable-mdpi",
"release-build": "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/build/intermediates/res/merged/release/ && cd android && ./gradlew assembleRelease && cd..",
"install-apk": "cd android && ./gradlew installRelease",
"release-aab": "cd android && ./gradlew bundleRelease"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
181645 次 |
| 最近记录: |