python - 为什么 Buck AntennaPod 示例中没有添加 android-support-v4.jar?

标签 python buck

我正在处理 AntennaPod并查看它如何构建 submodules 文件夹。

enter image description here

有一个 jar 文件 android-support-v4.jar 是该项目的一部分。

我在代码中没有看到实际添加此 .jar 的任何地方。我在 buck-out/bin 文件夹中也没有看到它。

这是它的android_library步骤:

android_library(
  name = 'dslv-lib',
  srcs = glob(['submodules/dslv/library/src/**/*.java']),
  deps = [
    ':all-jars',
    ':dslv-res',
  ],
)

我看到它正在获取 java 文件,并且它取决于 all-jars 和 dslv-res 规则。但 all-jars 只获取 libs 文件夹中的 jar(没有 support-v4.jar)。

我的问题是:为什么这个 android-support-v4.jar 没有被添加(或者我错过了什么),以及构建规则是什么添加吗?

Buck 示例的完整 AntennaPod 代码如下:

import re

jar_deps = []
for jarfile in glob(['libs/*.jar']):
  name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile)
  jar_deps.append(':' + name)
  prebuilt_jar(
    name = name,
    binary_jar = jarfile,
  )

android_library(
  name = 'all-jars',
  exported_deps = jar_deps,
)

presto_gen_aidls = []
for aidlfile in glob(['src/com/aocate/presto/service/*.aidl']):
  name = 'presto_aidls__' + re.sub(r'^.*/([^/]+)\.aidl$', r'\1', aidlfile)
  presto_gen_aidls.append(':' + name)
  gen_aidl(
    name = name,
    aidl = aidlfile,
    import_path = 'src',
  )

android_library(
  name = 'presto-aidls',
  srcs = presto_gen_aidls,
)


android_build_config(
  name = 'build-config',
  package = 'de.danoeh.antennapod',
)

APP_CLASS_SOURCE = 'src/de/danoeh/antennapod/AppShell.java'

android_library(
  name = 'main-lib',
  srcs = glob(['src/de/danoeh/antennapod/**/*.java'], excludes = [APP_CLASS_SOURCE]),
  deps = [
    ':all-jars',
    ':dslv-lib',
    ':presto-lib',
    ':appcompat',
    ':build-config',
    ':res',
  ],
)

android_library(
  name = 'application-lib',
  srcs = [APP_CLASS_SOURCE],
  deps = [
    ':build-config',
    ':jars__buck-android-support',
  ],
)

android_resource(
  name = 'res',
  package = 'de.danoeh.antennapod',
  res = 'res',
  assets = 'assets',
  deps = [
    ':appcompat',
    ':dslv-res',
  ]
)

android_library(
  name = 'dslv-lib',
  srcs = glob(['submodules/dslv/library/src/**/*.java']),
  deps = [
    ':all-jars',
    ':dslv-res',
  ],
)

android_resource(
  name = 'dslv-res',
  package = 'com.mobeta.android.dslv',
  res = 'submodules/dslv/library/res',
  deps = [
  ]
)

android_library(
  name = 'presto-lib',
  srcs = glob(['src/com/aocate/**/*.java']),
  deps = [
    ':presto-aidls',
    ':all-jars',
  ],
)

android_manifest(
  name = 'manifest',
  skeleton = 'AndroidManifest.xml',
  deps = [
    ':main-lib',
  ],
)

keystore(
  name = 'debug_keystore',
  store = 'keystore/debug.keystore',
  properties = 'keystore/debug.keystore.properties',
)

android_binary(
  name = 'antennapod',
  manifest = ':manifest',
  keystore = ':debug_keystore',
  use_split_dex = True,
  exopackage = True,
  primary_dex_patterns = [
    '^de/danoeh/antennapod/AppShell^',
    '^de/danoeh/antennapod/BuildConfig^',
    '^com/facebook/buck/android/support/exopackage/'
  ],
  deps = [
    ':main-lib',
    ':application-lib',
  ],
)


android_prebuilt_aar(
  name = 'appcompat',
  aar = 'libs/appcompat-v7-19.1.0.aar',
)

更新

这是我正在尝试实现的图书馆项目。

enter image description here

这是库项目中的 Buck 文件

prebuilt_jar(
  name = 'android-support-v4',
  binary_jar = 'android-support-v4.jar',
  visibility = [
    'PUBLIC',
  ],
)

prebuilt_jar(
  name = 'bolts',
  binary_jar = 'bolts.jar',
  visibility = [
    'PUBLIC',
  ],
)

这是我尝试过的最佳构建规则。

### com.phonegap.plugins.facebook

android_library(
  name = 'facebook-plugin-java',
  srcs = glob(['com.phonegap.plugins.facebookconnect/app-FacebookLib/src/**/*.java']),
)

android_resource(
  name = 'facebook-plugin-res',
  package = 'com.facebook',
  res = 'com.phonegap.plugins.facebookconnect/app-FacebookLib/res',
)

facebook_plugin_jar_deps = []
for jarfile in glob(['com.phonegap.plugins.facebookconnect/app-FacebookLib/libs/*.jar']):
  name = 'jars__' + re.sub(r'^.*/([^/]+)\.jar$', r'\1', jarfile)
  facebook_plugin_jar_deps.append(':' + name)
  prebuilt_jar(
    name = name,
    binary_jar = jarfile,
  )

android_library(
  name = 'facebook-plugin-jars',
  exported_deps = facebook_plugin_jar_deps,
)

最佳答案

在该 BUCK 文件中,有 prebuilt_jar为 Buck 在 lib/ 下找到的每个 .jar 文件创建规则。我们在 this commit 的该文件夹下添加 support-v4-19.1.0.jar 。这在 //:all-jars 构建目标中被引用为 exported_dep//:dslv-lib 构建目标依赖于 //:all-jars,因此它最终成为 IntelliJ 中显示的依赖项。

关于python - 为什么 Buck AntennaPod 示例中没有添加 android-support-v4.jar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33534642/

相关文章:

java - 如何在 Buck 中使用自定义注释处理器?

android - annotation_processors (buck) 文档

python - 如何将 PySpark 数据框插入到具有雪花模式的数据库中?

python - 在 numpy 中计算 L2 内积?

python - 发射多颗子弹并通过按键改变它们的位置

python - 三重嵌套字典理解?

python - 如何在 Python 中的函数入口、内部和导出处进行日志记录

android - 使用 Buck 未找到类 "android.support.design.widget.CoordinatorLayout"

java - 如何在 Homebrew 公式中下载 Buck 远程文件?