我一直在尝试新的android构建系统,我遇到了一个小问题。我已经编译了我自己的ActionBarSherlock的aar包,我称之为' ActionBarSherlock .aar'。我想做的是用这个aar来构建我最终的APK。如果我包括整个ActionBarSherlock库作为一个android-library模块到我的主项目使用编译项目(':ActionBarSherlock '),我能够成功地构建没有任何问题。

但我的问题是,我想手动提供一个aar文件包的依赖,如果我将JAR,那么我似乎不知道如何正确地将它包含到我的项目中。我尝试使用编译配置,但这似乎不工作。在编译期间,我一直无法找到符号,这告诉我aar包中的classes.jar没有包含在类路径中。

有人知道手动包含aar包作为文件的语法吗?

build.gradle

buildscript {

 repositories {
     mavenCentral()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:0.4'
  }
}
apply plugin: 'android'

repositories {
   mavenCentral()
}
dependencies {
    compile files('libs/actionbarsherlock.aar')
}

android {
    compileSdkVersion 15
    buildToolsVersion "17.0"
}

编辑:所以答案是目前不支持,如果你想跟踪它,这是一个问题。

编辑:目前这仍然不直接支持,最好的替代方案似乎是@RanWakshlak提出的解决方案

编辑:使用@VipulShah提出的语法也更简单


当前回答

我刚刚成功了!

复制mylib-0.1。Aar文件到libs/文件夹 将这些行添加到构建的底部。Gradle(应该是应用,而不是项目): 存储库{ flatDir { dirs“填词” } } 依赖关系{ 编译“@aar com.example.lib: mylib: 0.1” } 到目前为止一切顺利。这里是最重要的一点:

除非启用了离线模式,否则Gradle需要访问网络以获取依赖关系。

确保您已经通过项目结构/Gradle中的复选框启用了离线工作

——或——

配置代理设置以便访问网络。

要配置代理设置,您必须修改项目的gradle。属性文件,分别配置HTTP和HTTPS如下:

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>

希望这有用。

其他回答

在应用程序中导入AAR文件的标准方法在https://developer.android.com/studio/projects/android-library.html#AddDependency中给出

单击“File > New > New Module”。 单击“导入。jar /”。AAR包然后单击下一步。 输入已编译的AAR或JAR文件的位置,然后单击Finish。

请参考上面的链接了解下一步操作。

还有一种方法。

通常。aar文件不应该像我们使用.jar那样直接使用,因此上面提到的在libs文件夹中提到它并在gradle中声明的解决方案是可以避免的。

步骤1:解包.aar文件(可以通过将扩展名重命名为“。Aar "到".zip")

步骤2:解压后,您很可能会在文件夹中找到.jar文件。复制这个.jar文件并将其粘贴到module/libs文件夹中

第三步:就是这样,现在同步你的项目,你应该能够从那个.jar中访问所有的类/方法/属性。你不需要在任何gradle文件中提到它的路径/名称/存在,这是因为gradle构建系统在构建项目时总是寻找存在于libs文件夹中的文件

以下方法适用于Android studio v0.8.x:

将aar文件保存在app模块的libs文件夹下(例如:<project>/<app>/libs/myaar.aar) 添加下面的构建。Gradle的“app”模块文件夹(不是你的项目根build.gradle)。注意编译行中的名称,它是myaar@aar而不是myaar.aar。 依赖关系{ 编译“package.name.of.your.aar: myaar@aar” } 存储库{ flatDir { dirs“填词” } } 点击工具-> Android ->同步项目与Gradle文件

我刚刚成功了!

复制mylib-0.1。Aar文件到libs/文件夹 将这些行添加到构建的底部。Gradle(应该是应用,而不是项目): 存储库{ flatDir { dirs“填词” } } 依赖关系{ 编译“@aar com.example.lib: mylib: 0.1” } 到目前为止一切顺利。这里是最重要的一点:

除非启用了离线模式,否则Gradle需要访问网络以获取依赖关系。

确保您已经通过项目结构/Gradle中的复选框启用了离线工作

——或——

配置代理设置以便访问网络。

要配置代理设置,您必须修改项目的gradle。属性文件,分别配置HTTP和HTTPS如下:

systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>

systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>

希望这有用。

只需几行代码就可以添加多个aar依赖项。

添加本地flatDir存储库:

repositories {
    flatDir {
        dirs 'libs'
    }
} 

添加libs目录下的所有aar以编译依赖项配置:

fileTree(dir: 'libs', include: '**/*.aar')
        .each { File file ->
    dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}