1. 我向学习安卓系统移植。
如何制作ROM
有点玩机兴趣的android爱好者,应该对custom ROM这种东西都不陌生。我介绍root权限获取的时候,就直接用的MoDaCo Custom ROM作为例子。适用于Hero比较好的ROM还有不少,比如Drizzy’s Custom Hero ROM等等,都可以在XDA上找到。肯定有不少朋友感到很好奇,这些ROM都是怎么做的。考虑到中文社区相关资料比较少,在这里抛砖引玉,大概原理介绍一下。
对于第三方ROM来讲,通常都包括两部分,一个recovery image,一个update.zip。而大多数的第三方ROM的特色,就是加入了很多东西,比如superuser程序来获得root权限,busybox来扩充命令行下的功能,各种各样的配置文件或者小工具,比如默认打开中文locale,等等。这些看似神奇的改动,都是在 update.zip里面搞的,custom recovery image的主要作用就是引导用户的操作,比如让你先备份,再应用update.zip,再重启之类的操作。由于custom recovery image和update.zip的耦合性很小,所以不少custom ROM直接都用同一个custom recovery image,这个好像是出自MoDaCo作者之手。再然后,我之前的文章已经有对 recovery image的简单讲解,所以这里,我主要介绍一下update.zip的制作。
如果我们直接把MoDaCo ROM中的update.zip解包,我们会发现有一个boot.img,一个data文件夹,一个system文件夹,一个META-INF文件夹。这个data文件夹放的是init.rc,而本来在系统中,init.rc就是在data目录下的。当然,两者的作用不一样,这里的init.rc主要作用是开机执行你希望执行的命令,比如MoDaCo的init.rc就是install busybox。
而值得详细说明的,就是system文件夹。MoDaCo ROM版本的system下有一系列作者希望放到系统中的工具,对于apk文件,就放到app下,工具就放到bin和xbin下,依此类推。换句话说,system或者data这个目录层次结构是取决于你自己的,你希望放的东西属于什么,应该运行在online系统的什么目录下,update.zip里面就应该是有相应的目录路径,然后东西就放在里面。
具体点,我们现在要依样画葫芦,搞一个新的update.zip,那么第一步就是首先建立一个文件夹
mkdir new-update
好,假设我新update.zip的作用就是预装我自己的一个程序,my.apk,那么,我建立对应的子目录
mkdir -p new-update/system/app
cp my.apk
这样,system目录就完成了。但是这时,update.zip的目录层次还没完,我们看MoDaCo ROM中的update.zip中有文件夹叫META-INF,这个文件夹很关键,除了根目录下的三个文件外,里面层层目录,就包括了一个文件,叫 update-script,内容如下
show_progress 0.1 0
_dir PACKAGE:system SYSTEM:
set_perm_recursive 0 0 0755 0644 SYSTEM:xbin
set_perm_recursive 0 0 0755 0644 SYSTEM:sd
set_perm 0 0 04755 SYSTEM:bin/su
set_perm 0 0 04755 SYSTEM:bin/a2sd
set_perm 0 0 04755 SYSTEM:xbin/busybox
_dir PACKAGE:data DATA
show_progress 0.2 0
format BOOT:
write_raw_image PACKAGE:boot.img BOOT:
show_progress 0.2 100
这里面的内容,大部分是针对你要做的修改设置的。比如
_dir PACKAGE:system SYSTEM:
就是把system中新增的工具拷贝到手机上,然后
set_perm_recursive 0 0 0755 0644 SYSTEM:xbin
set_perm_recursive 0 0 0755 0644 SYSTEM:sd
set_perm 0 0 04755 SYSTEM:bin/su
set_perm 0 0 04755 SYSTEM:bin/a2sd
set_perm 0 0 04755 SYSTEM:xbin/busybox
就是设置MoDaCo ROM中新增程序的权限,然后
_dir PACKAGE:data DATA:
把data下的内容(就是那个init.rc)复制到手机上,然后
format BOOT:
write_raw_image PACKAGE:boot.img BOOT:
刷boot分区。
那我们这里没有这么多新增的东西,应该怎么写呢?
_dir PACKAGE:system SYSTEM:
set_perm_recursive 0 0 04755 SYSTEM:app/my.apk
就可以了。你当然还可以做一些别的事情,比如加一个FORMAT DATA之类的^_^开个玩笑,千万别这个干,不然你的数据就全没了。
好,那么也就是说,我们要在自己的new-update目录下也建一个/META-INF/com/google/目录,然后把新的update-script扔进去。
完了么?差一点。其实如果你没有别的需求了,那么就完了,可以把下面这一小块跳过。下面这一小块,是关于boot.img的。在如何修改Android系统的Ramdisk以及boot镜像文章中,我们谈到,如果刷boot镜像有问题,就要用别的方法让系统boot我们自己的boot image了,这个别的方法,自然就是用update.zip了。MoDaCo ROM版本的update.zip也包括了一个boot.img,但是如果我们有出于各种需求自己修改的boot.img,自然就可以替换掉原来的了。当然注意,如果加了boot.img,那么update-script里面就不能漏掉
write_raw_image PACKAGE:boot.img BOOT:
这句。
好,到现在,我们的new-update目录下有
/system/app/my.apk
/META-INF/com/google/update-script
/META-INF/MANIFEST.MF
/META-INF/CERT.SF
/META-INF/CERT.RSA
boot.img
恩,那么就进入打包阶段。你可能会问,这有什么难的,直接zip一下不就得了。如果要是这么简单就好了,你打包后,必须把你的内容都sign一下,得到相应的cert,才能在fastboot模式中被承认并成功刷机。
在sign你的文件之前,先做这么几件事
打包。进入update文件夹,zip update.zip xxx xxxx xxxx xxxx xxxx。什么意思呢,就是只把你需要的文件打包,不要用./*作为参数。而且相对路径最好是在update下面,不要在外面用zip update.zip ./update/*这种命令打包
去sun网站下载最新的
下载这个文件testsign一定要用JRE1.6.0.16或者更高,我知道这个有点恶心,但是提供下载的testsigh.jar就是按照这个版本或者更高编译的,你用老版本就运行不了。
好,下下来以后,执行这个命令
~/jre1.6.0_16/bin/java -classpath testsign_path/testsign.jar testsign update.zip update-signed.zip
稍微讲解一下,java程序是最新jre下的,testsign_path是你放testsign.jar的地方,建议放到sdk的tool目录下。update是待sign文件,update-signed是指定的生成文件名。
sign执行完后,用unzip -l看,会发现
/META-INF/MANIFEST.MF
/META-INF/CERT.SF
/META-INF/CERT.RSA
2. iwlist怎么移植到android
最近在调试WIFI softap功能,发现netd源码中包含"iwpriv"相关的注释,这个工具应该会对WIFI调试非常有用,于是准备将其移植到Android上。
首先到这里下载源码,然后解压,按照网上搜出来的方法,把目录里头Makefile的CC,AR等改成交叉编译所用的,但是发现make all的时候报缺少头文件错误。用-I将头文件引入之后在ld阶段又报缺少crt0.o。折腾了半天之后依然无果,于是决定直接在目录下加个Android.mk用Android的make来编译。
一次尝试之后竟然成功了,泪流满面,以下是具体步骤:
1,在目录下cp -f wirless.29.h wirelss.h (自带的Makefile就是这么干的,根据版本选择头文件,我下载的是.29版本)
2,在目录下加入Android.mk,内容如下:
3. 如何将一台安卓手机上的软件移植到另一台手机
现在的国产品牌安卓手机一般会在系统内内置数据迁移功能,只需要将新旧手机同时开启设置好即可传输;如果没有该功能可以尝试使用第三方例如【QQ同步助手】,在登陆同一个账号之后上传到云端即可同步迁移数据。以下是具体步骤:
1、有一些安卓手机系统内置了数据迁移功能,只需要打开手机【设置】中更多设置即可看到【一键换机】或者名为【数据迁移】的功能,只需在新旧手机上分别设置好,两者就可以通过无线传输的方式实现数据的迁移,一般包括通讯录、图片、应用等数据都可以迁移到新手机上;
2、如果您的系统中没有包括这个功能,那么您就需要借助一下第三方的软件,比如说【QQ同步助手】,在新旧手机都下载好同步助手,然后使用微信或QQ号登陆,选择右上角菜单中【更多备份】,即可看到短信、通信录和软件等备份的选项,按需点击之后,就可以将旧手机的数据同步到服务器,只需在新手机上登陆相同账号即可重新同步以上的资料信息。
4. 如何移植ANDROID系统
貌似你的手机配置条件不够哦~~
就算给你移植成功了200MHz的CPU也够吃力的~
现在android手机主频都500MHz以上的~
想移植的话好多东西要学~例如SPL啊、驱动啊--这些都是要有比较强的专业知识的~
我建议你到魅族M8的论坛去看看
魅族M8就是一款从WinCE系统到android系统移植的机器~
到论坛问问里面的高手应该会有帮助~
5. Android源码是怎么移植的
2.4搭建Android SDK开发环境 上一节我们讲解了如何下载、编译Android系统及Linux内核,接下来,讲解如何搭建Android SDK开发环境,包括Eclipse下载安装、ADT插件安装、Framework源码级调试、定制Android系统等相关知识。 2.4.1 下载、安装Eclipse 说明:当前新的SDK开发环境Google采用了ADT Bundle,如果为了方便安装和下载,可以选择下载最新的ADT Bundle。 ADT Bundle 选择Linux平台即可。 首先、从Eclipse官方网站上下载EclipseIDE Classic,注意选择合适平台(在32位Ubuntu中,选择Linux 32 Bit版本): 下载完成后,解压缩,运行Eclipse:
6. 怎么移植android 7.0
安卓7.0终于来啦!相信不少人都很激动,那么,安卓7.0系统怎么样?安卓7.0系统好不好?安卓7.0系统有什么新功能?今天,小编就为大家带来Android7.0新功能介绍。
安卓7.0
当Android 7.0还叫Android N时,小编就为大家介绍过它的新功能:包括多窗口、通知中心以及系统界面和交互逻辑的更新。历经了多个版本的快速试错和迭代,Android 7.0 正式版已经正式和大家见面。
如何快速升级?
目前,Google Nexus亲儿子系列中部分机型可以吃上新鲜的牛轧糖。
Google 系完整支持升级名单如下:
Nexus 6、Nexus 9、Nexus 5X、Nexus 6P 和 Nexus Player
Pixel C
General Mobile 4G ( Android One )
较为老旧的机型虽然无法获得官方更新,但可以期待一下第三方ROM团队的移植作品,有关于这方面的资讯,就要等待更多消息了。
Google 这次依然通过“分批升级”来推送正式版 Android 7.0 更新,这导致在中国的大部分亲儿子(Nexus 手机)无法直接收到最新的系统更新推送。
不过你还有Google提供的 Beta版注册页面。只要在亲儿子中登录Google账号,再到这个页面登记Beta测试计划,就能快速收到Android 7.0更新了,而且是即点即收到更新喔。
安卓7.0
经过小编测试,现在加入Android Beta计划,直接就会收到Android 7.0正式版的推送,其中包括八月的安全性更新。
小编在这里提醒,系统更新时千万不要切换网络。因为Android会继续下载更新 ……(小编用移动网络下载了整个Beta,这是血与泪的教训。)
此外,Sony Xperia Z3用户也能通过上面的地址,找到索尼官方提供的新Android N Beta计划参与页面,但无法保证Sony Xperia Z3收到的Android 7.0是公开稳定版,也不一定能保证能参与Beta计划。
Android 7.0有什么新功能?
此次更新中最注目的是多窗口分屏功能和通知中心的改变。
1. 多窗口分屏功能
在Android 7.0中,系统原生支持多窗口功能:只要性能足够、屏幕够大,就有可能完美享受到多窗口功能了。
经过测试,绝大部分动态兼容多分辨率的app都能完美支持多窗口分屏功能(包括微信),少数应用都会直接提示“该应用不支持分屏功能”而分屏失败。Chrome、Inbox以及其他app都已经完全支持多窗口分屏。
安卓7.0
那么如何打开多窗口分屏功能呢?有两种办法。
在应用中按住多任务按钮(虚拟键排中的方形键),当前应用就会占用上/左半屏幕。
按一下多任务按钮(虚拟键排中的方形键),将需要分屏的第一个应用按住,拖动到屏幕上半部分。
开启分屏模式时,你可以选择在下半部分选择最近应用显示到第二屏幕,也可以按下主页键,回到主页选择开启一个新的应用。
关闭分屏模式也有2个办法:直接按住多任务键,系统会直接保留上/左半屏幕的应用;或者直接将中间的分割线拉向边缘。
7. 不同安卓手机之间的软件移植
首先要两个手机要想相适用,手机安卓版本是要相同的,这样才可以用,望采纳
8. Android平台Java程序可移植性问题
其实JAVA程序之所以通用是因为它为不同平台的机器都写了一个虚拟机,JVM对应不同的平台。
JAVA的跨平台的原因是:每个虚拟机读得懂编译出来的字节码
9. 如何在iOS与Android间移植APP
除了像"I am rich"这种定点打击苹果烧包族的APP外,大多数应用都会尽量覆盖包含尽可能多的用户。这就需要考虑在iOS和Android两种主流操作系统间移植的问题。如果为各个平台量身定做界面,就能让用户利用以往的使用习惯快速学习。但为多个平台设计各异的界面毕竟是需要工作量的。如何才能在跨平台移植的时候只做那些最有必要的工作呢?兵不打无准备之仗,先来看看iOS与Android间有什么差别吧。
1、物理键之返回
Android手机的基本设计思路是是把最常用的功能硬件化,所以就有了home,menu,back三个功能键(其实界面设计很简单啦,就是“用户到某个地方做某事”,所以就有了导航用的back和展开命令用的menu)。
乔老爷够狠,要求iOS设备只有一个物理键home(据说以后还会把这个键砍掉,用手势当home)。所以在iOS上,返回是通过title bar左侧的back按钮来实现的。但这样设计也有好处,因为这个back“软”键上的文本是可以改的。在这个按钮上填上上一次的题目,可以让用户明确地知道按下它会回到哪里。
2、物理键之menu
在android上,与当前页面相关的命令会收到由“menu”键唤出的菜单里。而在iOS上,这些命令会放在屏幕底部的toolbar上。这种展示方式相比android的优点是“能一目了然地看到能够对当前页面做的操作”。而在android上,必须按下menu键才能看到命令。你不希望用户在使用你的APP时肩负着把这些命令背下来的艰巨任务吧?
3、Android的加分项:通知系统
在iOS上,向用户推送信息的方式只有一种,就是alert box。这在iOS只支持单任务的时候还好说,提醒一来,哦…… 看完了就点确定。但到了多任务版本后就有点不合用了。虽然iOS的alertbox可以在用户使用某APP的时候弹出其他APP的提示,但这样未免太烦了。有时一些提醒并不需要强硬中断用户当前的操作,比如后台在下载的报纸下完了。Android有更精巧的Status Bar Notification和Toast Notification(详情可参看钟磊的手机系统消息通知设计的整理和分析和我写的如何为手机界面设计提示消息)。当要推送非紧急的消息时,Android平台可以使用更柔和的状态栏提示。
4、Android的加分项:长按操作
在Android上,当需要对一个对象采取一些操作时,可以长按,唤出相应的context menu(这是对一个项目的,如果是针对当前整个页面的操作,Android有menu物理键,iOS有toolbar)。但是在iOS平台上就不太有地方去放置针对屏幕上某一个对象的大量操作(一两个是可以的,放在项目旁边就O了)。可能在乔老爷看来,当需要对一个对象进行“炒、炸、烹、煮、蒸、熏、爆”的时候,就说明你想要的太多了。
5、iOS的加分项:右上角的快捷操作按钮
对于“右利手”用户而言,单手持机时屏幕左下角到右上角的连线是右手拇指的甜区。所以依照iOS的Guideline,当前页上最最最最最最最最最最最最最最常用的按钮应该放在titlebar的右端。
其实你会发现,清楚了这些差异之后,如何在平台间移植APP就清晰明了啦。
Android -> iOS
1、在每一级的标题栏左上角加上返回上一层的按钮。按钮名一定要是上一级的名称,不能用“返回”等无法透露回到哪里的文字。
2、由于iOS上没有menu键,所以需要将menu上的命令转化成toolbar上的图标。因此要额外绘制图标或者使用内置图标。
3、由于在iOS上没有“长按出context menu”的规则,所以需要给项目添加一个detail页面。不能在list页面操纵项目,那就再drill down一层呗。
4、由于iOS的通知方式只有alert box,所以诸如“下载完成”等提醒只能筛出重要的部分,用alert box传递。对次要提醒的设计可以看我之前的文章。
iOS -> Android
1、左上角的返回按钮拿掉。
2、工具栏上的命令可以放到menu里。
3、如果对某个对象的命令很多,可以为其设计长按的context menu
4、不是很紧急的提醒就不要用alert box了,可以换成status bar notification
5、标题栏右侧的高频按钮可以保留,这个在android上也可以通用。
其实总的来说,也就两点:
1、差异主要体现在导航方式和页面命令上,所以对于页面元素的布局基本没影响。尤其是对于全屏游戏这种基本没导航,控件又都摆在屏幕上的更是影响不大。
2、iOS对硬件的依赖更低。如果实在是小公司,赶时间,没精力跨平台移植的话,可以考虑只为iPhone设计,然后直接套到android上,凑活着也能用的。但android用户在使用时也会觉得有一点点怪怪的。
10. 如何移植定制Android 4.4
我自己是个刷机狂人,恰巧也爱好开发APP,因此对ROM移植和定制做过一些研究和了解。其实rom定制不需要多少的编程技巧(当然有基础会更好),如果你只为定制你想要的一些功能,只要进行整合再重新打包就可以了。你可能会看到在很多论坛的rom发布者并没有多少的java,c,c++知识,但他们可以弄出一些非常棒的rom。相反的如果你用过MIUI,华为的rom,Flyme等等,这很难是一个人弄出来的,需要一个团队包括产品经理、设计师、测试人员、编码人员等等。
作者:Jacky Chen
链接:https://www.hu.com/question/22554893/answer/29355697
来源:知乎
着作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。