相关疑难解决方法(0)

如何使用新的Gradle Android Build System手动包含外部aar包

我一直在尝试新的Android构建系统,我遇到了一个小问题.我已经编译了自己的ActionBarSherlock的aar包,我称之为'actionbarsherlock.aar'.我正在尝试做的实际上是使用这个aar来构建我的最终APK.如果我使用编译项目(':actionbarsherlock')将整个ActionBarSherlock库作为android-library模块包含到我的主项目中,我可以成功构建而没有任何问题.

但我的问题是,我想将该依赖项作为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"
}
Run Code Online (Sandbox Code Playgroud)

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

编辑:目前仍然没有直接支持,最好的替代方案似乎是来自@RanWakshlak的建议解决方案

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

android gradle build.gradle android-gradle-plugin

379
推荐指数
16
解决办法
29万
查看次数

如何从AAR依赖中排除特定资源?

模块的build.gradle文件是否有一种相当简单的方法来指示应该排除来自依赖项的某些文件?我特别想从AAR中排除某些资源.


LeakCanary是一个有趣的库,可帮助追踪内存泄漏.但是,它的无证要求compileSdkVersion是21或更高.虽然大多数项目都不应该有这个问题,但是图书馆compileSdkVersion没有充分理由要求某个项目是不合适的.开发团队可能已将其compileSdkVersion作为一般策略的一部分冻结,仅将这些设置更改为其应用程序或其他内容的主要版本更新的一部分.

在这种情况下,对于LeakCanary的v1.3.1至少,唯一的原因compileSdkVersion是AFAICT,因为AAR有一个res/values-v21/目录,包含一个继承自的主题定义Theme.Material.诊断活动使用此主题.最终用户从未见过该活动,只有debug构建中的开发人员才能看到.坦率地说,主题方面的活动看起来并不重要.迫使compileSdkVersion21只是让那个诊断活动有一个特定的主题是,恕我直言,愚蠢.

如果作为compile指令的一部分,我们可以说"嘿,请跳过res/values-v21/这个AAR,m'kay,这很好." 由于-v21主题只是提供了其他地方定义的主题的替代定义,因此删除-v21主题不会破坏构建或在运行时中断事物,而只会给我们一个Holo主题诊断活动.

我没有看到这个答案如何与依赖关系一起工作.我也不确定它是否完整,它似乎似乎没有得到支持.它也没有真正符合"简单"的条件 - 我不希望有人尝试将其放在build.gradle文件中只是为了阻止像LeakCanary这样的诊断库中的单个文件.

那么,是否有一些比这更简单的东西适用于当前版本的Android插件Gradle?

android android-gradle-plugin

30
推荐指数
2
解决办法
7866
查看次数