介绍 通过在chrooted环境中设置开发环境,避免依赖冲突和沙箱您的Android开发从您的Debian GNU/Linux系统。这是为通配符类别准备的,因为从源代码构建Android似乎没有在其他地方覆盖。 背景 本指南是一个正在进行的个人项目的一部分,该项目旨在开发关于Android ROM移植的免费和开源书籍,旨在简化和揭开ROM移植的R&D过程的神秘面纱。本指南的源代码(以特价出售的形式)可以在GitHub上获得,网址是:https://github.com/omr87169。 在基于debian的GNU/Linux发行版上设置Android开发环境 *出于本书的目的,当一个命令必须以根用户或替代用户运行时,发生在GNU/Linux上的所有指令都将显式地显示sudo的使用。这主要是为了消除设置构建环境过程的歧义。 使用debootstrap和chroot稳定和隔离构建环境 使用chroot将允许您使用一致的构建环境并避免相互冲突的依赖关系。尽管在大多数Android移植指南中没有描述,但我发现它是建立我的开发环境的一个宝贵的步骤。为此,我们将使用debootstrap在计算机上的一个目录中生成一个最小的Debian安装,将必要的部分挂载到底层文件系统中,然后使用chroot进入新的无菌环境。最后,我们将编写一些简短的脚本来自动进入构建环境。这个过程可能看起来有点麻烦,但是如果你花时间去做,它可以为你省去一些麻烦。 您将使用的程序 应用程序-get debootstrap @ Debian wiki chroot @ Debian wiki 首先,设置一些目录。 这些目录将包含构建Android ROM所需的所有文件。 隐藏,复制Code
mkdir -p ~/android/system
android是我们将存储一些用于设置和进入构建环境的帮助脚本的目录 /android/system是创建稳定chroot环境的目录。 其次,获取一些依赖项。 如果您还没有安装debootstrap,请安装它。 隐藏,复制Code
sudo apt-get install debootstrap
debootstrap在您的计算机目录中创建一个最小的Debian安装。 第三,debootstrap运行。 将目录更改为助手脚本目录。 隐藏,复制Code
cd ~/android
运行debootstrap在系统目录中创建一个Debian i386安装。 隐藏,复制Code
sudo debootstrap --arch i386 wheezy system
或者,在系统目录中创建一个Debian amd64安装。 这个命令的意思是“作为根用户,使用名为system的工作目录下的目录中的wheezy存储库引导用于i386体系结构的新的Debian安装”。 第四,mount /proc、/sys和/dev。 接下来,您需要挂载主机文件系统的某些部分,以便使用刚才创建的系统。 隐藏,复制Code
sudo mount proc system/proc -t proc
sudo mount sysfs system/sys -t sysfs
sudo mount --bind /dev/pts ~/android/system/dev/pts
sudo mount --bind system/dev /dev
第五,输入chroot并允许它从wheez- backports提取。 将本地主机文件复制到开发环境中 隐藏,复制Code
sudo cp /etc/hosts system/etc/hosts
将本地挂载的设备复制到开发环境中。 隐藏,复制Code
sudo cp /proc/mounts system/etc/mtab
现在我们准备进入chroot。这一次,我们将设置wheez- backports存储库,更新安装,然后退出。 隐藏,复制Code
sudo chroot system
mkdir -p /home/android/
echo "
deb http://ftp.us.debian.org/debian/ wheezy-backports main
" >> /etc/apt/sources.list
echo "
APT::Default-Release "wheezy";
" > /etc/apt/apt.conf
apt-get update && apt-get dist-upgrade
wheez- backports存储库将被补充使用,以帮助您安装必要的软件与Android ROM的工作。 第六,编写一些脚本来自动输入chroot。 我们没有配置为在启动系统时自动启动chroot中的进程,因此每次都必须重新挂载主机文件系统,并重新复制主机并将文件挂载到chroot中。我们将创建一个脚本,它将自动将您加载到chroot中。 创建包含在助手脚本目录中输入chroot的脚本的文件。 隐藏,复制Code
echo "#! /bin/sh
sudo mount proc ~/android/system/proc -t proc
sudo mount sysfs ~/android/system/sys -t sysfs
sudo mount -o bind /dev/pts ~/android/system/dev/pts
sudo mount -o bind /dev ~/android/system/dev
sudo cp /proc/mounts ~/android/system/etc/mtab
sudo cp /etc/hosts ~/android/system/etc/hosts
sudo chroot ~/android/system/ /bin/sh -c "cd /home/android && bash && CROSS_COMPILE=/home/android/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi- & echo "success ""
" > ~/android/enter.sh
使文件可执行。 隐藏,复制Code
chmod +x ~/android/enter.sh
最后,让我们回顾一下这些新脚本的工作流。 要使用int .sh脚本,只需将目录更改为helper scripts目录并运行./ int .sh。因为它使用sudo,你会被要求输入密码。 隐藏,复制Code
cd ~/android/
./enter.sh
退出chroot构建环境 离开chroot。 式退出。 隐藏,复制Code
exit
安装构建依赖项 接下来,我们将在chroot中安装用于编译Android ROM的构建依赖项。 您将使用的程序 apt-get ln 进入构建环境。 当你想在你的Android ROM上工作时,你需要进入你的chroot开发环境。 现在已经设置了chroot环境,请输入它。 隐藏,复制Code
cd ~/android
./enter.sh
设置构建依赖项 现在只需使用apt来安装构建依赖项。 适用于386建筑环境安装这些包。 隐藏,复制Code
apt-get install -t wheezy-backports bison flex git-core gperf \
libncurses-dev build-essential squashfs-tools openjdk-6-jre \
openjdk-6-jdk pngcrush wget zip zlib1g-dev lzma libxml2-utils \
build-essential libesd0-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 lzop \
xsltproc zip schedtool locales
对于amd64构建环境,也要安装这些包。 隐藏,复制Code
apt-get install libc6-dev-i386 gcc-multilib g++-multilib lib32z1-dev \
lib32readline5-dev lib32ncurses5-dev
我们要回到解决库的问题上。 这是该过程的第一部分,可能需要一些推理(尽管使用386 chroot应该可以缓解大多数问题)。有些发行版将库放在计算机上略有不同的目录中。如果在编译ROM时出现丢失库的错误,可能就是这种情况。要解决这个问题,需要在环境期望的目录中创建一个符号链接,指向所需的库。 例如,如果您看到缺少zconf.h,您可能需要执行以下操作 隐藏,复制Code
sudo ln -s /usr/include/x86_64-linux-gnu/zconf.h /usr/lib/zconf.h
类似地,如果libstdc + +。所以丢失, 隐藏,复制Code
sudo ln -s /usr/lib32/libstdc++.so.6.0.14 /usr/lib32/libstdc++.so
或libGL.so 隐藏,复制Code
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 \
/usr/lib/i386-linux-gnu/libGL.so
这个命令的意思是,作为根,在编译器正在查找的目录中创建一个指向所需文件的软符号链接。 不幸的是,很难确定您的特定构建环境期望这些库位于何处。我将尽我最大的努力在这个文档中记录尽可能多的这些内容。 安装回购 为了获得源代码并成功构建,还需要安装一些程序。 回到这里,只安装SDK和NDK 部分Android SDK和NDK已经作为标准的Debian软件包提供,不幸的是,这些工具的完整程度还不清楚。出于这个原因,我们将从源代码设置所有这些工具,而不是使用apt包。如果有人知道更多关于如何使用apt包而不是从源代码安装软件,请告诉我。 让我们安装回购 repo是由谷歌创建的工具,它使用称为清单的xml文件以自动化的方式自动下载大量git源存储库。我将在本书这一部分的后半部分更详细地介绍回购。 安装repo很容易,只需将文件下载到您的/usr/bin目录。 隐藏,复制Code
curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
然后,使其可执行。 隐藏,复制Code
chmod a+x /usr/bin/repo
这将把repo直接安装到您的路径/usr/bin/ repo中。Android文档的做法不同,它鼓励您将repo安装到主目录下的一个文件夹中,并将该文件夹添加到$PATH中,以帮助您方便更新。在chroot中,这是不必要的。 而且这个名字有点扯淡。相对于搜索其他类型的存储库,它使得找到人们在论坛上关于使用回购的帖子变得超级困难。想想吧,谷歌。 安装Android NDK并将其添加到yout路径 你还需要Android NDK来编译你自己的ROM, NDK为arm设备生成二进制代码。 要安装NDK,请使用wget下载它。wget - o / home/ndk.tar .gz http://dl.google.com/android/ndk/r10-linux-x86.tar .bz2 tar xvjf NDK.tar.gz CROSS_COMPILE=/home/android/android-ndk-r10/arm-linux-androideabi-4.7/预建/linux-x86_64/bin/arm-linux-androideabi- 安装亚行fastboot 您可能希望在您的主机上安装adb和fastboot,而不是在chroot开发环境中。这可以通过使用apt或从源代码安装SDK工具来完成。 从chroot开发环境外部运行 隐藏,复制Code
sudo apt-get install android-tools*
或者,从chroot开发环境内部运行 隐藏,复制Code
apt-get install android-tools
一个一次性的脚本,为您完成所有这些 隐藏,收缩,复制Code
#! /bin/sh
mkdir -p ~/android/system
sudo apt-get install debootstrap
cd ~/android
echo "Do you want to use an i386 or amd64 build environment?"
select Arch in "i386" "amd64"; do
case $Arch in
i386 ) sudo debootstrap --arch i386 wheezy system; a=i386;
amd64 ) sudo debootstrap --arch amd64 wheezy system; a=amd64;
esac
done
sudo mount proc system/proc -t proc
sudo mount sysfs system/sys -t sysfs
sudo mount --bind system/dev /dev
sudo cp /etc/hosts system/etc/hosts
sudo cp /proc/mounts system/etc/mtab
sudo chroot system
mkdir -p /home/android/
echo "
deb http://ftp.us.debian.org/debian/ wheezy-backports main
" >> /etc/apt/sources.list
echo "
APT::Default-Release "wheezy";
" > /etc/apt/apt.conf
apt-get update && apt-get dist-upgrade
echo '#! /bin/sh
sudo mount proc ~/android/system/proc -t proc
sudo mount sysfs ~/android/system/sys -t sysfs
sudo mount -o bind /dev/pts ~/android/system/dev/pts
sudo mount -o bind /dev ~/android/system/dev
sudo cp /proc/mounts ~/android/system/etc/mtab
sudo cp /etc/hosts ~/android/system/etc/hosts
sudo chroot ~/android/system/ /bin/sh -c "cd /home/android && bash && CROSS_COMPILE=/home/android/android-ndk-r10/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc & echo "success""
' > ~/android/enter.sh
chmod +x ~/android/enter.sh
cd ~/android/
./enter.sh
exit
cd ~/android
./enter.sh
apt-get install -t wheezy-backports bison flex git-core gperf \
libncurses-dev build-essential squashfs-tools openjdk-6-jre \
openjdk-6-jdk pngcrush wget zip zlib1g-dev lzma libxml2-utils \
build-essential libesd0-dev libsdl1.2-dev libwxgtk2.8-dev libxml2 lzop \
xsltproc zip schedtool locales
case a in
amd64 ) apt-get install libc6-dev-i386 gcc-multilib \
g++-multilib lib32z1-dev lib32readline5-dev lib32ncurses5-dev
esac
curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
chmod a+x /usr/bin/repo
wget -O /home/NDK.tar.gz http://dl.google.com/android/ndk/android-ndk32-r10-linux-x86.tar.bz2
tar xvjf NDK.tar.gz
CROSS_COMPILE=/home/android/android-ndk-r10/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc
echo "Install android-tools-* packages on the host machine or the build
machine?"
select tools in "host" "build"; do
case $Arch in
host ) sudo apt-get install android-tools*;
build )sudo chroot ~android/system apt-get install android-tools*
esac
done
进一步引用 构建依赖安装,复制Wiki,复制项目 初始化构建环境,Android开发者指南,谷歌 进一步阅读: https://en.wikipedia.org/wiki/Chroot , 本文转载于:http://www.diyabc.com/frontweb/news30279.html