Android Studio Android 有资源的图书馆
Android Studio Android Library with resources
我想创建 Android 带有 jar 文件和没有源代码的资源的库。
依赖结构:
- Android 库示例:
- 取决于支持 v4、v7 和一些包含的 jar
- 示例应用程序
- 取决于 Android 库示例和 v4、v7 支持
我可以通过编译 Android 示例库来生成 jar 文件,但是当我使用 Android 库示例和生成的 jar 创建新的工作区时,我得到这样的错误:
错误:任务“:sampleAppProject:dexDebug”执行失败。
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
这似乎是由我生成的 jar 中包含的重复支持 v4、v7 引起的。当我从 gradle 依赖项中删除支持 v7 和 v4 库时,我得到:
错误:(1) 检索项目的父项时出错:找不到与给定名称 'Theme.AppCompat.Light' 匹配的资源。
错误:(1) 检索项目的父项时出错:找不到与给定名称 'Theme.AppCompat.Light' 匹配的资源。
错误:(1) 检索项目的父项时出错:找不到与给定名称匹配的资源 'Theme.AppCompat.Light.DarkActionBar'。
所以缺少支持资源。我该如何解决?
更新:
根据@dawidgdanski 的提示,我已经能够编译我的项目。我的错误更改为 finished with non-zero exit value 1 我认为这是由重复的包名称引起的。我更改了清单中的包名称,但现在我得到
java.lang.ClassNotFoundException: 未在路径中找到类“**.android.R$layout”:DexPathList[[zip 文件 ...
似乎是因为我在清单中更改了包,在编译过程中 R class 与 jar 文件中包含的 class 不一致
来自 Gradle 控制台:
AGPBI:{"kind":"SIMPLE","text":"java.lang.IllegalArgumentException: already added: L.../library/android/R$anim;","position":{},"original":"java.lang.IllegalArgumentException: already added: L.../library/android/R$anim;"}
是的,您复制了依赖项。如果您在项目目录中执行 gradle dependencies
,您将看到支持库增加了一倍。为了防止这种情况的发生,您需要决定您是否真的需要 Android 库中的支持库。如果您需要它们,您必须明确告诉最终开发人员,支持库也应该从他们的应用程序中排除。
让我们关注以下片段:
dependencies {
// App dependencies
compile 'com.android.support:appcompat-v7:21.0.3'
//Library dependency
compile (project(':library')) {
exclude group: 'com.android.support' module: 'appcompat-v7'
}
}
假设您的库使用兼容库,这是您排除不必要的 'appcompat-v7' 依赖的方式。
另一方面,您可以只包含您的库依赖项,因为它带有满足您需求的版本的 appcompat-v7。
你可以看到我刚才创建的示例项目。它由几个相互协作的模块组成。
https://github.com/dawidgdanski/BLE-matters
有时您会包含包含已预编译依赖项的库。通过执行 gradle dependencies
你可以看到它们并排除它们。您唯一需要识别的是要排除的依赖项是模块还是附加到您包含的父库的单独库。
排除预编译模块如下所示:
compile ('com.google.android.gms:play-services-wearable:6.1.71') {
exclude module: 'support-v4'
}
然而,为了排除预编译依赖,您可以这样指定它:
compile (project(':library')) {
exclude group: 'com.android.support' module: 'appcompat-v7'
}
顺便说一句。你遇到过和你类似的问题吗?
您的应用程序可能已达到 65k 个方法阈值。
干杯
我想创建 Android 带有 jar 文件和没有源代码的资源的库。
依赖结构:
- Android 库示例:
- 取决于支持 v4、v7 和一些包含的 jar
- 示例应用程序
- 取决于 Android 库示例和 v4、v7 支持
我可以通过编译 Android 示例库来生成 jar 文件,但是当我使用 Android 库示例和生成的 jar 创建新的工作区时,我得到这样的错误:
错误:任务“:sampleAppProject:dexDebug”执行失败。
com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
这似乎是由我生成的 jar 中包含的重复支持 v4、v7 引起的。当我从 gradle 依赖项中删除支持 v7 和 v4 库时,我得到:
错误:(1) 检索项目的父项时出错:找不到与给定名称 'Theme.AppCompat.Light' 匹配的资源。 错误:(1) 检索项目的父项时出错:找不到与给定名称 'Theme.AppCompat.Light' 匹配的资源。 错误:(1) 检索项目的父项时出错:找不到与给定名称匹配的资源 'Theme.AppCompat.Light.DarkActionBar'。
所以缺少支持资源。我该如何解决?
更新:
根据@dawidgdanski 的提示,我已经能够编译我的项目。我的错误更改为 finished with non-zero exit value 1 我认为这是由重复的包名称引起的。我更改了清单中的包名称,但现在我得到
java.lang.ClassNotFoundException: 未在路径中找到类“**.android.R$layout”:DexPathList[[zip 文件 ...
似乎是因为我在清单中更改了包,在编译过程中 R class 与 jar 文件中包含的 class 不一致
来自 Gradle 控制台:
AGPBI:{"kind":"SIMPLE","text":"java.lang.IllegalArgumentException: already added: L.../library/android/R$anim;","position":{},"original":"java.lang.IllegalArgumentException: already added: L.../library/android/R$anim;"}
是的,您复制了依赖项。如果您在项目目录中执行 gradle dependencies
,您将看到支持库增加了一倍。为了防止这种情况的发生,您需要决定您是否真的需要 Android 库中的支持库。如果您需要它们,您必须明确告诉最终开发人员,支持库也应该从他们的应用程序中排除。
让我们关注以下片段:
dependencies {
// App dependencies
compile 'com.android.support:appcompat-v7:21.0.3'
//Library dependency
compile (project(':library')) {
exclude group: 'com.android.support' module: 'appcompat-v7'
}
}
假设您的库使用兼容库,这是您排除不必要的 'appcompat-v7' 依赖的方式。
另一方面,您可以只包含您的库依赖项,因为它带有满足您需求的版本的 appcompat-v7。
你可以看到我刚才创建的示例项目。它由几个相互协作的模块组成。
https://github.com/dawidgdanski/BLE-matters
有时您会包含包含已预编译依赖项的库。通过执行 gradle dependencies
你可以看到它们并排除它们。您唯一需要识别的是要排除的依赖项是模块还是附加到您包含的父库的单独库。
排除预编译模块如下所示:
compile ('com.google.android.gms:play-services-wearable:6.1.71') {
exclude module: 'support-v4'
}
然而,为了排除预编译依赖,您可以这样指定它:
compile (project(':library')) {
exclude group: 'com.android.support' module: 'appcompat-v7'
}
顺便说一句。你遇到过和你类似的问题吗?
您的应用程序可能已达到 65k 个方法阈值。
干杯