SDK和使用SDK构建的应用程序之间的JAR / AAR依赖关系管理

时间:2016-03-31 23:06:54

标签: android android-gradle dependency-management

对于我们开发的SDK,我们正在寻找解决依赖冲突的正确方法,当SDK项目和客户端应用程序(使用SDK构建)使用相同的第三方库(例如,Otto来自Square,Android Annotations等),可能不一定与第三方库的确切版本相同。

我注意到gradle提供了这样的设置:

dependencies { compile("org.gradle.test.excludes:api:1.0") { exclude module: 'shared' } }

虽然这种方法很简洁,但我认为缺点是,SDK开发人员需要告知SDK用户他们在项目中使用的所有库,因此库不会被“隐藏”。

另一种方法是使用jarjar之类的工具来重新打包JAR库。虽然我从未使用过这个工具,但看起来很简单,但是每次有新版本的库时都必须这样做,也许不是一个好方法。

任何指针都会非常有用。

1 个答案:

答案 0 :(得分:1)

  SDK开发人员需要告知SDK用户他们在项目中使用的所有库,因此库中的库是'不被保留"隐藏"

不是真的。集成SDK的开发人员可以use Gradle to determine what the transitive dependencies are进行调整。

  

另一种选择是使用像jarjar这样的工具来重新打包JAR库。虽然我从未使用过这个工具,但看起来很简单,但是每次有新版本的库时都必须这样做,也许不是一个好方法。

AFAIK,jarjar仅适用于JAR。并非所有Android依赖项都是JAR,正如您在问题标题中所述。对于AAR,AFAIK,您必须创建自己的Sub DataTable() Dim wsEff As Worksheet Dim wsShip As Worksheet ''Application.ActiveSheet.Name = Range("A2") 'Need ' Set wsShip = Worksheets(Range("A2"))? Set wsShip = Worksheets("Shipped") Set wsEff = Worksheets("Efficiency") With wsEff Dim lRow As Long lRow = .Range("A" & .Rows.Count).End(xlUp).Row .Range("A1:H" & lRow).AutoFilter Field:=2, Criteria1:="Ship" Dim rngCopy As Range 'All Columns A:H Set rngCopy = .Columns("A:H") 'filtered rows, not including header row - assumes row 1 is headers Set rngCopy = Intersect(rngCopy, .Range("A1:H" & lRow), .Range("A1:H" & lRow).Offset(1)).SpecialCells(xlCellTypeVisible) rngCopy.Copy End With wsShip.Range("A4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Worksheets("Efficiency").ShowAllData End Sub 工具,该工具可以处理将所有资源,资产等更改为新名称,因此它们不会与原始AAR冲突。这可能很难。