From 9326af14a488b642a9a03abc1457b0bb623b8e09 Mon Sep 17 00:00:00 2001 From: zxk114 Date: Tue, 29 Nov 2022 10:39:21 +0800 Subject: [PATCH] compile and test for android ndk --- .github/workflows/publish-android-images.yml | 89 ++++++++ build_for_android.sh | 221 +++++++++++++++++++ docker/Dockerfile.android.develop.ubuntu | 89 ++++++++ docker/prepare_for_dev.sh | 9 + docker/unit.sh | 8 + setup_android_ndk.sh | 81 +++++++ 6 files changed, 497 insertions(+) create mode 100644 .github/workflows/publish-android-images.yml create mode 100644 build_for_android.sh create mode 100644 docker/Dockerfile.android.develop.ubuntu create mode 100644 docker/unit.sh create mode 100644 setup_android_ndk.sh diff --git a/.github/workflows/publish-android-images.yml b/.github/workflows/publish-android-images.yml new file mode 100644 index 000000000..1485205e0 --- /dev/null +++ b/.github/workflows/publish-android-images.yml @@ -0,0 +1,89 @@ +name: Publish android images +on: + workflow_dispatch: + inputs: + build_image: + description: 'select to build image' + required: true + type: boolean + +jobs: + build_android_develop_image: + runs-on: ubuntu-22.04 + if: ${{ inputs.build_image }} + steps: + - name: Checkout + uses: actions/checkout@main + - name: Login to DockerHub + uses: docker/login-action@master + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Download for dev package + run: | + sed -i '3s/OS_NAME=.*/OS_NAME=android/' docker/prepare_for_dev.sh + sed -i '/ls -lh release/d' docker/prepare_for_dev.sh + ./docker/prepare_for_dev.sh + shell: bash + - name: Build and Push + uses: docker/build-push-action@master + with: + push: true + context: . + file: docker/Dockerfile.android.develop.ubuntu + tags: | + modelbox/modelbox-develop-android-ubuntu:latest + + build_android_unittest: + runs-on: ubuntu-22.04 + if: ${{ always() }} + needs: build_android_develop_image + steps: + - name: Checkout + uses: actions/checkout@main + - name: Compile + run: | + containerid=$(docker run -dit --rm --privileged \ + -v $(pwd):/data/devel/modelbox \ + modelbox/modelbox-develop-android-ubuntu:latest /bin/bash | cut -c1-5) + docker exec ${containerid} /bin/bash -c 'bash -x /data/devel/modelbox/build_for_android.sh x64' + shell: bash + - name: BuildUnit + run: | + containerid=$(docker run -dit --rm --privileged \ + -v $(pwd):/data/devel/modelbox \ + modelbox/modelbox-develop-android-ubuntu:latest /bin/bash | cut -c1-5) + docker exec ${containerid} /bin/bash -c 'bash -x /data/devel/modelbox/build_for_android.sh buildtest' + shell: bash + - name: UnitTest + run: | + containerid=$(docker run -dit --rm --privileged \ + -v $(pwd):/data/devel/modelbox \ + modelbox/modelbox-develop-android-ubuntu:latest /bin/bash | cut -c1-5) + docker exec ${containerid} /bin/bash -c 'bash -x /data/devel/modelbox/build_for_android.sh unittest' + shell: bash + - name: Upload Artifact + uses: actions/upload-artifact@main + with: + name: modelbox_android_unittest + path: unittest.tar.gz + + package_android_ubuntu: + runs-on: ubuntu-22.04 + if: ${{ always() }} + needs: build_android_develop_image + steps: + - name: Checkout + uses: actions/checkout@main + - name: Package + run: | + containerid=$(docker run -dit --rm --privileged \ + -v $(pwd):/data/devel/modelbox \ + modelbox/modelbox-develop-android-ubuntu:latest /bin/bash|cut -c1-5) + docker exec ${containerid} /bin/bash -c 'bash -x /data/devel/modelbox/build_for_android.sh' + shell: bash + - name: Upload Artifact + uses: actions/upload-artifact@main + with: + name: modelbox_aar + path: aar_pkg/modelbox.aar diff --git a/build_for_android.sh b/build_for_android.sh new file mode 100644 index 000000000..d8ce260ea --- /dev/null +++ b/build_for_android.sh @@ -0,0 +1,221 @@ +#!/bin/bash +CODE_DIR=$(cd $(dirname "${BASH_SOURCE[0]}");pwd) +export NDK_ROOT=/data/ndk/android-ndk-r25b +export USER_ROOT=/data/devel/thirdparty/deb +export LIBRARY_RUNPATH=/data/user/0/com.mbox_ai/files/lib +export MINDSPORE_LITE_PATH=/data/mindspore/mindspore-lite-1.9.0 +export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 +export JRE_HOME=${JAVA_HOME}/jre +export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib +export PATH=${JAVA_HOME}/bin:$PATH + +compile() { + rm -f /data/data /data/mindspore/mindspore-lite-1.9.0 + if [ "$1" == "a64" ];then + export BUILD_DIR=build_a64 + export ANDROID_ABI=arm64-v8a + export ARCH=aarch64 + ln -s mindspore-lite-1.9.0-android-aarch64 /data/mindspore/mindspore-lite-1.9.0 + elif [ "$1" == "x64" ];then + export BUILD_DIR=build_x64 + export ANDROID_ABI=x86_64 + export ARCH=x86_64 + ln -s mindspore-lite-1.9.0-linux-x64 /data/mindspore/mindspore-lite-1.9.0 + fi + ln -s /data/devel/thirdparty/deb/${ANDROID_ABI}/data/data /data/data + + ls -lh /data/data + ls -lh /data/mindspore/mindspore-lite-1.9.0 + + if [ -d ${CODE_DIR}/${BUILD_DIR} ];then + rm -rf ${CODE_DIR}/${BUILD_DIR}/* + else + mkdir -p ${CODE_DIR}/${BUILD_DIR} + fi + + cd ${CODE_DIR}/${BUILD_DIR} + cmake .. \ + -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_ANDROID_API=28 \ + -DLOCAL_PACKAGE_PATH=/data/devel/thirdparty/src \ + -DCLANG_TIDY=OFF \ + -DCLANG_TIDY_AS_ERROR=OFF \ + -DWITH_MINDSPORE=on \ + -DWITH_JAVA=ON \ + -DTEST_WORKING_DIR=/data/user/test \ + -DPYTHON_VERSION_ANDROID=3.10 \ + -DANDROID_ABI=${ANDROID_ABI} \ + -DANDROID_PLATFORM=android-28 \ + -DANDROID_NDK=${NDK_ROOT} \ + -DANDROID_TOOLCHAIN=clang \ + -DANDROID_STL=c++_shared \ + -DANDROID_ALLOW_UNDEFINED_SYMBOLS=TRUE \ + -DBUILD_SHARED_LIBS=1 \ + -Wno-deprecated \ + -Wno-dev + + if [ $? -ne 0 ];then + echo "cmake failed" + cat CMakeFiles/CMakeError.log + exit 1 + fi + + make package -j8 +} + +prepare(){ + cd ${CODE_DIR}/${BUILD_DIR} + mkdir -p ${ANDROID_ABI}/jni/${ANDROID_ABI} + mkdir -p ${ANDROID_ABI}/{libmodelbox-kernel,libmodelbox-drivers,assets} + + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/java/packages/lib/libmodelbox-jni.so ${ANDROID_ABI}/jni/${ANDROID_ABI}/ + + ls -lh cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/ + + cp /data/devel/thirdparty/deb/${ANDROID_ABI}/usr/lib/{libssl.so.1.1,libcrypto.so.1.1} ${ANDROID_ABI}/libmodelbox-kernel/ + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/{libmodelbox.so,libsecurec.so} ${ANDROID_ABI}/libmodelbox-kernel/ + cp /data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/${ARCH}-linux-android/libc++_shared.so ${ANDROID_ABI}/libmodelbox-kernel/ + + cp /data/mindspore/mindspore-lite-1.9.0/runtime/lib/libmindspore-lite.so ${ANDROID_ABI}/libmodelbox-drivers/ + cp /data/devel/thirdparty/deb/${ANDROID_ABI}/usr/lib/{libpython3.10.so.1.0,libcgraph.so,libcdt.so,libz.so} ${ANDROID_ABI}/libmodelbox-drivers/ + cp /data/devel/thirdparty/deb/${ANDROID_ABI}/usr/lib/{libandroid-support.so,libjpeg.so,liblzma.so,libopenblas.so,libopenjp2.so,libpng16.so,libprotobuf.so,libtiff.so,libwebp.so,libzstd.so,libopencv*.so} ${ANDROID_ABI}/libmodelbox-drivers/ + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/{libmbox-engine-mindspore-lite.so,libmodelbox-device-cpu.so,libmodelbox-graphconf-graphviz.so,libmodelbox-unit-cpu-mindspore-lite-inference.so,libmodelbox-unit-cpu-python.so,libmodelbox-virtualdriver-inference.so,libmodelbox-virtualdriver-python.so} ${ANDROID_ABI}/libmodelbox-drivers/ + + cd ${ANDROID_ABI}/libmodelbox-drivers + find . -name "lib*" | xargs patchelf --set-rpath /data/user/0/com.mbox_ai/files/lib + zip -r ../assets/libmodelbox-drivers_${ANDROID_ABI}.zip ./ + md5sum ../assets/libmodelbox-drivers_${ANDROID_ABI}.zip > ../assets/libmodelbox-drivers_${ANDROID_ABI}.zip.md5 + + cd ../libmodelbox-kernel + patchelf --set-rpath /data/user/0/com.mbox_ai/files/lib libssl.so.1.1 + zip -r ../assets/libmodelbox-kernel_${ANDROID_ABI}.zip ./ + md5sum ../assets/libmodelbox-kernel_${ANDROID_ABI}.zip > ../assets/libmodelbox-kernel_${ANDROID_ABI}.zip.md5 + + cd .. + cp -r /data/devel/thirdparty/deb/${ANDROID_ABI}/usr/lib/python3.10 . + cp -r python3.10/site-packages/numpy-1.23.3-py3.10-linux-${ARCH}.egg/numpy python3.10/site-packages/ + rm -rf python3.10/site-packages/numpy-1.23.3-py3.10-linux-${ARCH}.egg + cp -r /data/devel/thirdparty/deb/${ANDROID_ABI}/data/data/com.termux/files/usr/lib/python3.10/site-packages/cv2 python3.10/site-packages/ + + cd python3.10 + find . -name "*.so" | xargs patchelf --set-rpath /data/user/0/com.mbox_ai/files/lib + + cd .. + zip -r assets/python3.10_${ANDROID_ABI}.zip python3.10 + md5sum assets/python3.10_${ANDROID_ABI}.zip > assets/python3.10_${ANDROID_ABI}.zip.md5 + + rm -rf libmodelbox-drivers libmodelbox-kernel python3.10 + + ls -lh ${CODE_DIR}/${BUILD_DIR}/${ANDROID_ABI}/* +} + +package(){ + mkdir ${CODE_DIR}/aar_pkg + cat << 'EOF'>${CODE_DIR}/aar_pkg/AndroidManifest.xml + + + + + + +EOF + + cp ${CODE_DIR}/build_a64/src/java/modelbox-1.0.0.jar ${CODE_DIR}/aar_pkg/classes.jar + cp -af ${CODE_DIR}/build_x64/x86_64/* ${CODE_DIR}/aar_pkg/ + cp -af ${CODE_DIR}/build_a64/arm64-v8a/* ${CODE_DIR}/aar_pkg/ + chown -R root.root ${CODE_DIR}/aar_pkg + find ${CODE_DIR}/aar_pkg -type d|xargs chmod -R 755 + find ${CODE_DIR}/aar_pkg -type f|xargs chmod -R 644 + cd ${CODE_DIR}/aar_pkg + jar -cvf modelbox.aar -C ${CODE_DIR}/aar_pkg . +} + +buildtest(){ + cd ${CODE_DIR}/build_x64 + make unit -j8 + mkdir -p /data/user/test/{dep,drivers} + cp lib/{libgmock.so,libgtest.so} /data/user/test/dep/ + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/{libmodelbox.so,libsecurec.so,libmanager-client.so} /data/user/test/dep/ + cp cpack/_CPack_Packages/Android/TGZ/modelbox-1.0.0-Android/usr/local/lib/{libmodelbox-unit-cpu-python.so,libmodelbox-device-cpu.so,libmodelbox-virtualdriver-python.so,libmodelbox-virtualdriver-inference.so,libmodelbox-graphconf-graphviz.so} /data/user/test/drivers/ + cp test/mock/minimodelbox/libflowmock-lib.so /data/user/test/dep/ + cp test/mock/drivers/libmock-driver-ctrl-lib.so /data/user/test/dep/ + cp test/mock/drivers/device_mockdevice/libmodelbox-device-mockdevice.so /data/user/test/dep/ + cp test/mock/drivers/flowunit_mockflowunit/libmodelbox-unit-mockdevice-mockflowunit.so /data/user/test/dep/ + cp test/mock/drivers/graph_conf_mockgraphconf/libmodelbox-graphconf-mockgraphconf.so /data/user/test/dep/ + cp test/unit/unit /data/user/test/bin/ + cp /data/devel/thirdparty/deb/x86_64/usr/lib/{libssl.so.1.1,libcrypto.so.1.1,libcgraph.so,libcdt.so,libpython3.10.so.1.0} /data/user/test/dep/ + cp /data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/lib/x86_64-linux-android/libc++_shared.so /data/user/test/dep/ + cp -r ../test/assets /data/user/test/ + cp -r /data/devel/thirdparty/deb/x86_64/usr/lib/python3.10 /data/user/test/ + cp ../docker/unit.sh /data/user/test/bin/ + chmod +x /data/user/test/bin/* + cd /data/user/ + tar zcf unittest.tar.gz test + cp unittest.tar.gz /data/devel/modelbox +} + +unittest(){ + apt update + apt install -y linux-modules-extra-$(uname -r) waydroid dbus dbus-x11 #weston + + if [ $(ls /usr/share/waydroid-extra/images|grep img|wc -l) -eq 2 ];then + waydroid init -f -i /usr/share/waydroid-extra/images + else + waydroid init + fi + + mkdir -p /tmp/runtime/wayland-0 + chmod 700 /tmp/runtime + /etc/init.d/dbus start + eval $(dbus-launch --sh-syntax) + export $(dbus-launch) + #/usr/lib/waydroid/data/scripts/waydroid-net.sh start + waydroid container start & + waydroid session start & + + mkdir -p ~/.local/share/waydroid/data/user + ls -lh /data/devel/modelbox/unittest.tar.gz + tar zxf /data/devel/modelbox/unittest.tar.gz -C ~/.local/share/waydroid/data/user/ + ls -lh ~/.local/share/waydroid/data/user/test + waydroid shell ./data/user/test/bin/unit.sh | tee unittest.log + + times=0 + while [ $(cat unittest.log|grep -c AesEncryptPass) -lt 1 ];do + cat /var/lib/waydroid/waydroid.log + if [ $(cat /var/lib/waydroid/waydroid.log|grep -c "waiting for session to load") -lt 1 ];then + waydroid session start & + fi + waydroid container restart & + waydroid shell ./data/user/test/bin/unit.sh | tee unittest.log + times=$[${times}+1] + if [ ${times} -gt 3 ]; then + echo "waydroid container start failed,pls check" + exit 1 + fi + done +} + +main(){ + if [ "$1" == "x64" ];then + compile x64 + elif [ "$1" == "a64" ];then + compile a64 + elif [ "$1" == "buildtest" ];then + buildtest + elif [ "$1" == "unittest" ];then + unittest + else + for arch in x64 a64;do + compile $arch + prepare + done + package + fi +} + +main $@ diff --git a/docker/Dockerfile.android.develop.ubuntu b/docker/Dockerfile.android.develop.ubuntu new file mode 100644 index 000000000..b48b1d806 --- /dev/null +++ b/docker/Dockerfile.android.develop.ubuntu @@ -0,0 +1,89 @@ +FROM ubuntu:22.04 +COPY android-ndk-r25b-linux.zip /root/ +RUN apt update && \ + apt install -y unzip + +RUN mkdir -p /data/ndk && \ + unzip /root/android-ndk-r25b-linux.zip -d /data/ndk/ >/dev/null && \ + ls /data/ndk/android-ndk-r25b + + +FROM ubuntu:22.04 + +ADD cpprestsdk.tar.gz /data/ +ADD deb_files.tar.gz src.tar.gz /data/devel/thirdparty/ +ADD mindspore-lite-*.tar.gz /data/mindspore/ +COPY --from=0 /data/ndk /data/ndk + +ENV DEBIAN_FRONTEND=noninteractive + +WORKDIR /root + +RUN apt update && \ + apt upgrade -y && \ + apt install -y --no-install-recommends \ + vim curl zip unzip git maven make strace iproute2 \ + pkg-config openjdk-8-jdk ca-certificates patchelf \ + python3-pip ubuntu-desktop clang-tidy-14 cmake && \ + ln -sf clang-tidy-14 /usr/bin/clang-tidy && \ + ln -sf run-clang-tidy-14 /usr/bin/run-clang-tidy && \ + rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /root/.pip && \ + echo "[global]" > /root/.pip/pip.conf && \ + echo "index-url = https://pypi.python.org/simple" >>/root/.pip/pip.conf && \ + echo "trusted-host = pypi.python.org" >>/root/.pip/pip.conf && \ + echo "timeout = 120" >>/root/.pip/pip.conf && \ + python3 -m pip install --upgrade pip && \ + python3 -m pip install --no-cache-dir setuptools pyclip + +RUN ln -sf data/data/com.termux/files/usr /data/devel/thirdparty/deb/x86_64/usr && \ + ln -sf data/data/com.termux/files/usr /data/devel/thirdparty/deb/arm64-v8a/usr && \ + ln -sf opencv4/opencv2 /data/devel/thirdparty/deb/x86_64/usr/include/opencv2 && \ + ln -sf opencv4/opencv2 /data/devel/thirdparty/deb/arm64-v8a/usr/include/opencv2 && \ + cp -af /data/cpprestsdk/arm64-v8a/lib/libcpprest.so /data/devel/thirdparty/deb/arm64-v8a/usr/lib/ && \ + cp -af /data/cpprestsdk/x86_64/lib/libcpprest.so /data/devel/thirdparty/deb/x86_64/usr/lib/ && \ + ln -sf /data/cpprestsdk/include/cpprest /data/devel/thirdparty/deb/arm64-v8a/usr/include/cpprest && \ + ln -sf /data/cpprestsdk/include/cpprest /data/devel/thirdparty/deb/x86_64/usr/include/cpprest && \ + ln -sf /data/cpprestsdk/include/pplx /data/devel/thirdparty/deb/arm64-v8a/usr/include/pplx && \ + ln -sf /data/cpprestsdk/include/pplx /data/devel/thirdparty/deb/x86_64/usr/include/pplx && \ + ln -sf devel/thirdparty/deb/x86_64/data/data /data/data + +RUN mkdir -p /data/devel/stub && \ + cd /data/devel/stub && \ + touch test.c && \ + /data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang -fPIC -shared -Wl,--build-id -Wl,-soname,libpthread.so test.c -o libpthread.so.a64 && \ + /data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang -fPIC -shared -Wl,--build-id -Wl,-soname,librt.so test.c -o librt.so.a64 && \ + /data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android28-clang -fPIC -shared -Wl,--build-id -Wl,-soname,libpthread.so test.c -o libpthread.so.x64 && \ + /data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android28-clang -fPIC -shared -Wl,--build-id -Wl,-soname,librt.so test.c -o librt.so.x64 && \ + cp libpthread.so.a64 /data/devel/thirdparty/deb/arm64-v8a/usr/lib/libpthread.so && \ + cp librt.so.a64 /data/devel/thirdparty/deb/arm64-v8a/usr/lib/librt.so && \ + cp libpthread.so.x64 /data/devel/thirdparty/deb/x86_64/usr/lib/libpthread.so && \ + cp librt.so.x64 /data/devel/thirdparty/deb/x86_64/usr/lib/librt.so + +RUN curl --proto '=https' --tlsv1.2 -Sf https://repo.waydro.id/waydroid.gpg --output /usr/share/keyrings/waydroid.gpg && \ + echo "deb [signed-by=/usr/share/keyrings/waydroid.gpg] https://repo.waydro.id/ jammy main" | tee /etc/apt/sources.list.d/waydroid.list && \ + apt update && \ + apt install -y waydroid=1.3.3 && \ + rm -rf /var/lib/apt/lists/* + +RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; \ + do [ $i = systemd-tmpfiles-setup.service ] || rm -f $i; done); \ + rm -f /lib/systemd/system/multi-user.target.wants/*; \ + rm -f /etc/systemd/system/*.wants/*; \ + rm -f /lib/systemd/system/local-fs.target.wants/*; \ + rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ + rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ + echo 'export TMOUT=0' >> /etc/bash.bashrc && \ + echo 'export HISTSIZE=1000' >> /etc/bash.bashrc && \ + echo 'export $(dbus-launch)' >> /etc/bash.bashrc && \ + echo 'export RUNLEVEL=3' >> /etc/bash.bashrc && \ + echo 'export PS1="\[\e[35;1m\][\u@\h \W]$ \[\e[0m\]"' >> ~/.bashrc + +ENV NDK_ROOT=/data/ndk/android-ndk-r25b +ENV USER_ROOT=/data/devel/thirdparty/deb +ENV LIBRARY_RUNPATH=/data/user/0/com.mbox_ai/files/lib +ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 +ENV JRE_HOME=${JAVA_HOME}/jre +ENV CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib +ENV PATH=${JAVA_HOME}/bin:$PATH diff --git a/docker/prepare_for_dev.sh b/docker/prepare_for_dev.sh index bf125482a..a9fc0c12a 100755 --- a/docker/prepare_for_dev.sh +++ b/docker/prepare_for_dev.sh @@ -46,6 +46,15 @@ if [ "${PLATFROM}" == "x86_64" ];then download https://github.com/modelbox-ai/modelbox-binary/releases/download/BinaryArchive/ffmpeg_4.4_dev.tar.gz download https://github.com/modelbox-ai/modelbox-binary/releases/download/BinaryArchive/opencv_4.2.0_dev.tar.gz download https://github.com/modelbox-ai/modelbox-binary/releases/download/BinaryArchive/obssdk_3.22.3_dev.tar.gz + elif [ "$OS_NAME" == "android" ];then + download https://dl.google.com/android/repository/android-ndk-r25b-linux.zip + download https://github.com/Kitware/CMake/releases/download/v3.25.2/cmake-3.25.2-linux-x86_64.tar.gz + download https://github.com/modelbox-ai/modelbox-binary/releases/download/BinaryArchive_android/src.tar.gz + download https://github.com/modelbox-ai/modelbox-binary/releases/download/BinaryArchive_android/deb_files.tar.gz + download https://github.com/modelbox-ai/modelbox-binary/releases/download/BinaryArchive_android/cpprestsdk.tar.gz + download https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.9.0/MindSpore/lite/release/linux/x86_64/mindspore-lite-1.9.0-linux-x64.tar.gz + download https://ms-release.obs.cn-north-4.myhuaweicloud.com/1.9.0/MindSpore/lite/release/android/gpu/mindspore-lite-1.9.0-android-aarch64.tar.gz + ls -lh . fi download https://github.com/modelbox-ai/modelbox-binary/releases/download/BinaryArchive/nlohmann-json_3.7.3.tar.gz download https://github.com/modelbox-ai/modelbox-binary/releases/download/BinaryArchive/Video_Codec_SDK_9.1.23.tar.gz diff --git a/docker/unit.sh b/docker/unit.sh new file mode 100644 index 000000000..1a44b437f --- /dev/null +++ b/docker/unit.sh @@ -0,0 +1,8 @@ +#!/system/bin/sh +cd /data/user/test/bin +LD_LIBRARY_PATH=../dep:../drivers \ +LD_PRELOAD=libgmock.so:libgtest.so:libmodelbox.so:libsecurec.so \ +HOME=/data/user/test \ +PYTHONHOME=/data/user/test/python3.10 \ +PYTHONPATH=/data/user/test/python3.10:/data/user/test/python3.10/lib-dynload:/data/user/test/python3.10/site-packages \ +./unit --gtest_filter="-CryptoTest.AesEncryptPass:PopenTest.*" diff --git a/setup_android_ndk.sh b/setup_android_ndk.sh new file mode 100644 index 000000000..490d6acb0 --- /dev/null +++ b/setup_android_ndk.sh @@ -0,0 +1,81 @@ +#!/bin/bash +CODE_DIR=$(cd $(dirname "${BASH_SOURCE[0]}");pwd) +export NDK_ROOT=/data/ndk/android-ndk-r25b +export USER_ROOT=/data/devel/thirdparty/deb +export LIBRARY_RUNPATH=/data/user/0/com.mbox_ai/files/lib +export MINDSPORE_LITE_PATH=/data/mindspore/mindspore-lite-1.9.0 +export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 +export JRE_HOME=${JAVA_HOME}/jre +export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib +export PATH=${JAVA_HOME}/bin:$PATH +export DEBIAN_FRONTEND=noninteractive +export $(dbus-launch) +export RUNLEVEL=3 + +apt update +apt install -y --no-install-recommends \ + vim curl zip unzip git maven make strace iproute2 \ + pkg-config openjdk-8-jdk ca-certificates patchelf \ + python3-pip ubuntu-desktop clang-tidy-14 cmake +ln -sf clang-tidy-14 /usr/bin/clang-tidy +ln -sf run-clang-tidy-14 /usr/bin/run-clang-tidy + +curl --proto '=https' --tlsv1.2 -Sf https://repo.waydro.id/waydroid.gpg --output /usr/share/keyrings/waydroid.gpg +echo "deb [signed-by=/usr/share/keyrings/waydroid.gpg] https://repo.waydro.id/ jammy main" | tee /etc/apt/sources.list.d/waydroid.list +apt update +apt install -y waydroid=1.3.3 + +mkdir -p ~/.pip +echo "[global]" > ~/.pip/pip.conf +echo "index-url = https://pypi.python.org/simple" >> ~/.pip/pip.conf +echo "trusted-host = pypi.python.org" >> ~/.pip/pip.conf +echo "timeout = 120" >> ~/.pip/pip.conf +python3 -m pip install --upgrade pip +python3 -m pip install --no-cache-dir setuptools pyclip + +sed -i '3s/OS_NAME=.*/OS_NAME=android/' ${CODE_DIR}/docker/prepare_for_dev.sh +sed -i '/ls -lh release/d' ${CODE_DIR}/docker/prepare_for_dev.sh +bash -x ${CODE_DIR}/docker/prepare_for_dev.sh +ls -lh ${CODE_DIR} + +mkdir -p /data/ndk +unzip -o android-ndk-r25b-linux.zip -d /data/ndk +ls -lh /data/ndk + +tar zxf cpprestsdk.tar.gz -C /data +ls -lh /data/cpprestsdk/{x86_64,arm64-v8a}/lib/* + +mkdir -p /data/mindspore +tar zxf mindspore-lite-1.9.0-linux-x64.tar.gz -C /data/mindspore +tar zxf mindspore-lite-1.9.0-android-aarch64.tar.gz -C /data/mindspore +ls -lh /data/mindspore + +mkdir -p /data/devel/thirdparty +tar zxf src.tar.gz -C /data/devel/thirdparty +tar zxf deb_files.tar.gz -C /data/devel/thirdparty +ls -lh /data/devel/thirdparty + +ln -sf data/data/com.termux/files/usr /data/devel/thirdparty/deb/x86_64/usr +ln -sf data/data/com.termux/files/usr /data/devel/thirdparty/deb/arm64-v8a/usr +ln -sf opencv4/opencv2 /data/devel/thirdparty/deb/x86_64/usr/include/opencv2 +ln -sf opencv4/opencv2 /data/devel/thirdparty/deb/arm64-v8a/usr/include/opencv2 +cp -af /data/cpprestsdk/arm64-v8a/lib/libcpprest.so /data/devel/thirdparty/deb/arm64-v8a/usr/lib/ +cp -af /data/cpprestsdk/x86_64/lib/libcpprest.so /data/devel/thirdparty/deb/x86_64/usr/lib/ +ln -sf /data/cpprestsdk/include/cpprest /data/devel/thirdparty/deb/arm64-v8a/usr/include/cpprest +ln -sf /data/cpprestsdk/include/cpprest /data/devel/thirdparty/deb/x86_64/usr/include/cpprest +ln -sf /data/cpprestsdk/include/pplx /data/devel/thirdparty/deb/arm64-v8a/usr/include/pplx +ln -sf /data/cpprestsdk/include/pplx /data/devel/thirdparty/deb/x86_64/usr/include/pplx + +mkdir -p /data/devel/stub +cd /data/devel/stub +touch test.c +/data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang -fPIC -shared -Wl,--build-id -Wl,-soname,libpthread.so test.c -o libpthread.so.a64 +/data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang -fPIC -shared -Wl,--build-id -Wl,-soname,librt.so test.c -o librt.so.a64 +/data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android28-clang -fPIC -shared -Wl,--build-id -Wl,-soname,libpthread.so test.c -o libpthread.so.x64 +/data/ndk/android-ndk-r25b/toolchains/llvm/prebuilt/linux-x86_64/bin/x86_64-linux-android28-clang -fPIC -shared -Wl,--build-id -Wl,-soname,librt.so test.c -o librt.so.x64 +cp libpthread.so.a64 /data/devel/thirdparty/deb/arm64-v8a/usr/lib/libpthread.so +cp librt.so.a64 /data/devel/thirdparty/deb/arm64-v8a/usr/lib/librt.so +cp libpthread.so.x64 /data/devel/thirdparty/deb/x86_64/usr/lib/libpthread.so +cp librt.so.x64 /data/devel/thirdparty/deb/x86_64/usr/lib/librt.so + +echo "***android ndk build setup completed***"