在 bazel 构建中使用 appcompat-v7

Using appcompat-v7 in a bazel build

我正在尝试开始使用 Bazel 为 Android 进行编译,但我的应用程序 UI 遇到了一些问题 - 具体来说,如果我尝试使用 UI, Bazel 扼流圈。

主要 activity 看起来像这样:

package org.mamizou.example.test
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
....
public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    }
}

所以根据 android.developer.com,如果我想使用 appcompat-v7,正确的做法就在我的 android_library 块中,包括“//external:android/appcompat_v7” .凉爽的。我的 android_library 块现在看起来像这样:

android_library(
    name="lib",
    deps=[ "//external:android/appcompat_v7", ],
    srcs=[ "src/org/mamizou/example/test/ExampleLib.java", ],
)

好的。然后我 运行 bazel 构建,我得到

ERROR: missing input file '@android_sdk//:extras/android/support/v7/appcompat/libs/android-support-v7-appcompat.jar"

如果我去我的 android-sdk 目录检查它,我注意到有一个像 android-sdk/extras/android/m2repository/com/android/support[=38= 这样的路径]/appcompat-v7 但没有像 android-sdk/extras/android/support

这样的路径

使用 SDK 管理器工具,我设法刷新我的支持存储库并重新安装它,但没有任何变化 - 我的支持文件都在 m2repository 下。它们是 *.aar 文件,而不是 *.jar 文件。我找不到名称类似于 *appcompat.jar

的任何内容

所以,这里出了点问题。看起来我的环境配置有问题,但是你已经看到了 BUILD 的相关块,我的 WORKSPACE 看起来像这样:

android_sdk_repository(
    name="android_sdk",
    path="/home/mamizou/android-sdk",
    api_level=23,
    build_tools_version="23.0.2",
)

至少对我来说看起来格式正确(更重要的是,指向安装 sdk 的真实位置)

  1. 为什么 Bazel 正在寻找 *.jar 支持,在我看来 Google 的 SDK 表明它应该在 m2repository 下寻找 *.aar?
  2. 我需要做哪些更改才能让 Bazel 找到相关的 appcompat-v7 文件?

fwiw,Bazel 构建标签是 0.2.0-jdk7

aar 文件来自 SDK 管理器中 Extras 下的"Android Support Repository"。对于 bazel 使用的罐子,您需要下载 "Android Support Library"。抱歉造成混淆!

自 Android 构建工具 24 以来,"Android Support Library" 已被删除:

Can't find Android Support Repository in SDK Manager