初学者的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了,别的也能用阿帕奇或 ...
随机推荐
- Spine应用--使用Spine动画制作动作游戏
在前面的文章中,已经陆陆续续的讲解了一些使用Spine动画的细节,有了这些细节,我们已经满足了在unity中使用Spine动画制作动作游戏的技术基础. 那么,要使用Spine动画在unity中制作一款 ...
- 【Gin-API系列】实现路由分组(七)
在之前的文章介绍中我们已经完成了一个API服务的全链路请求设计.调用方式可以看Test目录的代码 // src/test/request_test.go func TestAPI_Request(t ...
- [译]如何在ASP.NET Core中实现面向切面编程(AOP)
原文地址:ASPECT ORIENTED PROGRAMMING USING PROXIES IN ASP.NET CORE 原文作者:ZANID HAYTAM 译文地址:如何在ASP.NET Cor ...
- 前端code导入excel
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HKDAS产品技术架构图
- i春秋公益赛之BFnote
题目链接:https://buuoj.cn/challenges#gyctf_2020_bfnote 首先检查程序开的保护: 发现程序只开了canary和NX保护,接下来查看IDA反汇编出来的为代码, ...
- JS语法_集合
数组方法 forEach // no-log Array.prototype.forEach_ = function (cb) { let len = this.length for (let i = ...
- Appium自动化Android环境搭建
前言: 本系列教程用于个人经验记录,用于他人借鉴,提供一定参考价值.经常会有一种感觉,工具或技术在某一阶段使用比较熟练,过一段时间就可能会遗忘,俗话说好记性不如烂笔头,以此记录. appium简介 ...
- Table内部实现2
这一节介绍Lua唯一的数据结构table,相对于大部分语言提供数组和字典两种类型,Lua将其合二为一,颇为精巧的实现了table. table充分体现了Lua语言的特点,用最简练的语法表达丰富的信息, ...
- 漏洞扫描工具acunetix12会遇到的问题
1.如果安装好之后,打开工具时显示无法访问,首先去看任务管理器当中,acunetix的服务是否启动了 2.如果忘记了账号密码,可以在安装目录下,双击ChangePassword.exe进行重置密码