0

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); 
    } 
} 

Répondre

0

Une application non-debug toujours besoins avoir un JS Bundle inclus, même en utilisant CodePush. Les fonctions d'installation de synchronisation/mise à jour/vérification de CodePush sont toutes appelées depuis JS non depuis Java ou ObjC/Swift (l'application utilise le composant d'ordre supérieur codePush pour envelopper le composant enregistré avec AppRegistry ou l'application appelle la fonction codePush.sync() ou des fonctions de niveau inférieur pour effectuer la vérification des mises à jour et installer la mise à jour). Ma supposition ici est que vous n'aviez pas, au moment de l'écriture de cette question, reconstruit votre jsbundle depuis un certain temps, donc la version affichée n'était pas à jour et n'incluait peut-être pas l'intégration avec CodePush à tous et donc ne vérifie pas une mise à jour qui a été publiée à CodePush non plus.

En résumé - Construisez votre androïde jsbundle, réinstallez la version release, et tout devrait fonctionner.