在项目要求将apk文件打包到安卓系统7.1出了一大堆问题,由于我是windows10系统,所以在电脑上装了个virtualbox虚拟机,并且装上了ubuntu-18.04.2。
接下来就是在这个虚拟机系统上搭建编译安卓7.1源码所需要的环境要求了
sudo apt-get update
sudo apt-get install openjdk-8-jre
sudo apt-get install openjdk-8-jdk
配置环境变量:sudo vim /etc/profile,在打开的文件中输入下面配置即可完成jdk环境变量的配置
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
注意:当有多套代码需要不同的jdk编译是,可以在指令窗口直接输入下面的命令进行切换,注意,切换只对当前终端有效。(记得路径要根据自己jdk路径修改)export JAVA_HOME=/usr/lib/jvm/jdk1.6;export PATH=/usr/lib/jvm/jdk1.6/bin:$PATH
sudo apt-get install libx11-dev:i386 libreadline-dev:i386 libgl1-mesa-dev g++-multilib -y git flex bison gperf build-essential libncurses5-dev:i386 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl1.2-dev gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libgl1-mesa-dev libxml2-utils xsltproc unzip m4 lib32z1-dev ccache
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
export USE_CCACHE=1
在源码的根目录下执行下述命令,设置缓存最大50G:
$ prebuilts/misc/linux-x86/ccache/ccache -M 50G
为防止编译中途出现问题,请先额外安装如下软件包:
$ sudo apt-get install sharutils
$ sudo apt-get install lzop
为防止编译时内存不够,请先设置交换分区
$ sudo fallocate -l 4G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
//如果不执行以下步骤,则关机重启后需要重新设置swap分区,
开机自动挂载swap,需要root权限:
使用 vi 或 nano 在 /etc/fstab 文件底部添加如下内容:
$ vi /etc/fstab
或者使用gedit进行编译:
$ gedit /etc/fstab
将下述字符添加到最末尾,保存退出。
/swapfile none swap sw 0 0
做如下处理:
1.在源码根目录下:
./prebuilts/sdk/tools/jack-admin list-server
prebuilts/sdk/tools/jack-admin start -server
prebuilts/sdk/tools/jack-admin stop -server,如果这几个命令不存在,则执行如下安装操作
cd prebuilts/sdk/tools/
./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
再做如下对jack-admin的处理:vim prebuilts/sdk/tools/jack-admin命令打开文件,
①.找到如下语句:
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -cp $LAUNCHER_JAR $LAUNCHER_NAME"
②.将上述语句修改为:
JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx8192m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
然后执行如下两条命令:
./prebuilts/sdk/tools/jack-admin stop-server
./prebuilts/sdk/tools/jack-admin start-server
2.build/envsetup.sh脚本中最后添加:export LC_ALL=C
编译内核,进入到kernel目录下:
$ cd kernel
$ make rockchip_defconfig(不能执行该步骤,否则编译会不通过)
$ make rk3288-box.img
编译完成后查看kernel根目录下是否有kernel.img,resource.img两个镜像文件,若有则表示编译成功。
cd 到源码根目录下,初始化编译环境
$ source build.sh
编译源码,后面的数字根据CPU的核心数和线程数而定
$ make –j4
生成用于升级的整包,target包
$ make otapackage
执行源码根目录下的mkimage.sh脚本生成镜像,位于/rockdev/Image-rk288目录。
./mkimage.sh ota
此时整个编译过程完成
一次编译完成后,请备份以下目录中的文件:
/rockdev/Image-rk3288_box/目录下所有文件:
/kernel/kernel.img
/kernel/resource.img
/out/target/product/rk3288_box/system/build.prop
/out/target/product/rk3288_box/rk3288_box-ota-eng.root.zip //用于整包升级的zip包,该包可以直接放在SD卡、U盘或 者/mnt/internal-sd根目录下进行升级。
/out/target/product/rk3288_box/target_files-package.zip //用于OTA升级生成差分包的target包
将需要升级的loader文件拷贝到device/rockchip/common/loader下,make otapackage生成的完整包中会包含这个loader。Loader必须保证版本号比原固件中的loader版本号更高。