J'ai fait de mon mieux pour suivre les instructions here et here. La version de débogage Android (react-native run-android
) s'exécute sur l'émulateur Android et sur mon périphérique comme prévu, c'est-à-dire qu'il recharge les fichiers JS après chaque nouvelle installation ou mise à jour. Toutefois, lorsque j'installe la version de publication (react-native run-android --variant=release
), il affiche le premier écran de l'application et aucune fonctionnalité de l'application ne fonctionne. Je n'ai pas essayé d'installer sur iOS. Il semble que cela ne charge pas les fichiers JS de codepush. Quand je vérifie les fichiers journaux (lors de l'installation de la version release sur l'émulateur), il se bloque sur cette ligne:Réagir Natif CodePush version Android Build ne charge pas les fichiers JS
[CodePush] Loading JS bundle from "assets://index.android.bundle"
Je trouve surprenant que la version release tente de charger localement le faisceau JS au lieu de vérifier CodePush serveur distant. Mes versions React-native et react-native-code-push sont de version 0.45.1 et 3.0.1-beta. J'ai déployé mon code pour les serveurs codepush mise en scène et de production et ont vérifié qu'il est là en exécutant
code-push deployment ls onetext-Android -k
J'ai également configuré mes clés de façon appropriée. Après avoir fait cela plus de 10 fois, il y avait un moment où le fichier journal pour l'installation de la version effectivement montré:
[CodePush] Loading JS bundle from "/data/user/0/com.onetext/files/CodePush/f93a24d467d53.../CodePush/index.android.bundle"
et l'application m'a incité à installer dernières mises à jour. Cependant, il s'est écrasé dès la fin de l'installation. Depuis ce moment, je n'ai pas réussi à charger les fichiers des serveurs de codepush. Tous les conseils sur où regarder ou comment déboguer ce serait très apprécié. Mon application a été construite avec native-starter-kit comme point de départ. Voici mon fichier settings.gradle:
rootProject.name = 'OneText'
include ':react-native-onesignal'
project(':react-native-onesignal').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-onesignal/android')
include ':react-native-image-picker'
project(':react-native-image-picker').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-image-picker/android')
include ':react-native-code-push'
project(':react-native-code-push').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-code-push/android/app')
include ':app'
parties pertinentes de mon fichier build.gradle:
apply from: "../../node_modules/react-native/react.gradle"
apply from: "../../node_modules/react-native-code-push/android/codepush.gradle"
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false
android {
compileSdkVersion 23
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "com.onetext"
minSdkVersion 16
targetSdkVersion 22
versionCode 4
versionName "1.0.1"
ndk {
abiFilters "armeabi-v7a", "x86"
}
manifestPlaceholders = [onesignal_app_id: "xxx",
onesignal_google_project_number: "xxx"]
}
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
}
}
}
splits {
abi {
reset()
enable enableSeparateBuildPerCPUArchitecture
universalApk false // If true, also generate a universal APK
include "armeabi-v7a", "x86"
}
}
buildTypes {
debug {
buildConfigField "String", "CODEPUSH_KEY", '""'
}
releaseStaging {
buildConfigField "String", "CODEPUSH_KEY", '"H3ZFJ..."'
}
release {
buildConfigField "String", "CODEPUSH_KEY", '"r0Sx..."'
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
signingConfig signingConfigs.release
}
}
// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
variant.outputs.each { output ->
// For each separate APK per architecture, set a unique version code as described here:
// http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
def versionCodes = ["armeabi-v7a":1, "x86":2]
def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride =
versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
}
}
}
}
dependencies {
compile project(':react-native-onesignal')
compile project(':react-native-image-picker')
compile project(':react-native-code-push')
compile fileTree(dir: "libs", include: ["*.jar"])
compile "com.android.support:appcompat-v7:23.0.1"
compile "com.facebook.react:react-native:+" // From node_modules
}
// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
MainApplication.java:
package com.onetext;
import android.app.Application;
import com.facebook.react.ReactApplication;
import com.geektime.rnonesignalandroid.ReactNativeOneSignalPackage;
import com.microsoft.codepush.react.CodePush;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.shell.MainReactPackage;
import com.facebook.soloader.SoLoader;
import com.imagepicker.ImagePickerPackage;
import java.util.Arrays;
import java.util.List;
public class MainApplication extends Application implements ReactApplication {
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
@Override
protected String getJSBundleFile() {
return CodePush.getJSBundleFile();
}
@Override
public boolean getUseDeveloperSupport() {
return BuildConfig.DEBUG;
}
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new ReactNativeOneSignalPackage(),
new CodePush(BuildConfig.CODEPUSH_KEY, MainApplication.this, BuildConfig.DEBUG), // Add/change this line.
new ImagePickerPackage()
);
}
};
@Override
public ReactNativeHost getReactNativeHost() {
return mReactNativeHost;
}
@Override
public void onCreate() {
super.onCreate();
SoLoader.init(this, /* native exopackage */ false);
}
}