栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【安卓开发系列 -- 系统开发】编译 android 系统 (基于 OpenVMI 容器方式)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【安卓开发系列 -- 系统开发】编译 android 系统 (基于 OpenVMI 容器方式)

【安卓开发系列 -- 系统开发】编译 android 系统 (基于 OpenVMI 容器方式)

【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 项目

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/332748.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号