J'ai construit mon application, je peux l'exécuter sur mon simulateur local (ainsi que sur mon appareil Android au sein du même réseau en modifiant le serveur de débogage).
Cependant, je veux construire un apk que je peux envoyer à quelqu'un sans accès au serveur de développement et je veux qu'ils puissent tester l'application.
Je vois qu’il existe une section Utilisation de l’ensemble hors connexion sur iOS dans la documentation. Mais je n'arrivais pas à comprendre comment accomplir la même chose pour Android. Est-ce possible? Si c'est le cas, comment?
UPDATE: Sur la réponse à cette question ( réagir natif Android n'a pas pu charger le bundle JS ) il est dit que le paquet en mode hors connexion peut être téléchargé à partir du serveur de développement. Mais lorsque j'obtiens le kit auprès du serveur de développement, les fichiers image ne peuvent pas être chargés.
Suite à la réponse d'Aditya Singh, l'apk généré (non signé) ne serait pas installé sur mon téléphone. Je devais générer un apk signé en utilisant les instructions ici .
Ce qui suit a fonctionné pour moi:
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
Placez le fichier my-release-key.keystore
dans le répertoire Android/app
du dossier de votre projet. Editez ensuite le fichier ~/.gradle/gradle.properties
et ajoutez le texte suivant (remplacez **** par le mot de passe du magasin de clés, le pseudonyme et le mot de passe correct)
MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****
Si vous utilisez MacOS, vous pouvez stocker votre mot de passe dans le trousseau à l'aide des instructions ici au lieu de le stocker en texte brut.
Ensuite, éditez app/build.gradle et assurez-vous que les éléments suivants sont présents (les sections dotées de signatureConfigs devront peut-être être ajoutées à signalisationConfig):
...
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
}
}
}
...
Puis lancez la commande cd Android && ./gradlew assembleRelease
,
Pour Windows , "cd Android", puis exécutez la commande gradlew assembleRelease
et trouvez votre signé apk sous Android/app/build/outputs/apk/app-release.apk
Vous devrez créer une clé pour signer l'apk. Utilisez ci-dessous pour créer votre clé:
keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000
Utilisez un mot de passe lorsque vous y êtes invité
Une fois la clé générée, utilisez-la pour générer la version installable:
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/
Générer la construction en utilisant gradle
cd Android && ./gradlew assembleRelease
Téléchargez le fichier APK sur votre téléphone. Le drapeau -r
remplacera l'application existante (si elle existe)
adb install -r ./app/build/outputs/apk/app-release-unsigned.apk
Une description plus détaillée est mentionnée ici: https://facebook.github.io/react-native/docs/signed-apk-Android.html
UPDATE: Basé sur les commentaires de @shashuec et @Fallen
si vous obtenez une erreur
ENOENT: aucun fichier ou répertoire de ce type, ouvrez "Android/app/src/main/assets/index.Android.bundle".
lancer mkdir Android/app/src/main/assets
Exécutez cette commande:
react-native run-Android --variant=release
Notez que
--variant=release
n'est disponible que si vous avez configuré la signature aveccd Android && ./gradlew assembleRelease
.
Vous devriez simplement utiliser Android studio pour ce processus. C'est simplement plus simple. Mais commencez par exécuter cette commande dans votre répertoire d’application natif:
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/
Ensuite, utilisez Android studio pour ouvrir le dossier "Android" dans le répertoire de votre application native, il vous demandera de mettre à niveau gradle et quelques autres éléments. allez à construire-> Générer un APK signé et suivez les instructions à partir de là. C'est vraiment simple.
pour React Native 0.49 et plus
vous devriez aller dans le répertoire du projet sur le terminal et exécuter cette commande
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
si moins de 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
Ensuite, utilisez Android studio pour ouvrir le dossier "Android" dans le répertoire de votre application native, il vous demandera de mettre à niveau gradle et quelques autres éléments. allez à construire-> Générer un APK signé et suivez les instructions à partir de là. Ça va.
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
.J'ai essayé d'utiliser la méthode de @ Aditya pour générer un fichier APK non signé et l'installer, mais lorsque je suis allé l'installer sur ma tablette Android, cela m'a donné une erreur de Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
.
J'imagine que c'est parce que le fichier APK n'a pas été signé et que la tablette n'en est pas satisfaite. Ainsi, après avoir généré le fichier de bundle natif React _, j'ai pu générer un fichier APK signé, comme d'habitude, via Android Studio.
En passant, notre application est une application Android qui fonctionne déjà et qui existe déjà dans le Play Store et nous ajoutons simplement React qui lui est natif dans bouchées, parce que c'est génial
Donc, pour résumer, voici mes étapes:
1) Génère React Bundle natif:
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) Générez un fichier APK signé à partir de Android Studio.
) Installer le fichier APK signé sur un périphérique USB:
adb -d install -r <path_to_signed_apk>
L'indicateur -d
indique simplement à adb
de l'installer sur le périphérique USB connecté, dans le cas où vous auriez également un émulateur en cours d'exécution. Si vous souhaitez installer sur n'importe quel émulateur, supprimez l'indicateur -d
.
4) Bénéfice!
J'ai une autre solution: - Générer une clé de signature Vous pouvez générer une clé de signature privée à l'aide de keytool. Sous Windows, keytool doit être exécuté à partir de 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
Placez le fichier my-release-key.keystore dans le répertoire Android/app du dossier de votre projet.
Éditez le fichier Android/app/build.gradle dans votre dossier de projet et ajoutez la configuration de signature,
Android {
....
signingConfigs {
release {
storeFile file('my-release-key.keystore')
storePassword 'yourpassword'
keyAlias 'my-key-alias'
keyPassword 'yourpassword'
}
}}}
buildTypes {release {signingConfig signingConfigs.release}}
et courir
gradlew assembleRelease
Cela vous donnera deux fichiers sous Android\app\build\sorties\apk app-release.apk et app-release-unsigned.apk maintenant installer app-release.apk sur votre appareil Android.
Allez dans le répertoire du projet et lancez la commande:
cd Android && ./gradlew assembleRelease
Pour réagir aux dernières versions natives pour regrouper le projet
Android
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
Si vous obtenez une erreur impliquant index.Android.js. C'est parce que vous utilisez la nouvelle version native de React (j'utilise 0.55.4). Remplacez simplement "index.Android.js" par "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/
Essayez ci-dessous, il va générer un app-debug.apk sur votre dossier racine/Android/app/build/output/apk/debug
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
puis allez dans le dossier Android et lancez
./gradlew assembleDebug
Espérons que cela aidera les nouveaux débutants
Doc officiel ici
Si vous ne possédez pas de magasin de clés, utilisez avant la commande, sinon sautez
Génération d'une clé de signature/fichier de clés Vous pouvez générer une clé de signature privée à l'aide de keytool. Sous Windows, keytool doit être exécuté à partir de 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
vous obtiendrez un fichier du type my-release-key.keystore
Configuration des variables de niveau Placez le fichier my-release-key.keystore dans le répertoire Android/app du dossier de votre projet. Modifiez le fichier Android/gradle.properties et ajoutez le texte suivant (remplacez ***** par le mot de passe de magasin de clés correct, alias et mot de passe de clé), enableAapt2 est défini sur false, comme Android version 3.0 - problème
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
puis ajoutez ces app/buid.gradle (app)
en dessous de la configuration par défaut
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
}
}
et version de type Inside Build {}
signingConfig signingConfigs.release
puis exécutez simplement cette commande dans Android terminal de studio Les commandes ci-dessous automatiseront toutes les réponses
si fenêtres
cd Android
gradlew assembleRelease
si linux/mac
$ cd Android
$ ./gradlew assembleRelease
si vous avez une erreur, supprimez tout le dossier de construction et exécutez la commande
gradlew clean
que de nouveau
gradlew assembleRelease
Utiliser Android studio pour générer un apk signé pour le projet Android de rea est également une bonne option, ouvrez le projet Android de rea dans Android studio et générer une frappe et signé apk.
Si quelqu'un veut construire sans les clés du magasin, cette commande serait très utile.
# react-native run-Android --variant=release
Une fois la construction terminée, vous pouvez trouver l’apk dans le fichier de version.
Reportez-vous à la documentation officielle de react-native sur Generating Signed APK