初学者的Android移植:在Debian上建立一个稳定的构建环境
介绍 通过在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
<code> mkdir -p ~/android/system
</code>
android是我们将存储一些用于设置和进入构建环境的帮助脚本的目录 /android/system是创建稳定chroot环境的目录。 其次,获取一些依赖项。 如果您还没有安装debootstrap,请安装它。 隐藏,复制Code
<code> sudo apt-get install debootstrap
</code>
debootstrap在您的计算机目录中创建一个最小的Debian安装。 第三,debootstrap运行。 将目录更改为助手脚本目录。 隐藏,复制Code
<code> cd ~/android
</code>
运行debootstrap在系统目录中创建一个Debian i386安装。 隐藏,复制Code
<code> sudo debootstrap --arch i386 wheezy system
</code>
或者,在系统目录中创建一个Debian amd64安装。 这个命令的意思是“作为根用户,使用名为system的工作目录下的目录中的wheezy存储库引导用于i386体系结构的新的Debian安装”。 第四,mount /proc、/sys和/dev。 接下来,您需要挂载主机文件系统的某些部分,以便使用刚才创建的系统。 隐藏,复制Code
<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
</code>
第五,输入chroot并允许它从wheez- backports提取。 将本地主机文件复制到开发环境中 隐藏,复制Code
<code> sudo cp /etc/hosts system/etc/hosts
</code>
将本地挂载的设备复制到开发环境中。 隐藏,复制Code
<code> sudo cp /proc/mounts system/etc/mtab
</code>
现在我们准备进入chroot。这一次,我们将设置wheez- backports存储库,更新安装,然后退出。 隐藏,复制Code
<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
</code>
wheez- backports存储库将被补充使用,以帮助您安装必要的软件与Android ROM的工作。 第六,编写一些脚本来自动输入chroot。 我们没有配置为在启动系统时自动启动chroot中的进程,因此每次都必须重新挂载主机文件系统,并重新复制主机并将文件挂载到chroot中。我们将创建一个脚本,它将自动将您加载到chroot中。 创建包含在助手脚本目录中输入chroot的脚本的文件。 隐藏,复制Code
<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>
使文件可执行。 隐藏,复制Code
<code> chmod +x ~/android/enter.sh
</code>
最后,让我们回顾一下这些新脚本的工作流。 要使用int .sh脚本,只需将目录更改为helper scripts目录并运行./ int .sh。因为它使用sudo,你会被要求输入密码。 隐藏,复制Code
<code> cd ~/android/
./enter.sh
</code>
退出chroot构建环境 离开chroot。 式退出。 隐藏,复制Code
<code> exit
</code>
安装构建依赖项 接下来,我们将在chroot中安装用于编译Android ROM的构建依赖项。 您将使用的程序 apt-get ln 进入构建环境。 当你想在你的Android ROM上工作时,你需要进入你的chroot开发环境。 现在已经设置了chroot环境,请输入它。 隐藏,复制Code
<code> cd ~/android
./enter.sh
</code>
设置构建依赖项 现在只需使用apt来安装构建依赖项。 适用于386建筑环境安装这些包。 隐藏,复制Code
<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
</code>
对于amd64构建环境,也要安装这些包。 隐藏,复制Code
<code> apt-get install libc6-dev-i386 gcc-multilib g++-multilib lib32z1-dev \
lib32readline5-dev lib32ncurses5-dev
</code>
我们要回到解决库的问题上。 这是该过程的第一部分,可能需要一些推理(尽管使用386 chroot应该可以缓解大多数问题)。有些发行版将库放在计算机上略有不同的目录中。如果在编译ROM时出现丢失库的错误,可能就是这种情况。要解决这个问题,需要在环境期望的目录中创建一个符号链接,指向所需的库。 例如,如果您看到缺少zconf.h,您可能需要执行以下操作 隐藏,复制Code
<code> sudo ln -s /usr/include/x86_64-linux-gnu/zconf.h /usr/lib/zconf.h
</code>
类似地,如果libstdc + +。所以丢失, 隐藏,复制Code
<code> sudo ln -s /usr/lib32/libstdc++.so.6.0.14 /usr/lib32/libstdc++.so
</code>
或libGL.so 隐藏,复制Code
<code> sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 \
/usr/lib/i386-linux-gnu/libGL.so
</code>
这个命令的意思是,作为根,在编译器正在查找的目录中创建一个指向所需文件的软符号链接。 不幸的是,很难确定您的特定构建环境期望这些库位于何处。我将尽我最大的努力在这个文档中记录尽可能多的这些内容。 安装回购 为了获得源代码并成功构建,还需要安装一些程序。 回到这里,只安装SDK和NDK 部分Android SDK和NDK已经作为标准的Debian软件包提供,不幸的是,这些工具的完整程度还不清楚。出于这个原因,我们将从源代码设置所有这些工具,而不是使用apt包。如果有人知道更多关于如何使用apt包而不是从源代码安装软件,请告诉我。 让我们安装回购 repo是由谷歌创建的工具,它使用称为清单的xml文件以自动化的方式自动下载大量git源存储库。我将在本书这一部分的后半部分更详细地介绍回购。 安装repo很容易,只需将文件下载到您的/usr/bin目录。 隐藏,复制Code
<code> curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
</code>
然后,使其可执行。 隐藏,复制Code
<code> chmod a+x /usr/bin/repo
</code>
这将把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
<code> sudo apt-get install android-tools*
</code>
或者,从chroot开发环境内部运行 隐藏,复制Code
<code> apt-get install android-tools
</code>
一个一次性的脚本,为您完成所有这些 隐藏,收缩,复制Code
<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
</code>
进一步引用 构建依赖安装,复制Wiki,复制项目 初始化构建环境,Android开发者指南,谷歌 进一步阅读: https://en.wikipedia.org/wiki/Chroot , 本文转载于:http://www.diyabc.com/frontweb/news30279.html
初学者的Android移植:在Debian上建立一个稳定的构建环境的更多相关文章
- 【起航计划 022】2015 起航计划 Android APIDemo的魔鬼步伐 21 App->Launcher Shortcuts 为某个非主Activity在Home Screen上建立一个快捷方式
Android 操作系统对于<intent-filter>含有下列属性的Activity会在应用程序管理器(Launcher)显示一项,一般这个Activity对应于某个应用的主Activ ...
- 用mkdocs在gitee码云上建立一个简单的文档博客
利用mkdocs建立简单的文档博客 一.概述 MkDocs 是一个用于创建项目文档的 快速, 简单 , 完美华丽 的静态站点生成器. 文档源码使用 Markdown 来撰写, 用一个 YAML 文件作 ...
- 在iMac上建立一个git仓库
前沿:一般我们去git clone 的时候,数据直接指向了某某分支的最后一次提交.想想 我们每次提交的不同点都在哪,去 当前工程文件下找到 .git 文件夹,去下面自己看看吧 - .git - .co ...
- ubuntu上建立本地git 和 网络 github的上传与下载
github工具是一个很好用的工具,可以在本地建立一个git仓库,存储当前写的程序或者数据,然后通过ssh与github建立联系.具体怎么实现,下面进行介绍. 1.首先要安装git 软件 在Linux ...
- 在Google Drive上建立免费静态站点
现今建立一个属于自己的站点已经是一件非常普遍和简单的事情了. 你能够选择买空间,买域名.你也能够使用免费空间.免费域名.你能够选择动态的php wordpress,joomla或者是静态的站点(如使用 ...
- 如何在含有json类型的字段上建立多列索引
废话不多,直接上图 如 : 表结构如图 那么我想在这三个字段上建立一个唯一索引,目的是为了防止重复插入数据, 1.首先,说明一下 data中的json中,key为 tagID 和 ...
- ubuntu安装discourse论坛----结合在apache服务上建立虚拟主机
指导操作:https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md 一.先安装 Docker / Git: wg ...
- 如何利用php+android+新浪sae服务器做一个app下载应用
功能简介:提供一个app下载的平台,类似于appstore,上面有很多app可供下载 实现基本思路:利用android,在手机桌面建立一个图标,点击该图标不是打开app应用,而是跳转到一个web页面, ...
- 如何快速建立一个测试资源Web服务器及异步获取资源(Unity3D)
背景 1.最近看了几位专栏作家的文章,几篇提到了资源通过网络的动态获取.如何建立一个快速的测试环境,不免是一个问题,也就最简单的就是假设http服务器了,微软系的当然首选的IIS了,别的也能用阿帕奇或 ...
随机推荐
- JS数组去重的实现
其实数组去重的实现就分为两大类 利用语法自身键不可重复性 利用循环(递归)和数组方法使用不同的api来处理. 注意️:下列封装成方法的要在函数开始增加类型检测,为了让去重的实现代码更加简单易懂,封装时 ...
- 在Oracle中快速创建一张百万级别的表,一张十万级别的表 并修改两表中1%的数据 全部运行时间66秒
万以下小表做性能优化没有多大意义,因此我需要创建大表: 创建大表有三种方法,一种是insert into table selec..connect by.的方式,它最快但是数据要么是连续值,要么是随机 ...
- C#开发PACS医学影像处理系统(一):开发背景和说明
本系列文章将从以下模块和大家分享和讨论使用C#开发医学软件PACS和RIS系统, 国内相关资料比较少,也借此机会丰富一下医学软件开发生态,讨论技术难点,希望大家互相帮助共同进步. 章节介绍及截图预览: ...
- Priest John's Busiest Day(POJ 3683)
原题如下: Priest John's Busiest Day Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 12162 ...
- django.db.utils.InternalError: (1091, "Can't DROP 'cre_time'; check that column/key exists")
在执行命令python manage.py migrate时报错:django.db.utils.InternalError: (1091, “Can’t DROP ‘cre_time’; check ...
- oracle之二实例管理及数据库的启动/关闭
实例管理及数据库的启动/关闭 2.1 实例和参数文件 1.instance 功能:用于管理和访问database.instance在启动阶段读取初始化参数文件(init parameter fil ...
- Linux rndis_host 驱动的一个BUG与解决方案
关键字 rndis_host, linux, kernel, modem 综述 rndis 是微软定义的一套通讯方案.类似的协议还有 qmi/mbim/ecm/ncm. rndis 协议足够简单,可靠 ...
- JVM内存结构和Java内存模型
一.JVM 首先看一张JVM结构图(某度找的) 主要看运行时数据区,里边有方法区,堆,java虚拟机栈,本地方法栈,程序计数器.其中方法区和堆是线程共享的,也是JVM进行垃圾收集的区域,java虚拟机 ...
- Linux入门到实战
关注公众号 cxytester 获取第一手资讯. 1. 全是干货-Linux命令大全 1.1 线上查询及帮助(1个) help 1.2 文件目录及操作(12个) ls tree pwd mkdir r ...
- ribbon源码(4) 载均衡算法
负载均衡算法模块主要的功能是从负载均衡器中获取服务器列表信息,根据算法选取出一个服务器. IRule 负载均衡算法接口 public interface IRule{ public Server ch ...