美文网首页
docker ubuntu 搭建 android 交叉编译环境

docker ubuntu 搭建 android 交叉编译环境

作者: book_02 | 来源:发表于2021-08-22 18:09 被阅读0次

1. 参考

https://zhuanlan.zhihu.com/p/210272418

2. 步骤

  1. 安装docker环境
  2. 下载cmake
    https://cmake.org/files/v3.12/cmake-3.12.2-Linux-x86_64.tar.gz 下载cmake-3.12.2-Linux-x86_64.tar.gz
  3. 下载Android NDK
    https://developer.android.google.cn/ndk/downloads/ 下载,这里下载了 android-ndk-r23-linux.zip
  4. 编写dockerfile脚本
    Dockerfile
FROM ubuntu
MAINTAINER someone

ARG DEBIAN_FRONTEND=noninteractive

RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list

RUN apt-get update \
    && apt-get -qq install build-essential \
    && apt-get -qq install git \
    && mkdir -p /home/android-toolchain
    
COPY android-ndk-r23-linux.zip /home/android-toolchain
RUN cd /home/android-toolchain \
    && apt-get -qq install unzip \
    && unzip android-ndk-r23-linux.zip \
    && rm -rf android-ndk-r23-linux.zip
ENV NDK_STANDALONE_TOOLCHAIN="/home/android-toolchain/android-ndk-r23"

COPY cmake-3.12.2-Linux-x86_64.tar.gz /home/android-toolchain
RUN cd /home/android-toolchain \
    && tar -zxvf cmake-3.12.2-Linux-x86_64.tar.gz \
    && rm -rf cmake-3.12.2-Linux-x86_64.tar.gz \
    && mv cmake-3.12.2-Linux-x86_64 cmake-3.12.2 \
    && ln -sf /home/android-toolchain/cmake-3.12.2/bin/* /usr/bin

NDK 和 cmake 也可以在Dockerfile里用wget命令下载,这样还可以减少镜像的大小

  1. 构建image
docker build -t ubuntu_android_test:v1.0 .

3. 测试

用一个 hello world 程序测试交叉编译和运行的效果

建立三个源码文件,目录结构如下:

-test
   -CMakeLists.txt
   -generate.sh
   -main.cpp

3.1 CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(hello_cmake)

add_definitions("-Wall -g")

add_executable(${PROJECT_NAME} main.cpp )

install(TARGETS ${PROJECT_NAME}
  RUNTIME DESTINATION ${PROJECT_SOURCE_DIR})

3.2 generate.sh

#/bin/bash

rm -r build
mkdir build && cd build 

cmake -DCMAKE_TOOLCHAIN_FILE=$NDK_STANDALONE_TOOLCHAIN/build/cmake/android.toolchain.cmake \
    -DANDROID_ABI="arm64-v8a" \
    -DANDROID_NDK=$NDK_STANDALONE_TOOLCHAIN \
    -DANDROID_PLATFORM=android-26 \
    ..

make && make install

cd ..

3.3 main.cpp

#include <stdio.h>

int main()
{
    printf("hello world\n");
    return 0;
}

运行容器,并把源码文件夹映射到容器里

docker run -it -v /home/temp/test:/home/test --name ubuntu_android_test ubuntu_android_test:v1.0 /bin/bash

/home/temp/test为上述三个源码文件的文件夹,可根据自己情况更改,进入容器后编译执行:

cd /home/test
chmod +x ./generate.sh
./generate.sh

如此便完成了hello_cmake的交叉编译,可执行程序 hello_cmake便在目录/home/temp/test

3.4 放到手机上执行

安装adb工具

ubuntu下 : sudo apt install android-tools-adb android-tools-fastboot

push到手机

adb push hello_cmake /data/local/tmp

给hello执行权限

adb shell
cd /data/local/tmp
chmod +x hello_cmake

执行hello

./hello_cmake

就可以看到hello world 输出

4. 放在gitlab上用CI自动编译输出

4.1 把镜像push到私人仓库

假设在 10.168.1.108 主机上开启私人仓库

docker run -d -p 5000:5000 --restart=always --name registry registry

docker push

docker image tag ubuntu_android_test:v1.0 10.168.1.108:5000/ubuntu_android_test:v1.0

docker push 10.168.1.108:5000/ubuntu_android_test:v1.0

4.2 在gitlab上新建工程test

上传那三个源码文件到test工程。
也可以直接在网页上新建那三个文件,把内容复制进去

4.3 编写 .gitlab-ci.yml

image: 10.168.1.108:5000/ubuntu_android_test:v1.0

build:
  stage: build
  script:
    - cd /home
    - mkdir test
    - cp -r ${CI_PROJECT_DIR} test
    - cd test
    - cd test
    - ls -l
    - chmod +x ./generate.sh
    - ./generate.sh
    - cp -r hello_cmake ${CI_PROJECT_DIR} 
  artifacts:
    name:  "$CI_COMMIT_REF_NAME"
    expire_in: 1 week
    paths:
     - hello_cmake

CI编译完成后从编译结果中取出 hello_cmake,同样放在手机执行一遍即可

相关文章

网友评论

      本文标题:docker ubuntu 搭建 android 交叉编译环境

      本文链接:https://www.haomeiwen.com/subject/ovkhiltx.html