Ich hatte viel Spaß dabei, das herauszufinden. Hier ist mein Schritt-für-Schritt-Überblick.
Schritt-für-Schritt-Anleitung, wie man in IntelliJ (v. 13.1.4) eine Gradle-Bauplan-Datei erstellt. Diese Anleitung setzt voraus, dass Sie wissen, wie man eine Keystore-Datei erstellt. Damit dieses Tutorial funktioniert, muss sich Ihre Keystore-Datei in Ihrem App-Ordner befinden und Ihre zipalign.exe-Datei muss sich in 'SDK-ROOT\tools' befinden. Diese Datei wird normalerweise unter 'SDK-ROOT\build-tools' gefunden und in diesem Ordner befindet sie sich im höchsten API-Ordner (Alpha oder Beta, ich empfehle die Alpha-Version).
Für diejenigen von Ihnen, die direkt einsteigen möchten, hier ist die Gradle-Bauplan-Datei.
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
android {
compileSdkVersion 19
buildToolsVersion '20.0.0'
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
signingConfigs {
playstore {
keyAlias 'developers4u'
keyPassword 'thisIsNotMyRealPassword'
storeFile file('developers4u.keystore')
storePassword 'realyItIsNot'
}
}
buildTypes {
assembleRelease {
debuggable false
jniDebugBuild false
runProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
zipAlign true
signingConfig signingConfigs.playstore
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:support-v4:20.0.0'
implementation 'com.android.support:appcompat-v7:20.0.0'
}
Sie können einen Teil dieser Bauplan-Datei (oben) von der Menüoption erstellen: Datei/Projektstruktur Wählen Sie hier Facetten und klicken Sie auf 'Android-Gradle(App). Hier sehen Sie die Registerkarten: 'Eigenschaften', 'Signing', 'Varianten', 'Build-Typen' und 'Abhängigkeiten'. Für diese Schritt-für-Schritt-Anleitung verwenden wir nur 'Signing' und 'Build-Typen'. Geben Sie unter 'Build-Typen' (im Namensabschnitt) den gewünschten Namen für Ihre Build-Typ-Konfiguration ein und geben Sie in die anderen 4 Felder Ihre Keystore-Informationen ein (den Keystore-Pfad auf den im App-Ordner angegebenen).
Geben Sie unter 'Build-Typen' den Wert 'assembleRelease' in das Namensfeld ein, 'Debuggable' sollte auf false gesetzt werden, 'Jni Debug Build' sollte auf false gesetzt werden, setzen Sie 'Run Proguard' auf true und 'Zip Align' auch auf true. Dies wird die Bauplan-Datei generieren, jedoch nicht wie oben dargestellt, Sie müssen einige Dinge zur Bauplan-Datei hinzufügen. Der ProGuard-Dateiort wird hier manuell in der Gradle-Bauplan-Datei festgelegt (wie oben abgebildet).
Die DSL-Behälter, die Sie anschließend hinzufügen müssen, sind wie folgt:
android {
....
compileSdkVersion 19
buildToolsVersion '20.0.0'
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
....
}
Sie müssen auch hinzufügen:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:support-v4:20.0.0'
implementation 'com.android.support:appcompat-v7:20.0.0'
}
Beachten Sie, dass dieser DSL-Behälter oben ('Abhängigkeiten') sich am Ende der Konfigurationsdatei befinden sollte, aber nicht innerhalb des android DSL-Behälters. Um den Abhängigkeiten-Behälter von IntelliJ aus zu erstellen, wählen Sie im Menü: Datei/Projektstruktur. Wählen Sie erneut Facetten und dann Android-Gradle(app). Sie sehen die gleichen 5 Registerkarten wie oben erwähnt. Wählen Sie die Registerkarte 'Abhängigkeiten' und fügen Sie die benötigten Abhängigkeiten hinzu.
Nachdem all dies erledigt ist, sollte Ihre Gradle-Bauplan-Datei ähnlich aussehen wie die Datei oben in dieser Schritt-für-Schritt-Anleitung. Zum Erstellen Ihrer signierten, zip-alignierten Release müssen Sie die Gradle-Aufgaben öffnen. Sie können zu diesem Fenster gelangen, indem Sie Ansicht/Werkzeugfenster/Gradle auswählen. Von hier aus können Sie doppelt auf 'assembleAssembleRelease' klicken. Dies sollte Ihre bereitstellbare APK generieren.
Die möglichen Probleme, die beim Kompilieren Ihres Releases auftreten können (sind jedoch nicht darauf beschränkt), sind: Ihre Gradle-Bauplan-Datei befindet sich am falschen Ort. Es gibt zwei Gradle-Bauplan-Dateien; eine im Stammverzeichnis Ihrer Anwendung und eine weitere im App-Ordner unter dem Anwendungsstamm. Sie müssen die letztere verwenden.
Sie könnten auch auf Lint-Probleme stoßen. (Hinweis: Das Android Developer Studio erkennt Lint-Probleme viel besser als IntelliJ, Sie werden dies bemerken, wenn Sie versuchen, eine signierte APK aus den Menüoptionen zu generieren.)
Um Lint-Probleme zu umgehen, müssen Sie folgenden DSL-Behälter innerhalb des android-Behälters (am Anfang) platzieren:
android {
....
lintOptions {
abortOnError false
}
....
}
Wenn Sie dies in Ihren android-DSL-Behälter setzen, wird eine Fehlerdatei im Build-Ordner (direkt unter Ihrem App-Ordner) generiert. Der Dateiname sollte etwas wie 'lint-results-release-fatal.html' sein. Diese Datei wird Ihnen sagen, in welcher Klasse der Fehler aufgetreten ist. Eine weitere Datei, die generiert wird, ist eine XML-Datei, die die 'Issue ID' mit dem Lint-Fehler enthält. Der Dateiname sollte etwas wie 'lint-results-release-fatal.xml' sein. Irgendwo oben in der Datei sehen Sie einen Knoten 'issue', in dem Sie etwas Ähnliches wie 'id="IDIhresLintProblems"' sehen werden.
Um dieses Problem zu korrigieren, öffnen Sie die Datei in Ihrem Projekt, die in der 'lint-results-assembleRelease-fatal.html' aufgeführt war, und geben Sie die folgende Codezeile in die Java-Klassendatei ein, direkt über den Klassennamen: @SuppressLint("IDIhresLintProblems"). Möglicherweise müssen Sie 'android.annotation.SuppressLint;' importieren.
Ihre Java-Klassen-Datei sollte also so aussehen:
package com.WarwickWestonWright.developers4u.app.CandidateArea;
import android.annotation.SuppressLint;
... andere Imports
@SuppressLint("IDIhresLintProblems")
public class SearchForJobsFragment extends Fragment {... Rest Ihrer Klassendefinition}
Beachten Sie, dass das Unterdrücken von Lint-Fehlern nicht immer die beste Lösung ist. Möglicherweise ist es besser, Ihren Code zu ändern, der die Lint-Fehler verursacht hat.
Ein weiteres Problem, das auftreten könnte, besteht darin, dass Sie die Umgebungsvariable für die Gradle-HOME-Umgebungsvariable nicht festgelegt haben. Diese Variable heißt 'GRADLE_HOME' und sollte auf den Pfad des Gradle-Home-Verzeichnisses gesetzt werden, z.B. 'C:\gradle-1.12'. Manchmal möchten Sie auch die Umgebungsvariable für 'ANDROID_HOME' setzen, setzen Sie diese auf 'IHR-SDK-Stammverzeichnis\sdk'.
Nachdem dies erledigt ist, kehren Sie zum Gradle-Aufgabenfenster zurück und klicken Sie doppelt auf 'assembleAssembleRelease'.
Wenn alles erfolgreich war, sollten Sie in den Ordner app\build\apk gehen können und dort Ihre bereitstellbare APK-Datei finden.