编译后应该选哪个class文件反编译刷机

Android源码编译后 - CSDN博客
Android源码编译后
在out/target/product/generic下生成的三个镜像文件:ramdisk.img,system.img,userdata.img以及它们对应的目录树root,system,data。ramdisk.img是根文件系统,system.img包括了主要的包、库等文件,userdata.img包括了一些用户数据,android加载这3个映像文件后,会把 system和 userdata分别加载到 ramdisk文件系统中的system和
data目录下。
  三个镜像文件及其三个目录树之间的生成关系是我们进行ROM制作的基础,下面将做详细介绍。 Ramdisk镜像是采用cpio打包,gzip压缩的。用file验证:
  # file ramdisk.img
  输出:
  # ramdisk.img: gzip compressed data, from Unix
  为了便于说明问题,我们将ramdisk.img拷贝到其它一个目录,然后按以下步骤将ramdisk.img还原为目录树:
  # mv ramdisk.img ramdisk.img.gz
  # gunzip ramdisk.img.gz
  # mkdir ramdisk
  #cd ramdisk
  # cpio –i –F ../ramdisk.img
  这样,就得到一个完整的ramdisk目录,与out/target/product/generic/root对比后,我们发现它们是一样的内容。
  通过执行以下的操作,我们可由目录树再生成ramdisk镜像
  # cd ramdisk
  # find . | cpio -o -H newc | gzip & ../ramdisk-new.img 这两个镜像都属于yaffs2文件格式,生成方式是一样的。我们就以system.img为例来说明。
  System.img && system目录树 所需工具unyaffs, 下载地址
  # mkdir system
  # cd system
  # unyaffs ../system.img
  system目录树 && system.img
  所需工具 mkyaffs2image,Android源码编译后会生成该工具,在 out/host/linux-x86/bin 目录下。
  命令格式:
  # mkyaffs2image system/ system_new.img
  了解以上方法的意义在于,我们可以对镜像文件镜像修改,定制,以符合自己的需求。 网上有很多制作Android ROM的教程,这里罗列一些链接:
  北理工的陈罡写的两篇文章,是我目前发现的最好的教程,写的非常详细 这两篇文章参考了国外论坛的几个经典教程: _Unpack%2C_Edit%2C_and_Re-Pack_Boot_Images 国内还有一篇文章写的也不错,这篇文章更侧重于制作类似Patch的ROM包 这里基于自己的理解和测试,总结了一些方法步骤。 Android 的ROM包通常称为update.zip包,你可以到上下载现成的.zip包。要学习ROM包的制作,我们可以从这样一个zip包开始。解开zip包后,通常有这样一些内容:
