1. Android架构图:
底层Linxu Kernel
库层LIBRARY: (SQlite、opengl|es,surfece Manager) 和 Android Delvik Vritual Machine
Application Framenwork: Activity Manager \ WiFi Manager\ Location Manager....
Applicaton : 游戏 、应用
2. Android目录结构
2.1. data 目录
/data/data 安装应用内部存储位置
/data/app 用户级别应用安装,apk原包路径
/data/anr apk anr崩溃详细信息
/data/local/tmp 临时文件路径
/data/system/ 2个文件 相当于windows注册表
系统应用在: system/app下
packages.list 相当于windows下的注册表这2个文件
com.android.smoketest 10058 0 /data/data/com.android.smoketest default none
包名 用户id 0 内部空间路径
packages.xml
权限
包名,代码路径,native库路径,权限列表
</package>
<package name="com.android.providers.telephony" codePath="/system/priv-app/TelephonyProvider" nativeLibraryPath="/system/priv-app/TelephonyProvider/lib" publicFlags="805846533" privateFlags="8" ft="162d9f6e478" it="162d9f6e478" ut="162d9f6e478" version="23" sharedUserId="1001">
<sigs count="1">
<cert index="1" key="308204a830820390a003020102020900b3998086d056cffa300d" />
</sigs>
<perms>
<item name="android.permission.WRITE_SETTINGS" granted="true" flags="0" />
</item>
</perms>
</package>
</package>
2.2. /dev 设备目录
linux 中所有硬件都会用一个文件来描述,进程运行产生的堆栈数据‘
手机中的设备比如cpu,mem
tty: 打字机终端
类似windows/控制管理器/通用串行总线控制器:windows所有通过usb接口连接所有设备都在这里有标识
2.3. mnt 挂载目录:
mnt : 挂载, android4.3 以后搬到 /storage/emulated/0
2.4. proc 目录
cpuinof: cpu信息
meminfo: 内存信息
2.5. sbin目录
sbin: 系统可执行文件(system bin)
adbd : adb 调试桥, windows上eclipse 的叫做adb , android上的 adbd
2.6.system目录
app: 系统应用,比如系统浏览器、应用市场、电话
bin: 系统可执行文件
比如: adb 命令
用记事本打开:Linux可执行文件 头 ELF | Windows是 MZ
etc/host: 类似windows的host, 配置以后可以屏蔽某一个主机,安卓中在这里配置以后也可以屏蔽一个网站
etc/permission/platform.xml: anroid 系统定义权限
font: 字体, 默认DoidScansFallback.ttf
framework: 框架层的jar包 vm.jar WindowManager 看图 ,对应安卓的第2层
lib : libGLES.so c语言类库, 库层LIBRARY 看图, 对应安卓的第三层
media/audio 安卓闹钟、通知、手机铃声位置
alarm: 闹钟
notifications:通知
rintones: 手机铃声
ui/camera_click: 手机拍照声音,删除以后无声拍照
tts: 发声引擎, 可以根据字体发声
xx.chinese.bin: 不同语言发声规则
usr:
keylout: 物理按键的按键码映射,比如老年机,有数字按键
/usr/keylout/qwery.kl
key 1 BACK back键按键吗key 1
key 2 1 1 按键码 key 2
key 3 2
key 4 3
key 5 4
2.7. xbin
xbin: bin是正常指令,xbin平时用不到的指令
sqlite3: 进入slqite数据库
su :切换root用户,平时买的手机没有, 手机root原理,把su指令写入
3. 常用Linux指令
1. adb shell:
root@generic_x86:/ # # 当前使用root用户 $: 当前普通用户
2. su : 切换超级用户
3. cd /sdcard
4. touch rm mv : 创建 、删除、 移动
5. mkdir 、 rmdir : 创建文件夹、删除
6. chomd:
root@generic_x86:cd /data/data/com.android.providers.telephony/databases
ls -l : -rw-rw---- radio radio 102400 2020-03-18 14:25 mmssms.db
chomod 777 mmssms.db [默认是660]
-rwxrwxrwx radio radio 102400 2020-03-18 14:25 mmssms.db :所有用户都可以访问联系人数据库了
linux文件、目录 和 mmssms.db 属于 telephony 用户的, android 下应用就是用户
7. sleep 秒:睡眠
8. df 罗列出所有目录空间信息
df /sdcard 罗列出指定目录空间信息
9. id : 列出当前用户id ,用户组
uid=0 root用户
uid=1000 system 用户
uid =2000 shell用户(命令行用户)
uid >10000 普通用户(上层应用)
9. ps 罗列出进程系统的
10 kill pid
11. chown 0.0 文件名: 把指定文件的拥有者修改其他用户
cd /data/local/tmp
touch aa.txt
-rw-rw-rw- root root 0 2020-03-29 03:29 aa.txt
chown 2000.2000 aa.txt : 从root用户修改为shell 用户
-rw-rw-rw- shell shell 0 2020-03-29 03:29 aa.txt :
12.
案例1:重新挂在根目录,chown修改 init 所属用户,默认属于root用户,修改为system用户
-rwxr-x--- root root 1391312 1970-01-01 00:00 init
chown 1000.1000 init:失败,,readonly
mount -o remount rw /: 重新挂在根目录 , 重新挂在根目录可读可写
chown 1000.1000 init
-rwxr-x--- system system 1391312 1970-01-01 00:00 init:修改成功
案例2: cd /system/app
mount -o remount rw /system
rm -rf Photos: 删除,可读的,删除系统内置应用
======================================================================
4. am pm monkey
am 启动服务、activity、
am start -n lanya.denganzhi.com.svgdemo/lanya.denganzhi.com.svgdemo.MainActivity: 开启指定的Acticity
am force-stop lanya.denganzhi.com.svgdemo:强制杀死
an kill lanya.denganzhi.com.svgdemo: 只能杀后台进程
pm:
pm disable 包名:冻结 指定应用
冻结以后应用在 /data/data下看不到了
pm enable 包名: 解冻
monkey 1000: 指定点击屏幕1000次
如何结束monkey:
1. ctrl+ c 结束命令跑日志
2. top |grep "monkey" : 找到monkey 编号
3. ctrl + c
monkey -p com.android.messaging 50: 测试特定包名
5. 静默安装:
1. 应用市场
2. 通过命令实现
adb push E:\atguigu\aixing.apk data/local/tmp
pm install /sdcard/aixing.apk
am start -n mk.denganzhi.com.zhiwenku/mk.denganzhi.com.zhiwenku.TestActivity: 悄悄的启动activity
pm uninstall mk.denganzhi.com.zhiwenku
rm data/local/tmp/a.apk
代码:
---------RootTools.jar 在程序中执行上面代码----------
RootTools.sendShell("pm install sdcard/flowstat.apk", 30000);
System.out.println("安装完毕");
RootTools.sendShell("am start -n com.jijian.flowstat/com.jijian.flowstat.TrafficWidgetSetting", 30000);
System.out.println("启动完毕");
RootTools.sendShell("pm uninstall com.jijian.flowstat", 30000);
System.out.println("卸载完毕");
RootTools.sendShell("rm sdcard/flowstat.apk", 30000);
System.out.println("删除完毕");
---------RootTools.jar 0权限获取短信 ----------
String path = "data/data/com.android.providers.telephony/databases/mmssms.db";
//1.修改mmssms.db的文件访问权限
try {
RootTools.sendShell("chmod 777 " + path, 30000);
} catch (Exception e) {
e.printStackTrace();
}
//2.直接打开mmssms.db数据库,查询sms表获取短信
SQLiteDatabase db = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);
Cursor cursor = db.query("sms", new String[]{"address", "body"}, null, null, null, null, null);
while(cursor.moveToNext()){
String address = cursor.getString(0);
String body = cursor.getString(1);
System.out.println(address + ";" + body);
}
//3.恢复mmssms.db的访问权限
try {
RootTools.sendShell("chmod 660 " + path, 30000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
---------RootTools.jar 切换成超级用户 ----------
try {
//执行这个指令,变成超级用户
Runtime.getRuntime().exec("su");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是RootTools 在Android Studio无法使用,研究中
--------
6. 修改字体
把ttf文件刷进img中
Android系统默认的中文字体为DroidSansFallBack.ttf
用你想使用的字体ttf文件替换掉这个文件即可
7. 修改开机动画
1.从真机中得到bootanimation.zip
2.把bootanimation.zip刷入镜像的 system/media目录下
8. 删除锁屏密码
删除data/system下的key文件
文本密码为password.key
手势密码为gesture.ke