如果想直接下载Docker镜像包或者dockermakefile,直接跳转到Docker镜像下载即可
注意: 我提供的Docker镜像包是将App Inventor和它的构建服务器分开的,没有做更多处理

App Inventor介绍

App Inventor(简称AI)由谷歌实验室开发,后移交麻省理工学院,是一款可视化编程环境,采用搭积木的方式快速建立应用程序,并且可以结合AI伴侣,极其便利的在手机上进行测试和应用。

官网地址: https://appinventor.mit.edu/
GitHub地址: https://github.com/mit-cml/appinventor-sources

零、搭建注意事项

1、搭建中涉及到访问Google App Engine,需要科学上网或自行寻找相关镜像。
2、本人的Docker配置基于1Panel,请自行搜索如何创建一个完整的Docker配置。

一、使用Docker编译App Inventor

1、基础准备

下载OpenJDK11的Docker镜像

本次Docker直接基于openJDK11版本(App Inventor要求版本),因本人服务器上已经安装了一个版本的jdk,且因为是首次安装App Inventor,故使用Docker安装App Inventor,即防止对环境造成污染,也有学习Docker的想法。

# 拉取命令如下: pull是拉取的意思,openjdk:11 是指代openjdk 11版本
sudo docker pull openjdk:11

注意: 如果下载速度太慢,可以网上找一下Docker换源。

因本人已安装,只显示如下信息,如果想要确定是否安装成功,可以试试两次输入,确定是否安装成功。
安装完成

下载App Inventor Git(也可以在容器中下载)

git下载就没什么多说的了,下面是命令

git clone https://github.com/mit-cml/appinventor-sources.git

下载好后,放在一个指定位置,只要自己记得位置就行。

注意: 因本人需要创建dockerfile,使用容器下载的方法不是很推荐。

2、运行镜像

运行镜像我是直接使用1Panel进行创建,如果是在本地自行创建的话,可以搜索一下创建指令的使用。
我的1Panel对openJDK11的配置如下:
1Panel配置界面1
1Panel配置界面2
如果使用命令构建,可以参考如下命令(由DeepSeek生成):

# 1panel-network网络类似bridge
sudo docker run -it \
  --name AppInventor \
  --network 1panel-network \
  -p 6858:6858 \
  -p 9990:9990 \
  -v /opt/1panel/apps/AppInventor/Source/:/root/Source/ \
  openjdk:11 \
  /bin/bash

3、连接到docker服务器

要连接docker服务器,需要先知道docker的ID,使用如下命令获取dockerID

sudo docker ps |  grep openjdk:11

查找ID
此处bd5cb8217f82就是我们需要的Docker ID。使用下列命令连接到docker终端

# 将 <Docker ID> 替换为刚才获取的ID
# 示例: sudo docker exec -it bd5cb8217f82 /bin/bash
sudo docker exec -it <Docker ID> /bin/bash

连接后,打开我们挂载的文件位置,以我的/root/Source为例,直接输入cd /root/Source即可。此时输入ls查看命令查看是否正常。
运行命令

如果你决定在Docker中使用git下载,可以先安装git后再使用git clone下载。

4、在docker中安装必要的环境

虚拟机网络配置

注意: 此种玩法比较剑走偏锋,本人因服务器未添加科学上网方式,且不想安装故使用此方法。

App Inventor需要有GAE(Google App Engine)支持,需要使用GAE支持。因本人的服务器未安装其他东西,且服务器在内网中,本人使用了通过我自己的电脑提供连接外网环境。使用过程如下:

注意: 使用此功能需要确定你的Clash一类的软件支持相关功能端口,如果不支持可能不适用这种方法。
端口转发功能教程来源于: iptables做TCP/UDP端口转发【转】 - paul_hch - 博客园

实体机(非Docker环境) 中输入以下命令(此命令用于端口转发):

sudo sysctl -w net.ipv4.ip_forward=1 # 启用IP转发
# 此处的37897为我自己指定的任意端口,为了避免占用,使用了此端口,
# 192.168.8.4:7897 是我电脑的IP地址,同时7897端口作为终端代理,此处根基自己的实际情况填写
sudo iptables -t nat -A PREROUTING -p tcp --dport 37897 -j DNAT --to-destination 192.168.8.4:7897
# 将路由的IP地址转换为服务器地址,172.19.0.22 是我Docker的地址,直接使用1Panel查看的
sudo iptables -t nat -A POSTROUTING -p tcp -d 172.19.0.22 --dport 7897 -j SNAT --to-source 192.168.8.3

Docker虚拟机中输入以下命令:

# 此处37897为之前指定的端口地址,172.19.0.1是虚拟网段中实体主机的IP地址
export http_proxy=http://172.19.0.1:37897
export https_proxy=http://172.19.0.1:37897

通过 apt 下载并管理gcloud

Google对此的官方教程: 安装 gcloud CLI | Google Cloud SDK Documentation

  1. 首先更新apt
apt update && apt uppgrade -y
  1. 安装必要的软件包
# 注意: 此处ant为后继编译项目所需
apt install apt-transport-https ca-certificates gnupg curl ant -y
  1. 导入Google Cloud 公钥(此命令在官网教程中添加了sudo,在我们这里就没有必要了)。
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
  1. 添加 gcloud CLI 发行版 URI 作为软件包源
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
  1. 更新并安装 gcloud CLI
