本人电话比较少,但是使用乐w100刷的miui 2.3.7版本的通讯录却没有显示sim联系人一项,只有导入功能,非常不方便,
于是想找一个另外的rom来替换通讯录,
发现在安装时,却提示,证书不能用.
在网上找了很多,都说修改了系统的apk不能重新签名,
否则无法安装,
要么就说修改时别改那个xml,然后把原来的签名文件移回.
但是这些做法无法满足我的要求.
经过测试,发现miui 2.3.7只要把rom.zip中的/system/app所有apk使用自己的签名(此签名我是在网上下载的,没有自己制作,应该是那个testkey),全部签名.
然后再到/system/framework/framework-res.apk,也用它来签名一下,
那么即可使用其它rom的apk进行签名也安装替换了,至于能不能使用,得看那个apk了.
但是能确保它能安装.
至于其它rom,其它签名文件,我就不太清楚是否可以这样弄.
至少我用的3gw100的是这样,
那么也不用自己完全的编译一个rom这么麻烦.
如我下载的
然后在网上再下载了个
是乐娃还是什么的
# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=MIUI
ro.build.display.id=MIUI-12.12.12
再下载个
v880-052.zip的rom,把它的通讯录与保存apk用相同的key签名,安装后可以使用.
# begin build properties
# autogenerated by buildinfo.sh
ro.build.id=GWK74
ro.build.display.id=GWK74
ro.build.version.incremental=eng.geno.20120302.012745
ro.build.version.sdk=10
ro.build.version.codename=REL
ro.build.version.release=2.3.7
ro.build.date=Fri Mar 2 01:28:58 CST 2012
ro.build.date.utc=0
这是安装时的结果,成功安装.
点击apk时,发现可以正常使用
把要安装程序/目录拖入这里,回车安装
直接回车返回主菜单
C:\Users\Administrator\Desktop\ContactsProvider.apk
1468 KB/s (150334 bytes in 0.100s)
pkg: /data/local/tmp/ContactsProvider.apk
Success
完成.
把要安装程序/目录拖入这里,回车安装
直接回车返回主菜单
C:\Users\Administrator\Desktop\Contacts.apk
1656 KB/s (561502 bytes in 0.331s)
pkg: /data/local/tmp/Contacts.apk
Success
完成.
把要安装程序/目录拖入这里,回车安装
直接回车返回主菜单
工具箱.bat
-----------
echo off set batD=%~dp0 set adb=%batD%bin\adb.exe set signJar=%batD%bin\sign.jar set binDir=%batD%bin\ set pem=%binDir%certificate.x509.pem set amfdec=%binDir%AXMLPrinter2.jar set smali=%binDir%smali.jar set bsmali=%binDir%baksmali.jar set apkt=%binDir%apktool.jar set unyaffs=%binDir%unyaffs.exe title 工具箱 call :javaTest goto eof_javaTest :javaTest set ea=%ERRORLEVEL% echo 运行环境值当前是:%ea% java.exe -version set eb=%ERRORLEVEL% echo 测试java环境后,运行环境值是:%eb% if %ea% EQU %eb% ( cls goto :EOF ) else ( echo 运行环境测试前后不同[java出错影响]:%ea% != %eb% echo 证明没有java环境,无法进行签名,请安装java再使用 ) goto :EOF :eof_javaTest if not exist "%signJar%" ( echo 签名工具["%signJar%"]不存在,签名功能将会失败 ) set key=%binDir%key.pk8 if NOT Exist %key% ( echo 用于给rom压缩包签名的key文件不存在:%key% echo 签名功能将不可用 echo 本文件使用的是testkey,网上下载即可 ) if NOT Exist %pem% ( echo 用于给rom压缩包签名的pem文件不存在:%pem% echo 签名功能将不可用 echo 本文件使用的是testkey,网上下载即可 ) if NOT Exist %adb% ( echo 连接手机的adb不存在:%adb% echo 可以在网上下载adb.exe及相关的dll echo 连接手机功能将失败 ) if not exist "%amfdec%" ( echo 反编译工具不存在:"%amfdec%" echo 请在网上下载 echo 否则无法反编apk中的AndroidManifest.xml ) if not exist "%smali%" ( echo 反编译odex工具不存在:"%smali%" echo 请在网上下载 echo 否则无法反编odex成classes.dex ) if not exist "%bsmali%" ( echo 反编译odex工具不存在:"%bsmali%" echo 请在网上下载 echo 否则无法反编odex成classes.dex ) if not exist "%apkt%" ( echo 反编译apk工具不存在:"%apkt%" echo 请在网上下载 echo 否则无法反编apk ) if not exist "%unyaffs%" ( echo 解压yaffs分区img工具不存在:"%unyaffs%" echo 请在网上下载 echo 否则无法解压 ) :ch title 选择操作 set called=0 set ch=exit echo 工具箱 echo. echo 序号 对应任务 echo. echo 1 adb echo 2 logcat echo 3 重启 echo 4 上传文件 echo 5 签名 echo 6 安装apk echo 7 卸载apk echo 8 反编AndroidManifest.xml echo 9 odex转apk包内classes.dex echo 10 apk解包 echo 11 img解包 echo 其它 退出 echo. echo 请输入上面序号数字后,回车即可完成操作的选择 echo. set /p ch= :eof_ch cls set /a ch*=1 call :callLabel%ch% IF %called% NEQ 0 goto ch echo. echo 本程序即将退出...稍息自动关闭窗口 ping 127.0.0.1 -n 2 >nul GOTO :EOF exit :callLabel1 set called=1 echo 直接回车查看命令提示 echo. echo 或输入指令 echo. set /p mc= "%adb%" %mc% pause goto :EOF :eof_callLabel1 :callLabel2 set called=1 echo 请输入过滤 echo. echo 语法: *:E com.qidizi.test:W echo. set /p sp= "%adb%" logcat %sp% goto :EOF :eof_callLabel1 :callLabel3 set called=1 echo 正常模式,直接回车 echo. echo recovery,输入r回车 echo. echo bootloader,输入b回车 echo. set /p w= "%adb%" kill-server if "%w%" == "r" ( "%adb%" reboot recovery goto :EOF ) if "%w%" == "b" ( "%adb%" adb reboot-bootloader goto :EOF ) "%adb%" reboot goto :EOF :eof_callLabel1 :callLabel4 set called=1 :selectfile echo. echo 请把文件/文件夹拖到本bat文件上再放开来上传 echo. set fp= set /p fp= if "%fp%" == "" ( goto :EOF ) if not exist "%fp%" ( echo "%fp%" 路径不存在 goto selectfile ) :updesc echo. echo 输入手机中存放的绝对路径,留空默认是/sdcard echo. set des= set /p des= if "%des%"=="" ( echo 使用默认的路径 set des=/sdcard ) call :upload "%fp%" "%des%" goto :EOF :upload set src=%~f1 set svd=%~2 set svn=%~nx1 title 上传中... echo 进行中...%fp% echo on "%adb%" push "%fp%" "%svd%/%svn%" echo off echo 完成. title 上传完成 :eof_upload goto :EOF goto :EOF :eof_callLabel1 :callLabel5 set called=1 echo. echo 拖入需要签名文件(zip/apk)或所属的目录 echo. set sfp= set /p sfp= if "%sfp%"=="" ( goto :EOF ) if not exist "%sfp%" ( echo 路径不存在:"%sfp%" goto callLabel5 ) call :pathCheck "%sfp%" if "%pathType%" == "f" ( call :subcallcallLabel5 "%sfp%" ) else ( for /f "usebackq" %%p in (`dir "%sfp%" /a:-d /b /s`) do ( call :subcallcallLabel5 "%%p" ) ) goto callLabel5 :subcallcallLabel5 set ssfp=%~1 set ssfpx=%~x1 if /i "%ssfpx%" == ".zip" goto doSign if /i "%ssfpx%" == ".apk" goto doSign echo %ssfp%不是zip也不是apk,忽略 goto :EOF :doSign set ssfpD=%~dp1 set ssfpn=%~n1 title 签名进行中... echo 签名...%ssfp% ren "%ssfp%" "%ssfpn%.tmp.apk" java -jar "%signJar%" "%pem%" "%key%" "%ssfpD%%ssfpn%.tmp.apk" "%ssfp%" del /f /q "%ssfpD%%ssfpn%.tmp.apk" echo 完成. title 完成 goto :EOF :eof_subcallcallLabel5 goto :EOF :eof_callLabel5 :callLabel6 set called=1 echo 把要安装程序/目录拖入这里,回车安装 echo. echo 直接回车返回主菜单 echo. set s= set /p s= if "%s%"=="" ( goto :EOF ) if not exist "%s%" ( echo "%s%"不存在 goto callLabel6 ) call :pathCheck "%s%" if "%pathType%" == "f" ( call :callLabel6Sub "%s%" ) else ( for /f "usebackq" %%p in (`dir "%s%" /a:-d /b /s `) do ( call :callLabel6Sub "%%p" ) ) echo 完成. goto callLabel6 goto :EOF :callLabel6Sub set fp=%~f1 set fx=%~x1 if /i not "%fx%" == ".apk" ( echo %fp%不是apk,忽略 goto :EOF ) "%adb%" install -r "%fp%" goto :EOF :eof_callLabel6Sub :eof_callLabel6 :callLabel7 set called=1 echo 输入要卸载的包名 echo. echo 直接回车返回主菜单 echo. set s= set /p s= if "%s%"=="" ( goto :EOF ) echo 卸载...%s% "%adb%" uninstall "%s%" echo 完成. goto callLabel7 goto :EOF :eof_callLabel7 :callLabel8 set called=1 echo 拖入AndroidManifest.xml开始 echo. echo 直接回车返回主菜单 echo. set s8= set /p s8= if "%s8%"=="" ( goto :EOF ) if not exit "%s8%" ( echo 不存在"%s8%" goto callLabel8 ) java -jar "%amfdec%" "%s8%" > "%temp%AndroidManifest.xml" echo 完成. explorer "%temp%AndroidManifest.xml" goto callLabel8 goto :EOF :eof_callLabel8 :callLabel9 set called=1 echo 请拖入odex文件回车 echo. echo 直接回车返回主菜单 echo. set s9= set /p s9= if "" == "%s9%" ( goto :EOF ) if not exist "%s9%" ( echo "%s9%"不存在 goto callLabel9 ) call :s9sub "%s9%" goto callLabel9 :s9sub set s=%~f1 set dexD=%~dp1 set dexN=%~nx1 if not exit "%dexD%" ( echo odex的apk所属rom,zip中/system/framework全部文件不存在 echo 请把里面的所有文件拖入到以下目录即可(反编依赖它们) echo %dexD%framework\ goto callLabel9 ) :apic echo. echo 输入此apk的api版本号 echo. echo 版本号对应关系(有更新查找网上) echo. echo 系统版本 -- api号 echo Android 4.2, 4.2.2 17 echo Android 4.1, 4.1.1 16 echo Android 4.0.3, 4.0.4 15 echo Android 4.0, 4.0.1, 4.0.2 14 echo Android 3.2 13 echo Android 3.1.x 12 echo Android 3.0.x 11 echo Android 2.3.4 echo Android 2.3.3 10 echo Android 2.3.2 echo Android 2.3.1 echo Android 2.3 9 echo Android 2.2.x 8 echo Android 2.1.x 7 echo Android 2.0.1 6 echo Android 2.0 5 echo Android 1.6 4 echo Android 1.5 3 echo Android 1.1 2 echo Android 1.0 1 echo. echo 请输入api号 echo. set apiLevel= set /p apiLevel= set /a apiLevel*=1 if %apiLevel% LSS 1 ( echo 输入api号不正确 goto apic ) echo 反编odex... java -jar "%bsmali%" -d "%dexD%framework" -a %apiLevel% -x "%s%" -o "%dexD%%dexN%.dec" java -jar "%smali%" -o "%dexD%%dexN%.dex" -a %apiLevel% "%dexD%%dexN%.dec" rmdir /s /q "%dexD%%dexN%.dec" echo 已经反编生成:%dexD%%dexN%.dex goto callLabel9 :eof_s9sub goto :EOF :eof_callLabel9 :callLabel10 set called=1 echo 请拖入apk文件回车 echo. echo 直接回车返回主菜单 echo. set i10= set /p i10= if "" == "%i10%" ( goto :EOF ) if not exist "%i10%" ( echo "%i10%"不存在 goto callLabel10 ) set dec=%TEMP%\tmp.apk.unpak\ if not exist "%dec%" mkdir "%dec%" cd "%dec%" java -jar "%apkt%" d "%i10%" echo 完成. explorer.exe "%dec%" goto callLabel10 goto :EOF :eof_callLabel10 :callLabel11 set called=1 echo. echo 并非所有的img都能解压,只有yaffs分区的才行 echo. echo 请拖入img文件回车 echo. echo 直接回车返回主菜单 echo. set i10= set /p i10= if "" == "%i10%" ( goto :EOF ) if not exist "%i10%" ( echo "%i10%"不存在 goto callLabel11 ) set dec=%TEMP%\tmp.img.unpak\ if not exist "%dec%" mkdir "%dec%" cd "%dec%" "%unyaffs%" "%i10%" echo 完成. explorer.exe "%dec%" goto callLabel11 goto :EOF :eof_callLabel11 :pathCheck set p=%~f1 if not exist "%p%" ( set pathType=e goto :EOF ) rem 文件夹 set pathType=d for /f "usebackq" %%i in (`dir "%p%" /b /a:-d /s^|findstr /i /p /x /b /l /n "%p%"`) do ( set pathType=f rem 文件 ) goto :EOF
一键刷机.bat
@echo off set batDir=%~dp0 CD "%batDir%" set binDir=%batDir%bin\ title 检测必须文件... set lup=%binDir%update-binary if not exist %lup% ( echo 找不到刷机二进制文件:%lup% echo 此文件提取自rom的zip包/META-INF/com/google/android/update-binary goto stop ) set signJar=%binDir%sign.jar if NOT Exist %signJar% ( echo rom压缩包签名的jar不存在:%signJar% echo 本工具名字叫:signapk,后缀名是jar,可在网络上下载到 goto stop ) set pem=%binDir%certificate.x509.pem if NOT Exist %pem% ( echo 用于给rom压缩包签名的证书文件不存在:%pem% echo 本文件使用的是testkey,网上下载即可 goto stop ) set key=%binDir%key.pk8 if NOT Exist %key% ( echo 用于给rom压缩包签名的key文件不存在:%key% echo 本文件使用的是testkey,网上下载即可 goto stop ) set adb=%binDir%adb.exe if NOT Exist %adb% ( echo 连接手机的adb不存在:%adb% echo 可以在网上下载adb.exe及相关的dll goto stop ) echo. title 检测java... echo 下面检测是否有java使用环境 call :javaTest goto sign :javaTest set ea=%ERRORLEVEL% echo 运行环境值当前是:%ea% java.exe -version set eb=%ERRORLEVEL% echo 测试java环境后,运行环境值是:%eb% if %ea% EQU %eb% ( echo 运行环境测试前后相同[没有出错]:%ea% == %eb% echo 证明java环境正常 ) else ( echo 运行环境测试前后不同[java出错影响]:%ea% != %eb% echo 证明没有java环境,无法进行签名,请安装java再使用 pause exit exit ) :eof_javaTest goto :EOF :sign echo. title 准备签名... echo java正常,准备签名 set romSign=%TEMP%\android.rom.sign.zip if exist %romSign% ( echo. echo 发现一个签过名的rom:%romSign% title 有rom,请确认? echo. echo 直接使用? 输入任意字符回车 echo. echo 忽略重签直接回车 set /p tos= if not "%tos%" == "" goto eof_signRom ) :signRom echo. title rom的zip? echo 请拖入需签名并刷机的rom的zip包 echo. echo 如果想跳此步骤,直接使用手机上的/sdcard/upload.zip,请直接回车跳过 echo. set /p romZip= if "" == "%romZip%" ( echo 你选择跳过签名,进入连线手机.. goto recovery ) if not exist "%romZip%" ( echo rom的zip包路径不存在,请重新选择 goto signRom ) echo 对rom签名... title rom签名... java -jar "%signJar%" "%pem%" "%key%" "%romZip%" "%romSign%" echo. echo 签名完成. :eof_signRom :recovery title 将刷机? echo 签名后的rom文件是:%romSign%. echo. echo 程序将暂停几秒 echo. echo 如果你想自己手动移动签名后的rom到手机sdcard中 echo 请现在关掉本程序,移动好再运行 echo. echo 或是按键盘上的pause键暂停住下运行 echo (双击运行的bat才有效,使用powercmd之类外壳可能无法暂停) echo. echo pause暂停后,回车即可继续 echo. title 待选择中.. echo 程序延时5秒中(于%TIME%).. ping 127.0.0.1 -n 5 >nul echo 程序恢复运行 title 连线... echo 重置adb服务到usb模式,或防止连接服务假死 %adb% kill-server %adb% start-server :checkDev echo. echo 等待服务连接手机... title 查找/连手机中... echo 延时5秒,待adb恢复中[于%TIME%].. ping 127.0.0.1 -n 5 >nul echo 查找是否有处于recovery状态的手机 %adb% devices|find "recovery" echo 结果意义: echo 0: 表示,有此状态的手机连结着; echo 1: 表示,无此状态的手机; echo 查找结果: echo %ERRORLEVEL% if %ERRORLEVEL% EQU 0 ( echo. echo 发现有手机处于recovery模式,进入上传步骤 goto startUpload ) echo 未找到处于recovery状态的手机 echo. echo 查找是否有正常连线状态的手机 %adb% devices|find " device" echo 结果意义: echo 0: 表示,有此状态的手机连结着; echo 1: 表示,无此状态的手机; echo 查找结果: echo %ERRORLEVEL% if %ERRORLEVEL% EQU 0 ( echo. echo 发现有手机处于正常连接模式 echo. echo 重启手机到recovery状态... %adb% reboot recovery echo 指令发送完成,延时30秒等待手机进入recovery状态[于%TIME%]... title 重启,待连线... ping 127.0.0.1 -n 30 > nul goto checkDev ) title 无连线手机? echo 未找到任何连线手机 echo 如果你确认已经连线手机 echo 请检查连接接口是否正常 echo 或是尝试拨出重新连接 echo. echo 稍后重试... echo 无连线手机,延时30秒后重试[于%TIME%]... ping 127.0.0.1 -n 30 > nul goto checkDev :startUpload title 挂载sdcard... echo 连上手机,将挂载sdcard... echo 尝试挂载sdcard echo. "%adb%" shell mount /sdcard |find /I "can't find" echo 结果意义: echo 0: 表示,挂载失败; echo 1: 表示,挂载成功; echo 查找结果: echo %ERRORLEVEL% if %ERRORLEVEL% EQU 0 ( echo 挂载分区/sdcard失败,才能挂载,本挂载方式不适用你recovery,请修改 goto stop ) echo 挂载sdcard成功,准备上传rom的zip到sdcard中 title 挂上sdcard,查upload.zip set sdZip=/sdcard/update.zip :checkZip "%adb%" shell ls %sdZip%|find /I "No such" echo 结果意义: echo 0: 表示,卡中无rom的zip,需要上传; echo 1: 表示,卡存在zip; echo 查找结果: echo %ERRORLEVEL% if %ERRORLEVEL% NEQ 0 ( title 卡有upload.zip echo 发现sdcard上已经存在upload.zip echo 不再上传刚才签名过的rom文件,用卡中的 goto eof_startUpload ) echo 卡无upload.zip :reup echo 准备上传签名好的rom... if not exist "%romSign%" ( echo 待上传rom不存在:%romSign% goto stop ) title rom将上传... echo 正在上传 "%adb%" push "%romSign%" %sdZip% echo 结果意义: echo 0: 表示,上传成功; echo 1: 表示,失败; echo 查找结果: echo %ERRORLEVEL% if %ERRORLEVEL% NEQ 0 ( echo %romSign%" echo 上传到 echo %sdZip% echo 失败. goto stop ) :eof_startUpload echo. echo 验证zip "%adb%" shell ls %sdZip%|find /I "No such" echo 结果意义: echo 0: 表示,卡中无rom的zip,需要上传; echo 1: 表示,卡存在zip; echo 查找结果: echo %ERRORLEVEL% if %ERRORLEVEL% EQU 0 ( title 卡无upload.zip,重传. echo 卡无rom文件/上传zip失败,需要重新上传 goto reup ) echo 检测到手机上的/sdcard/upload.zip echo 将上传刷机文件 title 将上传刷机文件 set pup=/tmp/update-binary title 上传刷机bin... echo 上传用于更新的二进制文件%lup%到手机%pup%,并设置成可运行 %adb% push "%lup%" %pup% %adb% shell chmod 0777 %pup% echo. echo 检查刷机执行文件是否上传好 echo. %adb% shell ls %pup%|find /I "No such" echo 结果意义: echo 0: 表示,上传失败; echo 1: 表示,上传成功; echo 查找结果: echo %ERRORLEVEL% if %ERRORLEVEL% EQU 0 ( echo 刷机执行文件上传失败 goto stop ) echo 刷机执行文件上传成功 title 将刷机... echo 准备工作完成,下面准备开始刷机 set log=%TEMP%\android_recovery_update_log.txt echo. >"%log%" echo 刷机日志于 %DATE% %TIME%>>%log% title 刷机中... echo 正在刷机中...请稍候... %adb% shell "%pup%" 2 2 %sdZip% >> %log% echo. title 刷机结束,重启.. echo 刷机完成. explorer "%log%" echo 删除刷机文件%sdZip% %adb% shell rm "%sdZip%" echo 重启设备到正常模式 title 重启中... echo. %adb% reboot if not exist "%batDir%app" ( echo 应用文件夹不存在,不安装应用 goto stop ) :instApp title 将安装应用... echo 准备安装"%batDir%app"下的应用. echo 查找是否有正常连线状态的手机 %adb% devices|find " device" echo 结果意义: echo 0: 表示,有此状态的手机连结着; echo 1: 表示,无此状态的手机; echo 查找结果: echo %ERRORLEVEL% if %ERRORLEVEL% NEQ 0 ( title 无连线手机? echo 未找到任何连线手机 echo 你把手机拨出了? echo 如果你确认已经连线手机 echo 请检查连接接口是否正常 echo 或是尝试拨出重新连接 echo. echo 稍后重试... echo 无连线手机,延时30秒后重试[于%TIME%]... ping 127.0.0.1 -n 30 > nul goto instApp ) title 安装应用... echo. echo 连线成功,安装应用程序... for /r %batDir%app %%a in (*.apk) do ( echo %%a "%adb%" install -r -s "%%a" ) title 应用安装完成 echo 应用安装完成 echo 所有的操作完成 :stop title 操作结束 echo 运行结束 pause