2013-04-01 12 views
19

Próbuję przekonwertować wszystkie moje skrypty budujące mrówki, aby uzyskać gradle, i udało mi się znaleźć obszerne zasoby i dokumentację, oprócz tego, jak skonfigurować podpisywanie w plik gradle.properties.Zatwierdzanie podpisu w gradle.properties dla Androida

ant.properties robi to tak:

key.alias=alias 
key.store.password=password 
key.store=keystore.file 
key.alias.password=password 

Ale jak mogę zrobić to samo w Gradle?

Odpowiedz

33

W swoim gradle.properties magazyn plików takie same wartości jak w ant.properties pliku, myślę, że trzeba zrobić prostsze nazwy, jak na przykład keyAlias. Po prostu usuń kropki, aby mieć pewność.

następnie w build.gradle pliku zrobić coś takiego:

android { 
    signingConfigs { 
     release 
    } 
    buildTypes { 
     release { 
      signingConfig signingConfigs.release 
     } 
    } 
} 

if (project.hasProperty('keyAlias')) { 
    android.signingConfigs.release.keyAlias = keyAlias 
} 
// do the same for the three other properties 
// ... 

robi to w ten sposób daje elastyczność, aby zbudować na komputerze, który ma gradle.properties plików lub nie. Właściwość "keyalias" jest czytana tylko wtedy, gdy istnieje, więc kod nie zawiedzie, jeśli go nie ma.

Jeśli wszystkie właściwości są dostępne, signingConfigs.release zostanie w pełni skonfigurowane i będzie używane do podpisywania pliku APK podczas kompilacji. Jeśli go nie ma, pakiet APK zostanie zbudowany, ale nie zostanie podpisany.

+0

dzięki, naprawiłem to. –

+0

Nadal masz problem? Zauważ, że kolejność wyglądu ma znaczenie, zobacz http://stackoverflow.com/a/22791482/190599 – CodeReaper

22

Udało mi się to zrobić za pomocą następujących. Próbowałem rozwiązania Xav, ale narzekałoby to podczas etapu sprawdzania wersji, jeśli nie miałem ustawionych właściwości. Jestem pewien, że jest to ostatnia zmiana ze względu na bardzo zmieniającą się strukturę. Chciałem tylko pomóc, wskazując, że na samym końcu pod numerem else udało mi się wymusić unieważnienie funkcji signingConfig. Teraz zarówno podpisane, jak i niepodpisane wydania mają miejsce w zależności od obecności gradle.properties.

signingConfigs { 
    release { 
     keyAlias = "blue_sleep" 
    } 
} 

buildTypes { 
    release { 
     signingConfig signingConfigs.release 
    } 
} 

if (project.hasProperty('storeFile') && 
     project.hasProperty('storePassword') && 
     project.hasProperty('keyPassword')) { 
    android.signingConfigs.release.storeFile = file(storeFile) 
    android.signingConfigs.release.storePassword = storePassword 
    android.signingConfigs.release.keyPassword = keyPassword 
} else { 
    android.buildTypes.release.signingConfig = null 
} 

kilka innych przydatnych notatek, można umieścić gradle.properties w ~/.gradle/jeśli nie chcesz to siedzi w folderze projektu. Można również ustawić właściwość storeFile z bezwzględną ścieżką podobną do poniższej: storePath=file:///Users/nick/Dropbox/mycompany.keystore

3

Gradle 1.9 nie pozwala na zdefiniowanie właściwości. Możesz dodać je tylko do ext teraz. Mały dodatek do poprzednich odpowiedzi:

signingConfigs { 
    debug { 
     project.ext.loadSign = false 
    } 
    release { 
     project.ext.loadSign = true 
    } 
} 

buildTypes { 
    debug { 
     signingConfig signingConfigs.debug 
    } 
    release { 
     signingConfig signingConfigs.release 
    } 
} 

if (project.ext.loadSign) { 
    Properties p = new Properties() 
    p.load (new FileInputStream (rootProject.file ('keys/sign.properties'))) 

    android.signingConfigs.release.storeFile file (p.file) 
    android.signingConfigs.release.storePassword p.password 
    android.signingConfigs.release.keyAlias p.alias 
    android.signingConfigs.release.keyPassword p.keyPassword 
} 
4

Zainspirowany rozwiązaniem Eugensa, wymyśliłem nieco mniejszą wariancję. Kod musi znajdować się w konfiguracji zadania Android {}.

File signFile = rootProject.file('sign.properties') 
if (signFile.exists()) { 
    Properties p = new Properties() 
    p.load(new FileInputStream(signFile)) 
    signingConfigs { 
     releaseConfig { 
      storeFile file(p.storeFile) 
      storePassword p.storePassword 
      keyAlias p.keyAlias 
      keyPassword p.keyPassword 
     } 
    } 
    buildTypes.release.signingConfig signingConfigs.releaseConfig 
} 
+0

Krótka, użyteczna i po prostu działa. Dzięki – Meanman

0

Moje wymagania były, że ktoś bez kluczy powinien być w stanie zbudować prawidłowo. To najczystszy sposób, jaki mogłem znaleźć:

android { 
    signingConfigs { 
     release //Filled in readSigningConfigIfAvailable() 
    } 

    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-xyz.txt' 
      readSigningConfigIfAvailable() 
     } 
    } 
} 

private void readSigningConfigIfAvailable() { 
    if (hasAllSigningProperties()) { 
     android.signingConfigs.release.storeFile = file(keystore_path) 
     android.signingConfigs.release.storePassword = keystore_password 
     android.signingConfigs.release.keyAlias = key_alias 
     android.signingConfigs.release.keyPassword = key_password 
     android.buildTypes.release.signingConfig = android.signingConfigs.release 
    } else { 
     android.buildTypes.release.signingConfig = null 
    } 
} 

private boolean hasAllSigningProperties() { 
    (hasProperty('keystore_path') 
    && hasProperty('keystore_password') 
    && hasProperty('key_alias') 
    && hasProperty('key_password')) 
} 
+0

jaki plik gradle? ten w folderze cordova? ten, który widzę na Androidzie to "wygenerowany plik", nie edytuj. – FlavorScape

Powiązane problemy