2015-10-05 17 views
35

Obecnie pracuję nad projektem Cordova i miałem problem, że 8 zostało tajemniczo dołączone do versionCode mojego projektu. Na przykład: Mój oryginalny kod wersji to 100, nowy kod wersji to 1008Dlaczego Cordova/Phonegap dołącza 8 do mojego kodu wersji Android?

Śledziłem problem przez cały mój build build i znalazłem odpowiedzialny kod w skrypcie Gradle Build.

if (Boolean.valueOf(cdvBuildMultipleApks)) { 
    productFlavors { 
     armv7 { 
      versionCode cdvVersionCode ?: defaultConfig.versionCode + 2 
      ndk { 
       abiFilters "armeabi-v7a", "" 
      } 
     } 
     x86 { 
      versionCode cdvVersionCode ?: defaultConfig.versionCode + 4 
      ndk { 
       abiFilters "x86", "" 
      } 
     } 
     all { 
      ndk { 
       abiFilters "all", "" 
      } 
     } 
    } 
} else if (!cdvVersionCode) { 
    def minSdkVersion = cdvMinSdkVersion ?: privateHelpers.extractIntFromManifest("minSdkVersion") 
    // Vary versionCode by the two most common API levels: 
    // 14 is ICS, which is the lowest API level for many apps. 
    // 20 is Lollipop, which is the lowest API level for the updatable system webview. 
    if (minSdkVersion >= 20) { 
    defaultConfig.versionCode += 9 
    } else if (minSdkVersion >= 14) { 
    defaultConfig.versionCode += 8 
    } 
} 

Nie jestem pewien, dlaczego Cordova uważa, że ​​jest prawidłowa zmiana kodu wersji, a dodatkowo, nie jestem pewien, czy to jest poprawne zachowanie ... nie powinni go dodać numer i nie dołączyć go?

Czy mogę po prostu usunąć odpowiednią sekcję w pliku build.gradle lub czy za tym zachowaniem kryje się jakiś ukryty sens?

Odpowiedz

21

O.K. Wygląda na to, że jest to poważny nierozwiązany błąd w wersji Cordova 5 i nowszych. Here is the link to the ticket.

miałem żadnych problemów podczas usuwania szkodliwego kodu z mojego build.gradle

+0

To jest miłe. Pomyślałem, że popełniłem błąd, wciąż jest w wersji 6.0.0 –

+0

Wygląda na to, że poprawka została ostatnio niedawno połączona (https://github.com/apache/cordova-android/pull/270) z cordova-android, ale jeszcze nie. wydany (cordova-android 5.1.1 nie ma poprawki) –

+6

To wydaje się być naprawione w Cordova 6.2.0. Jednak teraz, gdy dodatkowa cyfra nie jest już dołączana do kodu wersji, pliki APK, które buduję przy użyciu tej wersji Cordova, zawsze mają mniejszy kod wersji niż poprzednie, a zatem Google Play nie akceptuje tych plików APK. – Ehsan

7

platform \ android skrypt \ build.gradle doda 4, 2, 8 lub 9 do pliku w zależności od docelowego architecure wersji - arm/x86 lub docelową wersję Androida dla api.

Miałem sytuację, w której do mojego projektu dodano "8" dołączoną do numeru wersji, a to zostało przesłane do sklepu Play. Wydawało się, że kolejne kompilacje spowodowały spadek liczby 8, co oznacza, że ​​nie mogłem przesłać kolejnych aktualizacji - polecenie cordova prepare odtwarza plik AndroidManifest.xml, zastępując ręczne zmiany.

Wersja problem można rozwiązać poprzez stworzenie platformy do \ android \ gradle.properties plik z treścią cdvVersionCode=13008

Alternatywnie, w moim przypadku, włożona android-versionCode przypisywać do config.xml:

<widget xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:vs="http://schemas.microsoft.com/appx/2014/htmlapps" id="uk.co.my.app" android-versionCode="103008" version="1.3.0" xmlns="http://www.w3.org/ns/widgets" defaultlocale="en-GB"> 

Żądana wersja Androida, w moim przypadku 103008 jest następnie poprawnie zapisywana w pliku AndroidManifest.xml używanym do kompilacji.

Minusem jest ręczna aktualizacja wersji na Androida, do góry nogami, można przesłać apk!

+0

Wolę ustawienie parametru cdvVersionCode w gradle.properties, jeśli nie jest to automatyczne. –

5

Dla tych, którzy chcą zachować koniec "8", napisałem hak after_prepare, aby było to łatwiejsze, nie trzeba utrzymywać wersji android-version w pliku config.xml wymienianym ręcznie przez @ChilledFlame.

Uwaga: jeśli nie zachowasz końca "8", po przesłaniu aplikacji do sklepu appstore kod wersji Androida jest mniejszy niż poprzedni, który został zbudowany przez Cordova 5, możesz napotkać "problem z obniżeniem wersji kodu wersji".

utwórz plik w folderze hooks/after_prepare/, dodaj następujący kod.

#!/usr/bin/env node 

var path = require('path'); 
var fs = require('fs'); 
var xml2js = require('xml2js'); 

function xmlFileToJs(filename, cb) { 
    var filepath = path.normalize(path.join(__dirname, filename)); 
    fs.readFile(filepath, 'utf8', function (err, xmlStr) { 
     if (err) throw (err); 
     xml2js.parseString(xmlStr, {}, cb); 
    }); 
} 

function jsToXmlFile(filename, obj, cb) { 
    var filepath = path.normalize(path.join(__dirname, filename)); 
    var builder = new xml2js.Builder(); 
    var xml = builder.buildObject(obj); 
    fs.writeFile(filepath, xml, cb); 
} 

var androidManifestRPath = '../../platforms/android/AndroidManifest.xml'; 
xmlFileToJs(androidManifestRPath, function(error, data) { 
    var config = data; 
    config.manifest.$['android:versionCode'] += '8'; 
    jsToXmlFile(androidManifestRPath, config) 
}); 

lub pobrać z tego linku: append_8_to_version_code.js

+0

dzięki za hak. Czy możesz mi powiedzieć, jak mogę dodać go do mojej kompilacji. Wciąż mam ten sam problem. Czy znalazłeś jakieś inne rozwiązanie? – krv

+0

utwórz ten plik w swoim projekcie: hooks/after_prepare/append_8_to_version_code.js. @krv – Leon

+0

Tęsknię za zrozumiałem Chciałem usunąć 8. Dlaczego dodawana jest 8 i dlaczego ktoś chciałby ją zatrzymać dla kogo napisałeś ten post? – krv

0

Po usunięciu zmian versionCode z ./platforms/android/build.gradle, "8" był nadal dołączany do versionCode w moim APK.

Wymagane było "cordova clean", zanim nowo wygenerowany pakiet APK będzie zawierał prawidłową wersję.