Ich habe eine Weile nachgeforscht und hier wahrscheinlich die beliebtesten Antworten in Bezug auf aar und transitive Abhängigkeiten gesehen, aber irgendwie ist mir immer noch nicht klar, wie ich das zum Laufen bringen soll.
So:
Ich habe eine Android-Bibliothek mit der angegebenen Gradle-Konfiguration:
apply plugin: 'android-library'
apply plugin: 'android-maven'
version = "1.0.0"
group = "com.somepackage"
buildscript {
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
classpath 'com.github.dcendents:android-maven-plugin:1.0'
}
}
android {
compileSdkVersion 19
buildToolsVersion '19.0.3'
defaultConfig {
minSdkVersion 10
}
}
repositories {
maven { url 'http://www.bugsense.com/gradle/' }
}
dependencies {
provided 'com.google.android.gms:play-services:+'
provided 'com.android.support:appcompat-v7:+'
compile 'com.google.code.gson:gson:2.2.4'
compile 'com.bugsense.trace:bugsense:3.6'
compile 'commons-net:commons-net:3.3'
}
Dann stelle ich es für ein lokales Maven-Repo bereit gradle install
. Die POM-Datei der bereitgestellten Bibliothek sieht folgendermaßen aus:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sprezzat</groupId>
<artifactId>app</artifactId>
<version>1.0.0</version>
<packaging>aar</packaging>
<dependencies>
<dependency>
<groupId>com.bugsense.trace</groupId>
<artifactId>bugsense</artifactId>
<version>3.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.3</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
Und schließlich gradle Konfiguration meiner Android-Anwendung unter Verwendung der obigen Bibliothek als Abhängigkeit:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.+'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
mavenLocal()
}
android {
compileSdkVersion 15
buildToolsVersion "19.0.2"
defaultConfig {
minSdkVersion 10
targetSdkVersion 18
}
}
dependencies {
compile 'com.google.android.gms:play-services:+'
compile 'com.android.support:appcompat-v7:+'
compile 'com.somepackage:LIBRARY_NAME:1.0.0@aar'
}
Und nachdem ich die Anwendung auf dem Telefon NoClassDefFoundError
bereitgestellt habe, erhalte ich Klassen, die zum Kompilieren von Abhängigkeiten meiner Android-Bibliothek gehören.
Überprüfen meiner Android-Anwendungsabhängigkeiten mit gradle dependencies
:
apk - Classpath packaged with the compiled main classes.
+--- com.google.android.gms:play-services:+ -> 4.3.23
| \--- com.android.support:support-v4:19.0.1 -> 19.1.0
+--- com.android.support:appcompat-v7:+ -> 19.1.0
| \--- com.android.support:support-v4:19.1.0
\--- com.somepackage:LIBRARY_NAME:1.0.0
Gemäß dem obigen Baum werden nicht alle transitiven Abhängigkeiten erkannt. Wo liegt das Problem und wie soll es richtig gemacht werden?
provided
Schlüsselwort dort haben möchten ? Laut Xav sind solche Abhängigkeiten nicht in der APK gepackt, und ich würde denken, dass Sie möchten, dass diese in der APK gepackt werden.
gradle dependencies
für meine Android- Bibliothek : Standard - Konfiguration für Standardartefakte. + --- com.google.code.gson: gson: 2.2.4 + --- com.bugsense.trace: bugsense: 3.6 \ --- commons-net: commons-net: 3.3
gradle dependencies
für die App zu laufen , nicht für eine Bibliothek, die jemand als "App" bezeichnete.
gradle dependencies
für Ihre App untersucht?