2016-05-12 12 views
12

W naszym projekcie Android chcemy, aby nazwa pliku naszego pliku APK zawierała takie informacje, jak data, nazwa gałęzi git i skrót skrótu commit.Android + Gradle: Najlepsze miejsce do ustawienia archiwum dynamicznegoNazwaNazwacza

Byliśmy ustawienie to jako część naszego defaultConfig

android { 
    defaultConfig { 
     setProperty("archivesBaseName", "$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha")  
    } 
} 

Działa to przez większość czasu, ale nasz build czasami kończy się niepowodzeniem i błędy wskazujące na wartości jest przestarzały (na przykład po włączeniu oddziałów). Wymuszanie Gradle Sync w Android Studio zwykle go naprawia.

Czy istnieje lepszy, bardziej solidny sposób, aby upewnić się, że nieruchomość pozostaje aktualna i wymusza stopniową synchronizację, jeśli to konieczne?

+0

Skończyłem to wszystko całkowicie i robiąc to po kompilacji. Chciałbym mieć odpowiednią odpowiedź na to pytanie. –

Odpowiedz

0

Jeśli wystąpi błąd podczas procesu budowania, pojawi się okno Wiadomości, które opisuje problem. Gradle może zalecić niektóre opcje wiersza polecenia, aby pomóc w rozwiązaniu problemu, na przykład --stacktrace lub --debug. Aby skorzystać z opcji wiersza polecenia z procesu kompilacji:

  1. Otwórz okno dialogowe Ustawienia lub Preferencje: W systemie Windows lub Linux, wybierz Plik> Ustawienia z menu głównego.
  2. Przejdź do Build, Execution, Deployment> Compiler.
  3. W polu tekstowym obok opcji wiersza polecenia wprowadź opcje wiersza polecenia.
  4. Kliknij OK, aby zapisać i wyjść.

Gradle zastosuje te opcje wiersza polecenia przy następnym uruchomieniu aplikacji.

Pobrałem informacje ze strony this.

+0

To nie rozwiązuje problemu. Wiem, na czym polega problem - Gradle nie wykrywa poprawnie środowiska, które się zmieniło (gałąź, data, rzeczy). –

+0

Nie jestem pewien, czy istnieje sposób automatycznego wykrywania zmiany i wymuszania ponownego zsynchronizowania. Jeśli znajdę sposób, żeby to zrobić, dam ci znać. –

2

spróbować zadzwonić clean.execute() przed

android { ... } 

jest najtańszy synchronizację zadania mogę myśleć :)

clean.execute() 
    android { 
     defaultConfig { 
      setProperty("archivesBaseName", "$projectName.$branchName.$date.$buildNumber.$versionCode-$versionName-$versionSha")  
     } 
    } 
+0

haha, surowy, ale myślę, że może "działać". Nadal chciałbym coś, co jest bardziej "rozwiązaniem" niż hackem –

0

miałem ten sam problem, nie zawsze były uptodate z budować.

że rozwiązany za pomocą:

project.ext.set("archivesBaseName", "myAppName"); 

ramach bloku defaultConfig, i zatrzymane sprawia problemy.

Nie jestem pewny, czy zadziała dla oddziału, numeru kompilacji lub daty, ale warto go oddać. Oto moje konfiguracje, w tym blok DefaultConfig. W moim przypadku użyłem tylko zakodowanej wersji VersionName i Build Number (nazywam ją versionCode, ponieważ ustawiam ją w manifeście dynamicznie). Być może jednak możesz dostosować go do swoich potrzeb:

defaultConfig { 
    minSdkVersion 15 
    targetSdkVersion 22 

    versionCode System.getenv("BUILD_NUMBER") as Integer ?: 0 

    versionName "6.2.5." + versionCode 

} 
project.ext.set("archivesBaseName", "myAppname" + defaultConfig.versionName); 
+1

, to nie zadziała! 'project.ext.set' pozostaje w pamięci podręcznej, dopóki nie sincronize pliku gradle! jeśli wyrzuci losowy '.apk nie istnieje na dysku' – miv

Powiązane problemy