sn0*_*0ep 66 android gradle maven android-studio aar
所以我创建了一个Android-Library,并成功地将其编译成.aar文件,我称之为aar文件:"projectx-sdk-1.0.0.aar"现在我希望我的新项目依赖于这个aar所以我所做的就是关注这篇文章:http:// life. nimbco.us/referencing-local-aar-files-with-android-studios-new-gradle-based-build-system/
但由于我没有得到预期的结果,这篇文章让我感到困惑:
aar的包名是:com.projectx.photosdk并调用里面的模块sdk
这是我目前的项目结构:
|-SuperAwesomeApp
|--.idea
|--gradle
|--App
|---aars
|----projectx-sdk-1.0.0.aar
|---build
|---jars
|---src
|---build.gradle
他是我的gradle构建文件:
apply plugin: 'android'
buildscript {
    repositories {
        mavenCentral()
        flatDir {
            dirs 'aars'
        }
    }
}
android {
    compileSdkVersion 19
    buildToolsVersion "19.0.1"
    defaultConfig {
        minSdkVersion 11
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}
dependencies {
    compile 'com.android.support:gridlayout-v7:19.0.1'
    compile 'com.android.support:support-v4:19.0.1'
    compile 'com.android.support:appcompat-v7:19.0.1'
    compile 'com.projectx.photosdk:sdk:1.0.0@aar'
//    compile files( 'aars/sdk-1.0.0.aar' ) // Does not work either
}
//编辑
我得到的错误:
Failed to refresh Gradle project 'SuperAwesomeApp'
     Could not find com.projectx.photosdk:sdk:1.0.0.
     Required by:
     SuperAwesomeApp:App:unspecified
Sco*_*rta 69
你把你的flatDir块放在错误的repostories块中.repositories里面的块buildscript告诉Gradle在哪里可以找到Android-Gradle插件,但不能找到其余的依赖项.你需要有另一个顶级repositories块,如下所示:
repositories {
    mavenCentral()
    flatDir {
        dirs 'aars'
    }
}
我测试了这个,它在我的设置上运行正常.
pel*_*lus 41
对于使用1.3测试的最新版Android Studio,要使用本地.AAR文件而不是从maven/jcenter存储库获取的文件,只需转到文件>新建>新模块,然后选择导入.JAR/.AAR包.
你最终得到的是项目中的一个新模块,它包含非常简单的build.gradle文件,看起来或多或少是这样的:
configurations.create("default")
artifacts.add("default", file('this-is-yours-package-in-aar-format.aar'))
当然,其他项目必须使用常规的编译项目指令来引用这个新模块 .所以在一个使用这个简单的新模块的项目中,本地.aar文件在它的build.gradle中有这个
[...]
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    ompile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'
    [...]
    compile project(':name-of-module-created-via-new-module-option-described-above')
}
[...]
Yen*_*Yen 11
在带有gradle 3.0.1的Android Studio 3.1.3中。
只需添加implementation fileTree(dir: 'libs', include: ['*.aar'])或implementation files('libs/app-release.aar')不添加任何其他flatdir作品。
这些天(在这个问题之后超过1年)Android Studio> 1.0,本地依赖确实正常工作:
$ANDROID_HOME/extras/android/m2repository/在本地库项目中,您可以将aar发布到此目录.这是一个可以添加到模块build.gradle文件的代码段(例如:sdk/build.gradle)
apply plugin: 'maven'
uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file://localhost" + System.getenv("ANDROID_HOME")
                + "/extras/android/m2repository/")
            pom.version = '1.0-SNAPSHOT'
            pom.groupId = 'your.package'
            pom.artifactId = 'sdk-name'
        }
    }
}
./gradlew uploadArchives以将aar发布到该目录compile 'your.package:sdk-name:1.0-SNAPSHOT'对于本地依赖,下一个gradle构建应该找到以前部署的存档,就是这样!
在我的例子中,我使用上面的本地开发,但也有一个用于库的Bamboo持续集成服务器,它将每个构建发布到共享的Nexus工件库.然后,部署工件的完整库代码变为:
uploadArchives {
    repositories {
        mavenDeployer {
            if (System.getenv("BAMBOO_BUILDNUMBER") != null) {
                // Deploy to shared repository
                repository(url: "http://internal-nexus.url/path/") {
                    authentication(userName: "user", password: "****")
                }
                pom.version = System.getenv("BAMBOO_BUILDNUMBER")
            } else {
                // Deploy to local Android sdk m2repository
                repository(url: "file://localhost" + System.getenv("ANDROID_HOME")
                        + "/extras/android/m2repository/")
                pom.version = '1.0-SNAPSHOT'
            }
            pom.groupId = 'your.package'
            pom.artifactId = 'sdk-name'
        }
    }
}
为了告诉应用程序从我的内部Nexus存储库下载,我在项目/ build.gradle中的两个"存储库"块中的jcenter()上方添加了内部Nexus maven存储库
repositories {
    maven {
        url "http://internal-nexus.url/path/"
    }
    jcenter()
}
然后应用程序依赖性看起来compile 'your.package:sdk-name:45'当我将45版本更新到46时,我的项目将从Nexus服务器获取新工件.
| 归档时间: | 
 | 
| 查看次数: | 60397 次 | 
| 最近记录: |