查看Android/CyanogenMod 发烧笔记的源代码
←
Android/CyanogenMod 发烧笔记
跳转到:
导航
,
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
== 探索你的手机系统 == 正常的系统里,您用“文件管理器”是看不到你整天用的手机系统的是个啥样的(类似看不到window 下的 C:\windows 文件夹的内容),也就看看管理管理“我的文档”下面的内容 要想看到、甚至精简你的整个系统,有两种主要方法: 1. ROOT 获取系统管理员权限,然后使用 Root Explorer 这个APP去访问根目录、去 /system/app 下删除出厂系统里删不了流氓APP(通过“设置”-->“系统设置”-->“应用”),比如 “米币”,“系统更新” 等等 2. 使用调试工具 ADB,ADB 是Android官方提供给开发者的一种调试工具,很容易使用,可以随心所欲地控制、修改你的手机系统。Android 的好处就是,人人都能通过简单的学习,自由地修改你的系统。当然,ADB 要发挥真正的威力,也得先 ROOT <br> === ROOT === ROOT 就是获取手机的管理员权限,拥有控制、修改自己系统的自由 没有ROOT的系统,/system 目录是只读的,没有写权限,也就不能绞杀(删除)厂商预装在 /system/app 目录下的应用(多数为绑架用户的流氓应用) 出厂的手机系统,对 ROOT 权限的封锁,集中在: * 默认使用非ROOT权限用户。“adb shell” 进入系统的,实际手机端运行了 /sbin/adbd 这个进程(Note2上对应用户是 shell,uid=2000);APP 运行时,其对应的用户则是 u0_aN(N是个整型值,动态分配),这些用户都没有管理员权限,也就不能修改系统 * 对关键系统目录(如 "/","/system")挂载为只读文件系统 * 对必须要进行读写的目录(比如 "/data"),虽将其挂载为可读写的文件系统,但也封杀普通用户的写权限,甚至读权限也不给 * 系统没有 sudo, su 这些有可能提升权限的应用程序 http://en.wikipedia.org/wiki/Android_rooting <br><br> ==== MI2s ROOT ==== 下载 ROOT 包:http://vdisk.weibo.com/s/dn5OZrwllvkJ 运行“系统更新”-》菜单键-》“选择安装包”安装此ROOT包即可 <br><br> === ADB === ADB 本是Android SDK(APP 开发环境)内置的调试工具,可以通过 USB/WiFi 连接手机,获取ROOT权限,执行 shell 命令,上传下载数据等。ADB 功能强大,是骨灰级发烧友杀人越货之必备良器 Google 有独立的包,1MB 左右,根据你的平台选用相应的包即可。 <pre> http://dl.google.com/android/repository/platform-tools_r19-linux.zip http://dl.google.com/android/repository/platform-tools_r19-windows.zip http://dl.google.com/android/repository/platform-tools_r19-macosx.zip </pre> 比如 WINDOWS 下,解压 zip 包后,把 adb.exe AdbWinApi.dll AdbWinUsbApi.dll 拷贝到 C:\WINDOWS 下 (省得改环境变量) 然后打开“运行”,输入cmd,回车,开启一个命令行窗口,输入 adb devices,如果你安装了手机的 USB 驱动,在手机里 “设置” --> “开发者选项” --> “USB调试模式” 打开的话,你就能看到 <pre> adb devices List of devices attached 32334071DA1D00EC device </pre> 表明 adb 已经发现手机设备了 运行 adb shell 则会获得一个 shell,你就可以像在 Linux 中一样了 <pre> adb shell root@android:/ # id uid=0(root) gid=0(root) root@android:/ # cat /proc/version Linux version 3.0.52-Semaphore_JB_2.6.1sv (stratosk@semaphore.gr) (gcc version 4.7.3 20121001 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2012.10-20121022 - Linaro GCC 2012.10) ) #313 PREEMPT Sun Nov 25 20:47:09 EET 2012 root@android:/ # cat /proc/cpuinfo Processor : ARMv7 Processor rev 2 (v7l) BogoMIPS : 99.26 Features : swp half thumb fastmult vfp edsp thumbee neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x2 CPU part : 0xc08 CPU revision : 2 Hardware : aries Revision : 0030 Serial : 32334071da1d00ec root@android:/ # free -m total used free shared buffers Mem: 401084 395532 5552 0 1648 -/+ buffers: 393884 7200 Swap: 0 0 0 </pre> 更多信息输出,可参考 [[MIUI V5 在老机三星 T959 上的第一眼]] 备份手机的装机应用到 t959-system-app/ 目录下(用户自己装的应用,位于 /data/app 下): <pre> $ adb pull /system/app t959-system-app/ pull: building file list... pull: /system/app/YellowPage.apk -> t959-system-app/YellowPage.apk pull: /system/app/WeatherProvider.apk -> t959-system-app/WeatherProvider.apk pull: /system/app/Weather.apk -> t959-system-app/Weather.apk ...... ...... </pre> 对于系统的装机应用,adb uninstall 是移除不了的,得直接进 shell,手动删除之: <pre> $ adb uninstall /system/app/LiveWallpapers.apk Failure $ adb shell root@android:/ # cd /system/app/ root@android:/system/app # rm LiveWallpapers.apk root@android:/system/app # ls LiveWallpapers.apk LiveWallpapers.apk: No such file or directory </pre> 还有其他强大的命令: <pre> adb shell am # 强大的 Activity Manager adb shell dumpstate adb shell dumpsys adb shell ime list adb reboot recovery # 进入恢复模式 </pre> <br><br> === fastboot === ADB 的连接需要手机启动进入系统,手机在进入 Android 系统后,启动了一个 adbd 的守护进程,PC端的 adb 就是通过 USB线或者WiFi 与 adbd 之间交互的。因此当手机不能进入Android系统后,比如只停留在bootloader(类似于PC的BIOS)阶段的时候咋办呢? platform-tools 包里也提供一个非常有用的工具: fastboot,可以在手机进入 bootloader后与手机建立连接 <pre> $ adb reboot-bootloader $ fastboot devices $ fastboot oem unlock # 解锁 bootloader $ fastboot oem get-bootinfo </pre> <br><br> === 清理顽固流氓 === ROM 中不能从正常途径卸载的装机应用(如米币,小米商城等),一般都可以ROOT后,用 RootExplorer 直接从 /system/app/ 中删除即可 但有些顽固的流氓应用隐藏很深,比如 MIUI V5 自带的病毒扫描(腾讯提供),你根本找不到他的APK包在哪,运行他实时用 adb shell ps 查看,你会发现:系统并没有新的可疑进程 ==== MIUI V5的病毒扫描去除 ==== 连上USB线到PC,手机系统“设置”里打开 “USB调试”, 打开病毒扫描应用,只有在其扫描的过程中,你用 top 才能发现 com.android.settings 这个关键系统应用的CPU占有率太异常了: <pre> $ adb shell top -n 1 -d 1 -m 10 -t User 27%, System 13%, IOW 0%, IRQ 0% User 29 + Nice 0 + Sys 14 + Idle 64 + IOW 0 + IRQ 0 + SIRQ 0 = 107 PID TID PR CPU% S VSS RSS PCY UID Thread Proc 3020 3020 0 21% S 334328K 75816K fg system ndroid.settings com.android.settings 6120 6120 0 7% R 1240K 600K root top top 185 332 0 3% S 44376K 23560K fg system SurfaceFlinger /system/bin/surfaceflinger 6109 6109 0 1% S 0K 0K root kworker/u:2 6114 6114 0 1% S 0K 0K root kworker/u:3 185 185 0 1% S 44376K 23560K fg system surfaceflinger /system/bin/surfaceflinger 185 765 0 0% S 44376K 23560K fg system Binder_3 /system/bin/surfaceflinger 4293 4293 0 0% S 0K 0K root kworker/0:0 185 360 0 0% S 44376K 23560K fg system Binder_1 /system/bin/surfaceflinger 185 358 0 0% S 44376K 23560K fg system EventThread /system/bin/surfaceflinger </pre> 在不开病毒扫描时,大部分情形下com.android.settings 的CPU占有为0% 因此,这个病毒扫描应该隐藏在 com.android.settings 这个关键系统应用中: <pre> $ adb shell dumpstate | grep -i virusscan Service com.android.settings.VirusScanService: Service com.android.settings.VirusScanService: 4: [2013-12-13 19:26:08.228] executeForLastInsertedRowId took 1ms - succeeded, sql="INSERT INTO applications ('_id', 'name', 'description', 'package', 'class', 'icon', 'launch_count', 'last_resume_time') VALUES (?, ?, ?, ?, ?, ?, COALESCE(?, 0), COALESCE(?, 0));", bindArgs=[null, "病毒扫描", "应用", "com.android.settings", "com.android.settings.VirusScanActivity", "android.resource://com.android.settings/drawable/virus_scan_icon", 27,1386933816654] 41246fb8 com.android.settings/.VirusScanActivity filter 41247298 41247698 com.android.settings/.VirusScanService filter 41247898 41247698 com.android.settings/.VirusScanService filter 41247898 com.android.settings.VirusScanAppActivity com.android.settings.VirusScanActivity: 1 starts, 500-750ms=1 com.android.settings.VirusScanActivity: 22 starts, 500-750ms=10, 750-1000ms=4 com.android.settings.VirusScanAppActivity: 14 starts, 0-250ms=6, 250-500ms=5, 500-750ms=1, 750-1000ms=1, >=5000ms=1 </pre> 原来确实丫是隐藏在核心应用 com.android.settings(设置)中的,真TM够毒的! 其是 com.android.settings 的一个 Activity,完整的 INTENT 为: "com.android.settings/.VirusScanAppActivity" 下面来探究探究: <pre> # 启动病毒扫描 $ adb shell am start -n "com.android.settings/.VirusScanAppActivity" Starting: Intent { cmp=com.android.settings/.VirusScanAppActivity } # 启动对应的 Service $ adb shell am startservice -n "com.android.settings/.VirusScanService" Starting service: Intent { cmp=com.android.settings/.VirusScanService } $ adb shell am kill-all com.android.settings # 此两条命令执行后,病毒扫描图标就从桌面消失了 $ adb shell pm disable -n "com.android.settings/.VirusScanActivity" Component {com.android.settings/com.android.settings.VirusScanActivity} new state: disabled $ adb shell pm disable -n "com.android.settings/.VirusScanAppActivity" Component {com.android.settings/com.android.settings.VirusScanAppActivity} new state: disabled #再想启动的话就会: $ adb shell am start -n "com.android.settings/.VirusScanAppActivity" Starting: Intent { cmp=com.android.settings/.VirusScanAppActivity } Error type 3 Error: Activity class {com.android.settings/com.android.settings.VirusScanAppActivity} does not exist. #当然,这只是软件关闭,其代码还是在 /system/app/Settings.apk 这个 APK 包中,如要彻底清除,可尝试解开 APK 包,移除 VirusScanApp.java 的代码 </pre> 更多 adb am 用法参考:http://developer.android.com/tools/help/adb.html#am <br><br> ==== MIUI V5文件管理中的快盘 ==== 另外一个隐藏较深的是“快盘”,这也是一个怎么也找不到其 APK 文件的主,但点其图标运行后,会进入 “文件管理器“ 的一个界面,也是其 Activity <pre> $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.activity.TaskManagerActivity" Component {com.android.fileexplorer/cn.kuaipan.android.activity.TaskManagerActivity} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.activity.SettingActivity" Component {com.android.fileexplorer/cn.kuaipan.android.activity.SettingActivity} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.activity.BindToKuaipanAccountActivity" Component {com.android.fileexplorer/cn.kuaipan.android.activity.BindToKuaipanAccountActivity} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.activity.TrashBoxActivity" Component {com.android.fileexplorer/cn.kuaipan.android.activity.TrashBoxActivity} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.activity.SignInSuccessActivity" Component {com.android.fileexplorer/cn.kuaipan.android.activity.SignInSuccessActivity} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.common.TaskReceiver" Component {com.android.fileexplorer/cn.kuaipan.android.common.TaskReceiver} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.common.TaskIntentService" Component {com.android.fileexplorer/cn.kuaipan.android.common.TaskIntentService} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.service.MediaMountedReceiver" Component {com.android.fileexplorer/cn.kuaipan.android.service.MediaMountedReceiver} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.service.NetChangeReceiver" Component {com.android.fileexplorer/cn.kuaipan.android.service.NetChangeReceiver} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.provider.KssProvider" Component {com.android.fileexplorer/cn.kuaipan.android.provider.KssProvider} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/.push.PushReceiver" Component {com.android.fileexplorer/com.android.fileexplorer.push.PushReceiver} new state: disabled $ adb shell pm disable -n "com.android.fileexplorer/cn.kuaipan.android.service.KscService" Component {com.android.fileexplorer/cn.kuaipan.android.service.KscService} new state: disabled </pre> <br><br> ==== MIUI V5 for T959 内存优化 ==== 先用 procrank 看一下系统内存消耗的标兵: <pre> $ adb shell procrank PID Vss Rss Pss Uss cmdline 569 67964K 67640K 42262K 37880K com.miui.home 380 51772K 51664K 33407K 30756K system_server 466 54340K 54112K 30944K 25204K com.android.systemui 609 46116K 46016K 27193K 25420K android.process.acore 539 42080K 42000K 23471K 21508K com.android.phone 6567 38012K 37948K 17785K 15404K com.android.settings 7456 40488K 40400K 16591K 13972K com.android.deskclock 184 28088K 25088K 16134K 8316K /system/bin/surfaceflinger 526 26720K 26644K 12945K 12036K com.baidu.input 9315 32776K 32676K 11651K 9468K com.google.process.gapps 617 22164K 22068K 7656K 6668K com.lbe.security.miui:service 9635 28288K 28176K 7221K 5132K com.android.mms 8928 26444K 26324K 7100K 4324K com.android.systemui:screenshot 6469 25136K 25020K 6600K 5080K android.process.media 9682 26584K 26464K 5776K 3708K com.miui.weather2 9653 25740K 25628K 5580K 3756K com.miui.voiceassist:remote 932 17872K 17752K 5126K 4380K com.miui.providers.weather 9723 20892K 20776K 4514K 3308K com.android.thememanager 9704 24316K 24196K 4352K 2636K com.miui.providers.datahub 547 16220K 16100K 3790K 3040K com.lbe.security.miui 187 3756K 3756K 2889K 2756K /system/bin/mediaserver 185 15468K 15316K 2580K 1716K zygote 9750 1464K 1464K 1242K 1228K procrank 224 1548K 1548K 1064K 1048K /system/xbin/shelld 179 1532K 1532K 1057K 1036K /system/bin/servicemanager 193 1516K 1516K 1048K 1032K /system/bin/tvoutserver 362 1412K 1412K 966K 944K /system/bin/rild 186 1136K 1136K 787K 776K /system/bin/drmserver 182 1004K 1004K 732K 712K /system/bin/netd 189 712K 712K 390K 364K /system/bin/installd 190 652K 624K 388K 376K /system/bin/keystore 464 560K 560K 357K 352K /system/bin/bluetoothd 180 576K 576K 346K 336K /system/bin/vold 9748 428K 424K 214K 200K /system/bin/sh 196 212K 212K 192K 192K /sbin/adbd 188 368K 364K 177K 172K /system/bin/dbus-daemon 1 244K 244K 172K 128K /init 147 184K 184K 136K 92K /sbin/ueventd 183 308K 304K 124K 120K /system/bin/debuggerd 438 296K 296K 116K 112K /system/bin/brcm_patchram_plus 192 288K 288K 112K 108K /system/vendor/bin/geomagneticd 1224 244K 240K 91K 88K wdaemon ------ ------ ------ 305300K 255884K TOTAL RAM: 401084K total, 22256K free, 1256K buffers, 77896K cached, 3464K shmem, 12748K slab </pre> 主要参数解析如下: * Vss = virtual set size * Rss = resident set size * Pss = proportional set size -----> 此进程与其他进程的共享内存 * Uss = unique set size -----> 这是进程独占内存,进程终止这个内存会被系统释放 Vss 和 Rss 的实际用途不大 可以将一些不用的进程,直接 kill 掉即可 <br><br> === 构筑防火墙 === 严防非授权访问网络,上传敏感数据。防火墙这东西属于最后一道防线,不能信任任何APP市场上架的应用。最好自己编译,自己review 代码,防止后门。 主要的技术手段在内核层面,使用 iptables 进行控制 有自由版本的 Android 实现,代码在 github 上: $ git clone git://github.com/ukanth/afwall 或者 $ git clone git://github.com/skullone/android_firewall <br><br>
返回到
Android/CyanogenMod 发烧笔记
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面