ubuntu上搭建bazel编译环境,构建Android APP

2023-12-09 22:53

本文主要是介绍ubuntu上搭建bazel编译环境,构建Android APP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景是github上下载的工程,说明仅支持bazel编译,折腾了一天Android studio,失败。

不得不尝试单价bazel编译环境,并不复杂,过程记录如下

说明:ubuntu环境是20.04,pve虚拟机安装

1.安装jdk

sudo apt install openjdk-11-jdk

2.下载安装Android Studio

Google网站下载linux上的二进制包,也可以apt安装,前者定制方便些

下载地址:下载 Android Studio 和应用工具 - Android 开发者  |  Android Developers

为了方便描述,加速下载目录是用户根目录,即$HOME

cd ~
tar -xvf android-studio-*.tar.gz

运行:

cd ~/android-studio/bin
./studio.sh

随后的界面与Windows上没什么区别,我是ssh登录的,居然也可以图形交互,运行过程会下载安装android sdk,这个是最主要的,google不让单独下载android sdk了,没办法。

记录下,默认的sdk目录~/Android/Sdk/

3.编译bazel

出于某些考虑,没有安装最新版本,挑了个中间点的版本。例如4.2.2

下载地址:https://github.com/bazelbuild/bazel/releases/download/4.2.2/bazel-4.2.2-dist.zip

解压编译:

unzip bazel-4.2.2-dist.zip
sudo ./compile.sh

编译过程出现了python报错,做个软链接解决

ERROR: /mnt/sdb/code/05_AS/src/BUILD:319:9: Executing genrule //src:embedded_tools_nojdk failed: (Exit 127): bash failed: error executing command(cd /tmp/bazel_SpFJt8tb/out/execroot/io_bazel && \exec env - \PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin \/bin/bash -c 'source external/bazel_tools/tools/genrule/genrule-setup.sh; bazel-out/host/bin/src/create_embedded_tools "bazel-out/k8-opt/bin/src/embedded_tools_nojdk.zip" bazel-out/k8-opt/bin/src/embedded_tools_nojdk.params')
Execution platform: //:default_host_platform
/usr/bin/env: 'python': No such file or directory
Target //src:bazel_nojdk failed to build
INFO: Elapsed time: 398.790s, Critical Path: 53.56s
INFO: 1055 processes: 31 internal, 1024 local.
FAILED: Build did NOT complete successfully

原因是/usr/bin目录下找不到python,加软连接

ln -s /usr/bin/python3.8 /usr/bin/python

编译ok后,把out目录的编译结果拷贝到/usr/bin

cp ./output/bazel /usr/bin
chmod 777 /usr/bin/bazel

4. 编译Android 工程

在下载好的Android工程下执行

bazel build testdpc

报错:

obana@pve-ubt20:/mnt/sdb/code/03_github/android-testdpc$ bazel build testdpc
Extracting Bazel installation...
Starting local Bazel server and connecting to it...
ERROR: While resolving toolchains for target //:testdpc: no matching toolchains found for types @bazel_tools//tools/android:sdk_toolchain_type
ERROR: Analysis of target '//:testdpc' failed; build aborted: no matching toolchains found for types @bazel_tools//tools/android:sdk_toolchain_type
INFO: Elapsed time: 20.400s
INFO: 0 processes.
FAILED: Build did NOT complete successfully (12 packages loaded, 19 targets configured)

原因是没有加入android sdk环境变量

export ANDROID_HOME=$HOME/Android/Sdk/

后续编译方便,可以把这行加入~/.bashrc

接着下一个报错:

obana@pve-ubt20:/mnt/sdb/code/03_github/android-testdpc$ bazel build testdpc
INFO: Analyzed target //:testdpc (30 packages loaded, 1164 targets configured).
INFO: Found 1 target...
ERROR: /home/obana/.cache/bazel/_bazel_obana/f87dd64c2bc0bae87f9a70b466547b28/external/androidsdk/BUILD.bazel:13:25: Extracting interface @androidsdk//:dx_jar_import failed: missing input file 'external/androidsdk/build-tools/34.0.0/lib/dx.jar', owner: '@androidsdk//:build-tools/34.0.0/lib/dx.jar'
Target //:testdpc failed to build
Use --verbose_failures to see the command lines of failed build steps.
ERROR: /home/obana/.cache/bazel/_bazel_obana/f87dd64c2bc0bae87f9a70b466547b28/external/androidsdk/BUILD.bazel:13:25 Extracting interface @androidsdk//:dx_jar_import failed: 1 input file(s) do not exist
INFO: Elapsed time: 430.708s, Critical Path: 1.62s
INFO: 29 processes: 27 internal, 2 linux-sandbox.
FAILED: Build did NOT complete successfully

这个错误,很多同学应该熟悉,解决方案很简单,打开Android Studio,下载32版本的build tool,然后切换到32版本。

修改项目根目录下的WORKSPACE文件,

android_sdk_repository(name = "androidsdk",api_level = 34,build_tools_version = "32.0.0",
)

也有一种改法,就是仿照windows上处理。

cp ~/Android/Sdk/build-tools/34.0.0/d8 ~/Android/Sdk/build-tools/34.0.0/dx
cp ~/Android/Sdk/build-tools/34.0.0/lib/d8.jar ~/Android/Sdk/build-tools/34.0.0/lib/dx.jar

我也在stackoverflow上找到如下方法,不知道改哪,放弃;上述方法更通用些

# Enable d8 merger
build --define=android_dexmerger_tool=d8_dexmerger# Flags for the d8 dexer
build --define=android_incremental_dexing_tool=d8_dexbuilder
build --define=android_standalone_dexing_tool=d8_compat_dx
build --nouse_workers_with_dexbuilder

5.运行APP

编译成功后,可以用下命令运行APP,可以连物理机,也可以avd运行

bazel mobile-install //android:android

教程结束,enjoy!

附:官方文档地址Build Tutorial - Android - Bazel 0.20.0

这篇关于ubuntu上搭建bazel编译环境,构建Android APP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/475352

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Android中Dialog的使用详解

《Android中Dialog的使用详解》Dialog(对话框)是Android中常用的UI组件,用于临时显示重要信息或获取用户输入,本文给大家介绍Android中Dialog的使用,感兴趣的朋友一起... 目录android中Dialog的使用详解1. 基本Dialog类型1.1 AlertDialog(

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

使用Java实现通用树形结构构建工具类

《使用Java实现通用树形结构构建工具类》这篇文章主要为大家详细介绍了如何使用Java实现通用树形结构构建工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录完整代码一、设计思想与核心功能二、核心实现原理1. 数据结构准备阶段2. 循环依赖检测算法3. 树形结构构建4. 搜索子

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

使用Python和python-pptx构建Markdown到PowerPoint转换器

《使用Python和python-pptx构建Markdown到PowerPoint转换器》在这篇博客中,我们将深入分析一个使用Python开发的应用程序,该程序可以将Markdown文件转换为Pow... 目录引言应用概述代码结构与分析1. 类定义与初始化2. 事件处理3. Markdown 处理4. 转