Utilizzo di Android nano protobuf

Sto cercando di generare file java dal file proto utilizzando il protocollo nano. Ho qualche istruzione di base su come procedere in questo thread SO .

Ho questo file proto, personal.proto :

  • window.orientation restituisce valori diversi in iOS e Android
  • Come prendere l'icona di navigazione fare clic sulla barra degli strumenti dal frammento?
  • Android App si blocca sul telefono HTC e Sony Ericsson
  • Dialogo per scegliere l'image dalla galleria o dalla camera
  • Unmarshalling i file XML in oggetti Java in Android?
  • Comunicazione NFC di Android con Mifare DESFire EV1
  •  package tutorial; option java_package = "com.example.tutorial"; option java_outer_classname = "AddressBookProtos"; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } message AddressBook { repeated Person person = 1; } 

    Ho cercato di seguire l'istruzione da qui , in particolare la versione NANO :

    1. Scaricato protobuf-2.5.0.zip e compilatore protoc-2.5.0-win32.zip da qui .
    2. protobuf-2.5.0.zip in una cartella e lì in sottocartella src I unzipped protoc.exe .
    3. Cambiato nella cartella java e in là emesso: mvn clean package -P nano . Quel command è andato bene e nella cartella di target ho protobuf-java-2.5.0.jar

    Da qui non sono sicuro di come procedere poiché nella documentazione iniziale ho questa affermazione:

     - Link with the generated jar file <protobuf-root>java/target/protobuf-java-2.3.0-nano.jar. 

    Non sono sicuro di cosa significhi, come colbind? Esiste un parametro per il protoc.exe che specifica il file jar da utilizzare?

    Ho cercato di emettere questo command: protoc --javanano_out=enum_style=java --java_out=generated personal.proto

    ma ho questo errore: --javanano_out: protoc-gen-javanano: The system cannot find the file specified .

    La domanda sarebbe: cosa mi manca / fa sbagliato sopra? Sto cercando di generare file java dal file proto superiore.

  • Android ottiene l'attuale locale, non il default
  • supporto unicode in android ndk
  • OutOfMemoryError cosa aumentare e come?
  • il dataset e il renderer non devono essere nulli e dovrebbero avere lo stesso numero di serie in AChartEngine
  • Spell check android studio / IntelliJ Idea
  • Come rilevare se sono state apportte modifiche nelle preferenze?
  • One Solution collect form web for “Utilizzo di Android nano protobuf”

    Penso che questo protoc non sia compilato con supporto javanano .

    La versione predefinita di Windows 2.5.0 non include il supporto nano, guarda il codice sorgente, nel path " src\google\protobuf\compiler ", include il generatore java, ma non il generatore javanano. L'ultimo codice sorgente presso i repository google include javanano.

    È ansible scaricare il codice sorgente più recente e cercare di compilarlo utilizzando MinGW e msys o CygWin , dare un'occhiata a questo post Come build buffer di protocollo google in Windows per mingw?

    (In seguito pubblicherò i dettagli per il process di costruzione)

    AGGIORNARE:

    La row di command finale dopo la costruzione di protoc.exe

    Per un file proto

     protoc --javanano_out=store_unknown_fields=true:target/generated-sources personal.proto, target/generated-sources 

    Per più file proto

     protoc --javanano_out=store_unknown_fields=true:target/generated-sources --proto_path=inputpath input/*.proto 

    EDIT Il generatore Nano sostituisce i membri enum con public static final int campi public static final int . Questo è un problema se una class dispone di un membro enum opzionale perché tale membro verrà compilato ad un valore int primitivo e prenderà il valore predefinito di zero, che sarà il primo elemento da enum. Per distinguere i casi in cui un valore di enum non è stato impostato, si può trarre vantaggio dal parametro java.lang.Integer che genera java.lang.Integer invece di un int primitivo. Quando il proto viene analizzato, il chiamante può controllare se il valore è nullo prima di utilizzare il valore. Null significa che il valore non è stato impostato.

    Lo script di chiamata di cui sopra può diventare:

     protoc --javanano_out=store_unknown_fields=true,optional_field_style=reftypes:target/generated-sources --proto_path=input input/*.proto 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.