ライブラリを共有するためにプライベートmavenを使用することはできないので、aarを共有して別のプロジェクトにインポートすることを考えていました。この問題は、aarファイルとjarファイルに依存関係が含まれていない場合に発生します。したがって、Android studio(Import .JAR/.AA Packageを使用)でaarを手動でインポートすると、依存関係はなくなり、すべての依存関係を手動で再度追加する必要があります。pomファイルはすでに生成されていますプロジェクトに手動でインポートする方法はありませんが、gradleタスクを使用します。
「.JAR/.AAパッケージのインポート」によって自動的に生成されたbuild.gradleファイルは次のとおりです。
configurations.maybeCreate("default")
artifacts.add("default", file('TestSample_1.0.0.aar'))
Pom/imlファイルも追加する方法はありますか?何かのようなもの:
artifacts.add("default", file('pomDependencies.xml'))
Aarプロジェクトで、maven-publish
プラグインを追加し、必要なプラグイン構成を追加します。
apply plugin: 'com.Android.library'
apply plugin: 'maven-publish'
...
dependencies {
testCompile 'junit:junit:4.12'
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.novoda:bintray-release:0.2.7'
}
...
publishing {
publications {
maven(MavenPublication) {
groupId 'com.example' //You can either define these here or get them from project conf elsewhere
artifactId 'example'
version '0.0.1-SNAPSHOT'
artifact "$buildDir/outputs/aar/app-release.aar" //aar artifact you want to publish
//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.compile.allDependencies.each { dependency ->
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
//publish to filesystem repo
repositories{
maven {
url "$buildDir/repo"
}
}
}
注意すべきいくつかのこと:
私たちはカスタムのMavenパブリケーションを使用しているので、artifact
句でパブリッシュされるものを定義する必要があります
自分でpomを生成する必要があります。上のコードでは、すべてのコンパイル構成の依存関係を使用しています。必要な構成がすべてカバーされていることを確認したい場合があります。
gradle publish
を実行すると、Mavenレポ構造からrepo
フォルダーにパブリッシュされ、別のプロジェクトから使用できます。
別のAndroid=プロジェクトで、#1で公開されたaarを使用するには:トップレベルのbuild.gradleで:
allprojects {
repositories {
jcenter()
maven {
url "D:/full/path/to/repo"
}
}
}
以前のリポジトリへのパスをMavenリポジトリとして追加します。このプロジェクトでは$buildDir
の値が異なるため、完全パスを使用する必要がある場合があることに注意してください。アプリのbuild.gradleで:
dependencies {
...
other dependencies
...
compile ('com.example:example:0.0.1-SNAPSHOT@aar'){transitive=true}
}
transitive=true
は、pomファイルから推移的な依存関係を取得するために必要です。
物事は少し変更されました。最新バージョンのgradle
を使用してこれを行う方法を次に示します
パッケージのローカルを作成(aarおよびpom)
ライブラリbuild.gradle
ファイルを変更して、
apply plugin: 'maven-publish'
Android {
...
...
}
dependencies {
...
...
}
publishing {
publications {
maven(MavenPublication) {
groupId 'com.domain' //You can either define these here or get them from project conf elsewhere
artifactId 'name'
version '1.0.0'
artifact "$buildDir/outputs/aar/sdk-release.aar" //aar artifact you want to publish
//generate pom nodes for dependencies
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.each { dependency ->
if (dependency.name != 'unspecified') {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dependency.group)
dependencyNode.appendNode('artifactId', dependency.name)
dependencyNode.appendNode('version', dependency.version)
}
}
}
}
//publish to filesystem repo
repositories{
maven {
url "$buildDir/repo"
}
}
}
ターミナルから実行
./gradlew clean
./gradlew build
./gradlew --console=verbose publishToMavenLocal
aar
およびpom
ファイルが$HOME/.m2/repository/
に作成されました
別のプロジェクトからライブラリをロードする方法
プロジェクトのbuild.gradle
を次のように変更します。
allprojects {
repositories {
maven {
url "/Users/username/.m2/repository/"
}
google()
jcenter()
}
$rootDir
を使用して、相対パスを設定できます。
ライブラリを依存関係としてアプリモジュールに追加しますbuild.gradle
implementation 'com.domain:name:1.0.0'