boot.img 文件 这是编译内核源代码生成的内核映像,然后与android源码编译出来的ramdisk.img一起通过mkbootimg工具创建出来的,图省事的朋友也可以从网上其他的刷机包里面拷贝一个能用的出来即可,基本上都差不多。 META-INF 目录 这个目录是手工创建的,主要用来存放一个升级脚本update-script(这个脚本的内容与system目录中包含的文件有很大关联)以及签名。 system 目录 这个目录就是编译android的平台源代码生成的 要创建自己的ROM,我们通常会涉及到以下的一些工作:
  1. 编译内核生成内核映像。但一般情况下,我们没有必要自己去编,直接从刷机包里面取出一个就可以。譬如,你要做一个2.2版本的升级包。可以到网上找一个与自己机型相匹配的刷机包,从里面取出相应的kernel.img。
  2. ramdisk.img的修改。ramdisk.img 是根文件系统,Ugg boots,里面包含了启动配置脚本。
  3. update-script的修改。
  4. System的修改。
  我们先做个简单的测试工作,来为后面更复杂的工作做好铺垫。测试内容为:先对zip进行解包,然后分别在ramdisk和system的根目录下添加一个小文件,接着,生成新的ROM,并验证ROM是否可用。
  详细的步骤可以参考 html。这里要指出的是,这篇文章以及网上许多类似网站提到的方法都是针对HTC G1或 Nexus one的。而我在测试的时候,用的是HTC G3 Hero。以上的方法导致的一个后果是,重新打包后再烧录,机器无法正常启动,adb shell也无法登陆。后来在国外的一篇博客上看到了对此问题的说明,问题的根源很简单,从G3开始,打包的时候需要指定“--base”参数。对于Hero,参数为”--base 0x”,但对于其它型号的机器,”--base&要设定为多少,需要参考内核代码的实现。
  解包打包可用两个脚本完成unpack-bootimg.pl, repack-bootimg.pl。其中打包脚本用到的mkbootimg工具,在out/host/linux-x86/bin目录下。unpack-bootimg.pl可直接将boot.img生成内核镜像boot.img-kernel和ramdisk目录树boot.img-ramdisk。repack-bootimg.pl可将boot.img-kernel和boot.img-ramdisk重新生成boot.img。
  在解包后,我们在ramdisk和system目录下,各添加一个测试小文件(譬如叫mytest)。做完这些开始组包,重新生成update.zip。到这里我们的工作并没有完全结束,还有最后的一步——签名。签名需要用到签名工具testsign.jar,这是一个基于java 1.6版本的工具。在编译Android源码的时候,我们强调要用java 1.5。在这里,我们必须切换到1.6版本。切换办法见这里。 1)重新生成boot.img
  将前面解包得到的boot.img-ramdisk 和 编译源码后out/target/product/generic/下的root目录树放在一个目录下,然后用repack-bootimg.pl重新生成boot.img
  2) 创建一个目录 myupdate,将上面生成的boot.img放到这个目录下
  3)将编译Android后,out/target/product/generic/生成的system目录树拷贝到myupdate目录
  4)在myupdate目录下创建update-script脚本目录
  # mkdir -p META-INF/com/google/android
  5)删除system/bin目录下的“符号链接”,创建update-script脚本
  update-script脚本的语法可以参考 这里 。研究原有的update-script脚本,我们可以大致看出update-script负责文件删除拷贝,权限设置,符号链接创建等工作。我们可以在原有update-script的基础上进行修改以得到我们自己的update-script。这里,我们要注意的是,要保证update-script的link创建成功,必须把/system/bin下的link删除。我们可以用一个脚本来做这个工作 delsymlink。我修改后与自己编译的Android2.2 system目录树相匹配的脚本。
  6)重新打包并签名
  7)自制ROM下载时报错
  在试验过程中,我经常遇到如下的报错
  Can't open/sdcard/download/update.hiapk
  问题原因:当 update-script 中有命令操作错误,脚本就会停止,并报这个错误,解决的办法就是修正脚本。你可以从这个错误前面的提示,知道脚本哪一行出错了。 很多时候,你并不需要创建一个完整的ROM包。你需要的只是,添加删除或修改一些功能(譬如你仅想添加一个应用,或者你想添加busybox工具)。我们可以参考这里,来实现这个目的。
  我用一个简单的例子来说明这个过程。该例子是在system目录下添加一个mytest文件,同时创建一个指向这个文件的符合链接mylink。以下是过程:
  1) 创建patch_update目录,并在该目录下执行
  # mkdir system
  # mkdir –p META-INF/com/google/android
  2) 在system目录下生成mytest文件
  3)在 META-INF/com/google/android 创建如下的update-script
  show_progress 0.1 0
  copy_dir PACKAGE:system SYSTEM:
  symlink mytest SYSTEM:mylink
  set_perm 0 0 0755 SYSTEM:mytest
  4) 打包签名
  如果前面的3步曲,你已经很好的掌握了,应付你的日常工作应该没有太大的问题。但要成为真正的ROM高手,你还有很多东西要修炼。你要了解整个启动过程,内核编译,Android源码的编译及配置,文件系统及启动配置。。。
  HTC的官网上有一篇文章 这里 详细介绍了镜像包及烧机方法。通常用两种烧录方式:recovery模式,fastboot模式。通过一些组合键,可以进入烧录模式。以HTC G3 Hero为例,“Home + Power”同时按,可以进入Recovery模式,“Back + Power”可以进入fastboot模式。
  Recovery模式比较常用,它相当菜单界面的下载模式。直接把前面所述的update.zip文件放到SD卡上,然后通过在机器上操作控制菜单,就可完成烧录。Fastboot是基于命令行的较低级的下载模式,它可直接烧录.img文件。Fastboot工具也在out/host/linux-x86/bin目录下。
  在我测试过程中,发现fastboot模式无法烧录,当我试图烧录system.img的时候,出现下面的出错信息:
  # fastboot flash system system.img
  # writing 'system'... INFOsignature checking...
  FAILED (remote: signature verify fail)
  在网上查了之后,发现这和签名有关系,SPL要重新刷一下才可,默认是SPL-on,即检测签名,改成SPL-off,就不会出现这个问题,目前没有什么好办法来处理这个问题。好在recovery模式已经能很好地满足需求了,可以先放弃fastboot。
  如果你通过recovery模式烧录后,发现系统无法正常启动,没有关系,recovery还是可以进去的。在recovery模式下,你可以通过adb shell登陆机器。可能你进去后,发现SD卡并没有挂接上来(执行mount就可以查看挂载情况)。但recovry模式要求update.zip必须放在SD卡根目录下,怎么办?很简单,执行“mount –a”就可把SD卡区域挂接上来。如果这招也不行,还有一招,就是把userdata分区手动挂接到sdcard目录,这样就骗过了recovery。
  # mount /dev/mtdblock5 /sdcard
  然后,你再用adb push把新的update.zip拷贝到sdcard目录,重新进行烧录。一般来说,在执行“Flash zip from sdcard”之前,都要先进行Wipe操作,以清除旧的用户数据。
  如何更新recovery?
  可以参考 Hero更新成了recovery-RA-hero-v1.6.2-blue.img。不过,一般无特别的需求,最好不要更新recovery。毕竟有一定风险,一不小心就成了板砖。
  知名的Android论坛: 国内:
  国外: 很多国内论坛的文章都是参考或翻译 的
  国内一个很好的博客: ,有很多对Android的研究专题
  国外一个很好的博客: ,这个博客帮我解决了在烧录 HTC G3 HERO的时候,自己打的ROM包烧录后无法启动的问题
  Android 文件系统
   itrd/
   ;a=f=Documentation/filesystems/ramfs-rootfs-in itramfs.txt
   s/312.html
  Android init脚本的语法
   =2237012
