【1】Android 编译环境搭建
【1.1】添加源
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
【1.2】安装相关依赖
sudo apt-get install libx11-6:i386 libx11-dev:i386 sudo apt-get install libreadline6-dev:i386 sudo apt-get install g++-multilib libgl1-mesa-dev sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev sudo apt-get install git-core gnupg flex bison gperf build-essential sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib sudo apt-get install libc6-dev-i386 sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4 sudo apt-get install lib32z-dev ccache sudo apt-get install sqlite3
【1.3】安装配置 JDK 8
sudo apt-get install openjdk-8-jdk
编辑 /etc/profile 文件
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
【2】Android 源码获取
安装 repo curl https://storage.googleapis.com/git-repo-downloads/repo > /root/CopperSun/opvmi/bin/repo chmod a+x /root/CopperSun/opvmi/bin/repo 初始化 repo 仓库 git config --global user.email "用户邮箱 (github)" git config --global user.name "用户名 (github)" repo init -u https://github.com/DockDroid/platform_manifests.git -b openvmi 同步代码 repo sync -j16 (比较费时)
【3】编译 Android 源码
编译 Android 源码 在 Android 源码目录下新建目录 vendor,将 openvmi 代码复制到该目录中 初始化编译环境,source build/envsetup.sh 初始化构建 lunch 并选择构建目标 编译 Android 系统 export LC_ALL=C make -j32
问题与解决方案
- 问题 1,Communication error with Jack server (35)
- 解决方案
1. 把 Home 目录中的 .jack-setting 文件和 .jack-server 下 config.properties 文件里面的 PORT 修改为一致 2. 去除 TLSv1,TSLv1.1 配置项 cd /etc/java-8-openjdk/security/ 到目录下 sudo vim java.security (注意需要用 root 用户去打开并修改) remove "TLSv1, TLSv1.1" 这两个配置 保存后重启电脑
【4】制作 Android 文件系统镜像
cd ./openvmi-work/vendor/openvmi,进入该目录
scripts/create-package.sh
$PWD/../../out/target/product/arm64/ramdisk.img
$PWD/../../out/target/product/arm64/system.img
问题与解决方案
- 问题 1,mksquashfs 命令无法确定
sudo: mksquashfs: command not found
- 解决方案
apt-get install squashfs-tools
【5】Android X86_64 环境镜像编译与制作
步骤总结
添加 ./device/openvmi/x86_64/BoardConfig.mk 文件
TARGET_NO_BOOTLOADER := true TARGET_NO_KERNEL := true TARGET_CPU_ABI := x86_64 TARGET_ARCH := x86_64 TARGET_ARCH_VARIANT := x86_64 TARGET_PRElink_MODULE := false TARGET_2ND_CPU_ABI := x86 TARGET_2ND_ARCH := x86 TARGET_2ND_ARCH_VARIANT := x86 TARGET_USES_64_BIT_BINDER := true # no hardware camera USE_CAMERA_STUB := true # Enable dex-preoptimization to speed up the first boot sequence # of an SDK AVD. Note that this operation only works on Linux for now ifeq ($(HOST_OS),linux) WITH_DEXPREOPT ?= true endif # Build OpenGLES emulation host and guest libraries BUILD_EMULATOR_OPENGL := true # Build and enable the OpenGL ES View renderer. When running on the emulator, # the GLES renderer disables itself if host GL acceleration isn't available. USE_OPENGL_RENDERER := true TARGET_USERIMAGES_USE_EXT4 := true BOARD_SYSTEMIMAGE_PARTITION_SIZE := 2147483648 # 2 GB BOARD_USERDATAIMAGE_PARTITION_SIZE := 576716800 BOARD_CACHEIMAGE_PARTITION_SIZE := 69206016 BOARD_CACHEIMAGE_FILE_SYSTEM_TYPE := ext4 BOARD_FLASH_BLOCK_SIZE := 512 TARGET_USERIMAGES_SPARSE_EXT_DISABLED := true
添加 ./device/openvmi/x86_64/device.mk 文件
# Nothing yet
添加 ./device/openvmi/openvmi_x86_64.mk 文件
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk) $(call inherit-product, $(LOCAL_PATH)/x86_64/device.mk) $(call inherit-product, $(LOCAL_PATH)/openvmi.mk) PRODUCT_NAME := openvmi_x86_64 PRODUCT_DEVICE := x86_64 PRODUCT_BRAND := Android PRODUCT_MODEL := Openvmi
修改 ./device/openvmi/AndroidProducts.mk 文件
PRODUCT_MAKEFILES := $(LOCAL_DIR)/openvmi_armv7a_neon.mk $(LOCAL_DIR)/openvmi_arm64.mk $(LOCAL_DIR)/openvmi_x86_64.mk
修改 ./device/openvmi/vendorsetup.sh 文件
添加 add_lunch_combo openvmi_x86_64-userdebug
【6】Android 纯 Arm_64 环境镜像编译与制作
步骤总结
修改 ./device/openvmi/arm64/BoardConfig.mk 文件
注释如下配置 # TARGET_2ND_ARCH := arm # TARGET_2ND_ARCH_VARIANT := armv7-a-neon # TARGET_2ND_CPU_VARIANT := cortex-a15 # TARGET_2ND_CPU_ABI := armeabi-v7a # TARGET_2ND_CPU_ABI2 := armeabi
修改 ./device/openvmi/arm64/device.mk 文件
# # Copy the 64-bit primary, 32-bit secondary zygote startup script # PRODUCT_COPY_FILES += system/core/rootdir/init.zygote64_32.rc:root/init.zygote64_32.rc # # Set the zygote property to select the 64-bit primary, 32-bit secondary script # # This line must be parsed before the one in core_minimal.mk # PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.zygote=zygote64_32 # TARGET_SUPPORTS_32_BIT_APPS := true # TARGET_SUPPORTS_64_BIT_APPS := true PRODUCT_COPY_FILES += system/core/rootdir/init.zygote64.rc:root/init.zygote64.rc PRODUCT_DEFAULT_PROPERTY_OVERRIDES += ro.zygote=zygote64 TARGET_SUPPORTS_32_BIT_APPS := false TARGET_SUPPORTS_64_BIT_APPS := true
问题与解决方案
- 问题 1
external/libavc/decoder/arm/ih264d_function_selector.c:67: error:
undefined reference to 'ih264d_init_function_ptr_av8'
- 解决方案
修改文件,./external/libavc/Android.mk LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) ARCH_ARM_HAVE_NEON:=true # encoder include $(LOCAL_PATH)/encoder.mk # decoder include $(LOCAL_PATH)/decoder.mk
参考链接,netd服务进程起不来 · Issue #3 · DockDroid/openvmi · GitHub
参考与致谢
本博客为博主学习笔记,同时参考了网上众博主的博文以及相关专业书籍,在此表示感谢,本文若存在不足之处,请批评指正。
【1】安卓编译 Jack server 错误问题解决办法
【2】SSL error when connecting to the Jack server
【3】openvm gitee 项目
【4】openxbox gitee 项目