apt update && apt install -y google-cloud-cli google-cloud-cli-app-engine-java
  1. (此过程可以跳过) 运行 gcloud init 以开始执行初始化操作
gcloud init
gcloud init

更新必要的依赖包

此处基于App Inventor官网教程: appinventor-sources/README.md at master · mit-cml/appinventor-sources · GitHub 编译部分

  1. 更新依赖项(请确定已打开git下来的文件夹)
git submodule update --init
  1. 编译项目
cd appinventor/
ant MakeAuthKey
ant

注意,执行ant过程中,需要确保返回BUILD SUCCESSFUL,类似下图这种
成功截图

  1. 编译BuildServer,效果和前面类似
cd buildserver/
ant
  1. 测试,使用命令运行
# 运行主服务器
cd /root/Source/appinventor/
/usr/lib/google-cloud-sdk/bin/java_dev_appserver.sh --port=8080 --address=0.0.0.0 appengine/build/war/

# 运行编译服务器
cd /root/Source/appinventor/buildserver/
ant RunLocalBuildServer

二、使用

根据服务器的设置,打开网址确定功能是否可以用,我的网址如下(具体情况自行调整)

http://192.168.8.3:6858/

如果成功了,用浏览器打开网址会显示下面的内容
欢迎界面
选择Click Here to use your Google Account to login,选择同意
选择同意
登陆后显示如下(切换了语言的,后继使用按着教程来即可)
正式进入
如果功能正常,也能进行编译

注意:如果直接使用我的Docker镜像,无法直接进行编译

编译

三、dockerfile创建镜像以及镜像下载(本人自己编译学习,如果有支付相关的请勿使用)

注意: 后继内容在实体机上执行,而非Dokcer容器中.
注意: 因构建服务器和主服务器分开,无法在主服务器的网页编译APP

1、主服务器构建

注意: 后继内容在实体机上执行,而非Dokcer容器中.
注意: 因构建服务器和主服务器分开,无法在主服务器的网页编译APP

  1. 创建一个文件夹,用于生成主服务,将docker编译的文件复制到工程下
mkdir ~/AppInventor
cd ~/AppInventor
sudo cp -r /opt/1panel/apps/AppInventor/Source/appinventor/appengine/build/war/ ./app
  1. 根据前面给的命令,dockerfile我给的内容如下(主服务器)(使用命令vim Dockerfile
FROM openjdk:11

ARG http_proxy=http://172.19.0.1:37897 https_proxy=http://172.19.0.1:37897

EXPOSE 6858

COPY ./app/ /AppInventor/

WORKDIR /AppInventor/

RUN apt-get update -y \
    && apt-get install apt-transport-https ca-certificates gnupg curl ant -y \
    && echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list \
    && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg \
    && apt-get update -y \
    && apt-get install google-cloud-cli google-cloud-cli-app-engine-java -y

ENTRYPOINT ["/usr/lib/google-cloud-sdk/bin/java_dev_appserver.sh", "--port=6858", "--address=0.0.0.0" ,"/AppInventor/"]
  1. 构建Docker并保存
sudo docker build -t app_inventor:v00.01.00 .
sudo docker save -o AppInventor.tar app_inventor:v00.01.00
# 找到标签ID
sudo docker images | grep app_inventor
# 执行删除
sudo docker rmi <Docker ID>

2、构建服务器创建

注意: 后继内容在实体机上执行,而非Dokcer容器中.

注意: 因构建服务器和主服务器分开,无法在主服务器的网页编译APP

  1. 创建一个文件夹,将builderserver移动进来
mkdir ~/AppInventorServer
cd ~/AppInventorServer
sudo cp -r /opt/1panel/apps/AppInventor/Source/appinventor/ ./app
  1. 编译服务器dockerfile如下(使用命令vim Dockerfile
FROM openjdk:11

ARG http_proxy=http://172.19.0.1:37897 https_proxy=http://172.19.0.1:37897

EXPOSE 9990

COPY ./app/ /AppInventorServer/

WORKDIR /AppInventorServer/buildserver

RUN apt update -y \
    && apt-get install apt-transport-https ca-certificates gnupg curl ant -y \
    && echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list \
    && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg \
    && apt-get update -y \
    && apt-get install google-cloud-cli google-cloud-cli-app-engine-java -y

ENTRYPOINT ["ant", "RunLocalBuildServer"]
  1. 构建Docker并保存
sudo docker build -t app_inventor_server:v00.01.00 .
sudo docker save -o AppInventorServer.tar app_inventor_server:v00.01.00
# (可选)找到标签ID
sudo docker images | grep app_inventor_server
# (可选)执行删除
sudo docker rmi <Docker ID>

3、Docker下载链接

百度网盘地址:

注意: 后继内容在实体机上执行,而非Dokcer容器中.
注意: 因构建服务器和主服务器分开,无法在主服务器的网页编译APP
通过网盘分享的文件:App Inventor
链接: https://pan.baidu.com/s/192gd7tQmYpaHjEYsQdQNmA?pwd=52um 提取码: 52um

加载镜像方式(不再过多赘述)

sudo docker load -i app_inventor_server:v00.01.00.tar
sudo docker load -i app_inventor:v00.01.00.tar
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