Rockpi4/dev/rockpi-android-tv
ROCK Pi 4 > Android7-TV
For more up-to-date Android version, please refer to Working With Android section in Rockpi4.
Recommend build host is Ubuntu 16.04 64bit, for other hosts, refer official Android documents Establishing a Build Environment.
Repo
radxa$ wget 'https://storage.googleapis.com/git-repo-downloads/repo' -P /tmp/
radxa$ sudo cp /tmp/repo /usr/local/bin/repo
radxa$ sudo chmod +x /usr/local/bin/repo
In China Download Repo:
radxa$ echo "export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'" >> ~/.bashrc
radxa$ source ~/.bashrc
radxa$ curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o /tmp/repo
radxa$ sudo cp /tmp/repo /usr/local/bin/repo
radxa$ sudo chmod +x /usr/local/bin/repo
Init Environment
Android's source code primarily consists of Java, C++, and XML files.
To compile the source code, you'll need to install OpenJDK 8, GNU C and C++ compilers, XML parsing libraries, ImageMagick, and several other related packages.
radxa$ apt-get update -y && apt-get install -y openjdk-8-jdk python git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip mtools u-boot-tools \
htop iotop sysstat iftop pigz bc device-tree-compiler lunzip \
dosfstools vim-common parted udev
Configure the JAVA environment
radxa$ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
radxa$ export PATH=$JAVA_HOME/bin:$PATH
radxa$ export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
DockerFile
FROM ubuntu:xenial
RUN apt-get update -y && apt-get install -y openjdk-8-jdk python git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip mtools u-boot-tools \
htop iotop sysstat iftop pigz bc device-tree-compiler lunzip \
dosfstools vim-common parted udev
RUN curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/local/bin/repo && \
chmod +x /usr/local/bin/repo
RUN which repo
ENV REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' USER=android7-docker
ARG USER_ID=0
ARG GROUP_ID=0
RUN groupadd -g ${GROUP_ID} jenkins-docker && useradd -m -g jenkins-docker -u ${USER_ID} android7-docker
USER android7-docker
Build DockerFile
radxa$ docker build -t android-builder:7.x --build-arg USER_ID=`id -u` --build-arg GROUP_ID=`id -g` $(which-dir-dockerfile-in)
Download source code
radxa$ mkdir rockpi4-android7-tv
radxa$ cd rockpi4-android7-tv
Then run:
radxa$ repo init -u https://github.com/radxa/rockpi4-android-tv-7.1.git -m rockchip_tv_nougat_release.xml
radxa$ repo sync -d --no-tags -j4
It might take quite a bit of time to fetch the entire AOSP source code(around 86G)!
Build u-boot
radxa$ cd u-boot
radxa$ make rock-pi-4b-rk3399_defconfig
radxa$ ./mk-uboot.sh
radxa$ cd ..
The generated images are **rk3399_loader_v_xxx.bin** , **idbloader.img** and **uboot.img**
Building kernel
For HDMI 4K
radxa$ cd kernel
radxa$ make rockchip_defconfig
radxa$ make rk3399-rockpi-4b.img -j$(nproc)
radxa$ cd ..
The generated images are **kernel.img** and **resource.img**:
- kernel.img, kernel with rkcrc checksum
- resource.img, contains dtb and boot logo, Rockchip format resource package
Building AOSP
radxa$ source build/envsetup.sh
radxa$ lunch rk3399_box-userdebug
radxa$ make -j$(nproc)
It takes a long time, take a break and wait...
Generate images
radxa$ ln -s RKTools/linux/Linux_Pack_Firmware/rockdev/ rockdev
radxa$ ./mkimage.sh
The generated images under rockdev/Image are
├── boot.img
├── idbloader.img
├── kernel.img
├── MiniLoaderAll.bin
├── misc.img
├── parameter.txt
├── pcba_small_misc.img
├── pcba_whole_misc.img
├── recovery.img
├── resource.img
├── system.img
├── trust.img
└── uboot.img
Generated RkUpdate Image
radxa$ cd rockdev
radxa$ ln -s Image-rk3399_box Image
radxa$ ./mkupdate.sh
The images under rockdev/ are `update.img`
Generated GPT Image
radxa$ cd rockdev
radxa$ ln -s Image-rk3399_box Image
radxa$ ./android-gpt.sh
IMAGE_LENGTH:3936291
idbloader 64 16383 8.000000 MB
Warning: The resulting partition is not properly aligned for best performance.
uboot 16384 24575 4.000000 MB
trust 24576 32767 4.000000 MB
misc 32768 40959 4.000000 MB
resource 40960 73727 16.000000 MB
kernel 73728 122879 24.000000 MB
boot 122880 188415 32.000000 MB
recovery 188416 253951 32.000000 MB
backup 253952 483327 112.000000 MB
cache 483328 745471 128.000000 MB
system 745472 3891199 1536.000000 MB
metadata 3891200 3923967 16.000000 MB
baseparamer 3923968 3932159 4.000000 MB
userdata 3932160 3932159 0.000000 MB
The images under rockdev/Image are `gpt.img`
Installation
GPT Image Install on microSD
GPT Image Install on eMMC module
RkUpdate Image Install on eMMC module
There may be some performance loss when using microSD.