本文已收录于以下专栏:
相关文章推荐
[startrelatedarticles]
{relateddes}
{relateviewcount}
[endrelatedarticles]
[startrelatedarticlesdownload]
{relatesize}
[endrelatedarticlesdownload]
[startrelatedarticlesad1]
{relateddes}
{relateviewcount}
[endrelatedarticlesad1]
[startrelatedarticlesad2]
[endrelatedarticlesad2]
他的最新文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)后使用快捷导航没有帐号?
其他登录方式
—— 新手入门 ——
—— 智友精华 ——
查看: 43393|回复: 17
在线时间365 小时最后登录阅读权限40UID384094注册时间积分2417精华3
, 积分 2417, 距离下一级还需 583 积分
主题帖子 金币721 元 智豆7 点
本帖最后由
20:39 编辑
手机普及率现在来说非常之高,大街小巷,大人小孩,大妈大伯,使用手机是很正常的事了,信息的时代,手机充当着很重要的角色,而高端的手机我们称为智能手机,他们带有操作系统,功能完备,可以为日常工作提供许多便利,第三方软件资源丰富,更加为智能手机增加了许许多多的可用性,可玩性,无论你在任何地方,何时,都会拿手机或是看书,或是上网,上QQ,看新闻,发微博,发资讯,等等。
& && &&&手机量大了,越来越智能了,手机的危险就来了,手机病毒就是基中一项,手机中毒,玩手机中出现手机慢了,卡了,死机了,你们能想到的第一个词语就是刷机,刷机是我们玩家所称谓的,刷机就等同与更新,每一台手机的高端手机的出厂都设计了所有的系统软件,有些功能强点的多加了辅助功能,有些功能弱点就是少了点辅助功能,但每台手机的系统版本,俗称固件,厂家都会在一定时间内进行更新,比如从1.0更新到了2.0,当然,行货的机子可以拿到售后让他们更新,而更多的水货手机客他们如何更新呢!万事不求人,我们自已来了,经过一定时间的研究和众多高手的帮助,以前很专业的刷机方法,很神秘的刷机平台,相继破解出来,解放了许许多多只能由高手才可以胜任的刷机工具变的简单,我们只要下下固件,连连电脑,就可以为我们自已的爱机刷高版本,以支持更多的可玩性,以及更稳定的运行!
& && & 刷机是有必要的,每次手机版本的更新,必定会修复上个版本的不足之处也会增加上个版本的稳定性与安全性!刷机在什么情况下有必要,很多时候取决与你对手机的玩法,中毒,死机,卡,这个不要说必定要刷机了,玩家更要刷了了,为了追求更多可玩性,他们在等不来新版本的发布,就自个DIY,这个中也出现许多高手,各方各面的,这些人为手机这个行业的推动起了不可估量的作用!
下面我们说一下刷机的一些常识:
软件性质:
诺基亚官方推荐的刷机方式在线刷机,而凤凰刷机是第三方维修时候使用的软件,在此告诉大家,诺基亚客服所使用的刷机方式也是用凤凰刷机而非官方在线刷机。有时也可能也会用在线刷机,但大部分都是用凤凰这个平台来刷机的!
软件适用:
官方在线刷机只适用与行货手机,移动定制版,因为我们需要使用中文,如果你想使用英文你如果是水货也是可以在线更新的,水货机在强改CODE识别刷机后也有可能变成假砖头或出现不稳定死机频繁,凤凰刷机适用与任何硬件没有损坏的手机,即使是刷机失败,机器变成板砖,也是能够用凤凰强刷救活的。
刷机过程:
在线刷机的过程为:识别手机--下载更新(自动匹配固件)--更新完毕。
凤凰刷机的过程为:识别手机--选择版本(可手动选择固件)--刷机完毕。
还有其它第三方刷机软件,比如JAF,ub,ATF等等都和凤凰刷机过程一样!
软件原理:
官方刷机的原理是:通过CODE识别手机固件--读取固件内容--使用相应的内容替换原有内容--更新完毕。
而凤凰刷机的原理则是:识别手机(注意:是手机不是固件)--用户辨别手机型号和选择固件--重写手机固件--刷机完毕。
刷机对比:
官方采用覆盖式的刷机方式,所以,原先有的还是有,原先没或则还是没有或则增加改变,适用于原本手机内核完整并且没有特殊需要的人,而凤凰刷机则是先清空,再重写,刷出来的机器没有多余的东西,所以用凤凰刷出来的手机反应速度是比用官方刷出来的要快的,而且就算是内核不完整(体现为授权证书或功能缺少)的机器,也是能够通过凤凰刷机来补完内核的。
刷机成功率:
这个是大家最关心的问题,在此,我可以大言不惭的告诉大家,如果大家手机硬件没有存在问题并能小心严格的照着手机巴士发布的教程去做,那么刷机的成功率如下:
凤凰刷机成功率:100%(推荐)
官方刷机成功率:100%
您的贴子很精彩!希望再分享您的下一贴!
您的付出是论坛的动力,感谢您一直支持
感谢精彩分享
总评分:&金币 + 1&
在线时间2419 小时最后登录阅读权限55UID81079注册时间积分8313精华2
, 积分 8313, 距离下一级还需 3687 积分
主题帖子 金币3777 元 智豆3 点
没看懂 为什么要刷机
在线时间1613 小时最后登录阅读权限0UID624注册时间积分3098精华8
头像被屏蔽
FOX 毛查查
主题帖子 金币428 元 智豆7 点
提示: 作者被禁止或删除 内容自动屏蔽
在线时间7 小时最后登录阅读权限10UID1887525注册时间积分36精华0
, 积分 36, 距离下一级还需 14 积分
主题帖子 金币106 元 智豆0 点
哎呀&&又好好的上了一课&&被扫盲了
在线时间1 小时最后登录阅读权限10UID2119131注册时间积分2精华0
, 积分 2, 距离下一级还需 3 积分
主题帖子 金币31 元 智豆0 点
刷机又不能把原系统里我不需要的东西删去,所以,没事我就不刷了。还是刷牙吧/
在线时间38 小时最后登录阅读权限15UID2030748注册时间积分93精华0
, 积分 93, 距离下一级还需 7 积分
主题帖子 金币752 元 智豆0 点
感谢楼主的分享,凤凰刷机大陆可链接吗?
在线时间5 小时最后登录阅读权限10UID2093098注册时间积分10精华0
, 积分 10, 距离下一级还需 10 积分
主题帖子 金币24 元 智豆0 点
凤凰刷机是什么东西??
在线时间101 小时最后登录阅读权限20UID1942855注册时间积分214精华0
, 积分 214, 距离下一级还需 186 积分
主题帖子 金币1586 元 智豆0 点
本人过来看看。& &想学点东西。
在线时间2 小时最后登录阅读权限10UID2272605注册时间积分7精华0
, 积分 7, 距离下一级还需 13 积分
主题帖子 金币20 元 智豆0 点
能用一句话说明麽?看了半天 没太明白
在线时间6 小时最后登录阅读权限10UID2324315注册时间积分11精华0
, 积分 11, 距离下一级还需 9 积分
主题帖子 金币24 元 智豆0 点
智友移动版
刷机又不能把原系统里我不需要的东西删去,所以,没事我就不刷了。还是刷牙吧/
调整规则,限制刷楼党,vivo蓝 X20手机等你领,只要参与就有机会!安卓4.1源码编译【刷机吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:93,645贴子:
安卓4.1源码编译收藏
google官方发布了Android 4.1 Jelly Bean的源码,本人第一时间将源码托了下来(托了一个通宵),今天又花了一早上时间编译ROM并刷到自己的Galaxy Nexus中,虽说Android 4.1已经用了一个多星期了,但是作为Android开发者和爱好者,体验源码下载、编译、刷机的整个过程还是很有意义的,然而在编译和刷机过程中也遇到了一些问题,晚上抽了点时间将整个过程总结一下,同时也希望能帮助到想通过自己编译刷机的朋友,废话不多说了~~切入正题。
1、编译环境搭建,本人使用的是ubuntu 12.04,下面所有过程都基于该平台。具体可参考:
2、下载Android 4.1源码,参考:,源码下载过程中经常会遇到下载失败的情况,非常浪费时间,所以编写一个失败重传的脚本可以减少很多不必要的麻烦。将下面的shell脚本保存为download.sh文件放到源代码目录中,执行./download.sh开始下载(替代文档中最后一步repo sync,其余步骤必须按照文档中介绍的一步一步来)
[java] view plaincopy#!/bin/bash
echo &======start repo sync======&repo sync
while [ $? == 1 ]; do
echo &======sync failed, re-sync again======&
3、接下来准备开始编译rom,可参考,首先输入source ./build/envsetup.sh,然后输入lunch full_maguro-user(不同平台参数不一样,具体参考文档说明),接下来执行make -j4编译rom(根据机器CPU的核心数量来设定参数),下来就是漫长的等待过程了(笔者机器性能不给力,整个编译过程大概花费了3个半小时)。如果make -j4的执行过程中一开始提示jdk版本不对,那么按照下面步骤来解决:从Oracle官方下载jdk1.6.0_33.bin
执行sudo chmod a+x /home/jamie/jdk/jdk1.6.0_33.bin(注意这里的目录和你机器上的目录是不一样的)sudo ./home/jamie/jdk/jdk1.6.0_33.binsudo gedit /etc/profile,尾部添加
#set java environment
export JAVA_HOME=/home/jamie/jdk1.6.0_33
export JRE_HOME=/home/jamie/jdk1.6.0_31/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH执行source /etc/profilesudo update-alternatives --install /usr/bin/java java /home/jamie/jdk1.6.0_33/bin/java 300sudo update-alternatives --install /usr/bin/javac javac /home/jamie/jdk1.6.0_33/bin/javac 300sudo update-alternatives --config java选择所需要的jdk版本
4、编译完成后会在android_souce/out/target/product/maguro/中生成一大堆img文件,这就是编译生成的刷机rom了
5、按照google官方文档的步骤接下来就是刷机了,然而结果很悲剧,由于官方文档针对的是模拟器,而笔者编译的是Galaxy Nexus,出现刷完直接黑屏无法启动的情况,突然想到昨天网上看到google发布了Android 4.1的二进制文件,而这些文件正好是蓝牙、wifi、显卡等驱动,google将这些驱动单独提供下载,并未集成到源码中,所以我们需要将其编译进rom中,步骤如下:打开,下载Galaxy Nexus对应的4个文件并解压到源代码的目录,解压出来的4个文件是4个shell脚本,分别为extract-broadcom-maguro.sh,extract-imgtec-maguro.sh,extract-invensense-maguro.sh,extract-samsung-maguro.sh 分别执行这4个脚本,执行期间会要求输入“I ACCEPT”
重新执行make -j4进行编译,这次编译过程时间很短
6、完成上面的驱动集成后,输入 cd /home/jamie/android_source/out/host/linux-x86/bin(该目录下有fastboot文件), 然后输入sudo ./fastboot flashall -w开始刷机,一般情况下这一步会出现以下错误提示:neither -p product specified nor ANDROID_PRODUCT_OUT set,原因是没有设置rom的位置,解决方法要么使用-p参数,后面跟着rom的位置,或者配置环境变量ANDROID_PRODUCT_OUT,过程如下:输入sudo gedit /etc/profile,在尾部添加export ANDROID_PRODUCT_OUT=/home/jamie/android_source/out/target/product/maguro,保存并退出然后输入source /etc/profile使刚设置的环境变量立即生效。
7、最后等待刷机完成,完成后手机会自动重启,大功告成!
刷机-让安卓Android刷机变得更简单,安全,快捷的刷机,搭配全图文刷机教程,全自动安装驱动,新版刷机工具官方下载!
大神啊 我找着来了一遍编译成功了 还缺驱动。。
链接无法访问了。。 大神留个q后面交流
登录百度帐号推荐应用

我要回帖

更多关于 class文件反编译 的文章

 

随机推荐