Android常见目录
学习目标:了解安卓常见目录data/data目录
存放用户app数据的目录,每个app都有自己的目录,以包名命名
这是一个私有目录,app只能访问各自的目录,除非root权限
该目录下的文件,要pull到电脑上来,通常先拷贝到sdcard目录
data/app目录
用户安卓的app存放在这个目录下
data/local/tmp
临时目录,权限比较大
system/app目录
存放系统自带的app
system/lib、system/lib64目录
存放app用到的系统so文件
system/bin目录
存放shell命令
sd卡目录
不管手机有没有存储卡都会有这个目录
app操作sdka目录需要申请权限,不同系统版本要求不同
访问以下几个目录效果都一样
/sdcard -> /storage/self/primary/mnt/sdcard/storage/emulated/0
Linux权限
学习目标:了解Linux权限ls -l 显示的内容lrwxrexrwx 1 root root 8 May 29 04:09 sbin -> usr/bin
权限第0位确定文件类型
-是普通文件
l是链接,后面会用 -> 打印出指向的真实文件路径
d是目录,相当于windows的文件夹
c是设备文件,鼠标,键盘,/dev
第1-3位确定所有者拥有该文件的权限
第4-6位确定所属组拥有该文件的权限
第7-9位确定其他用户组拥有该文件的权限
权限表示方式rwx代表可读可写可执行,-代表没有权限
权限还可以用数字来表示,r=4,w=2,x=1
目录和文件都是有权限的,操作目录和文件都需要有对应的权限才能操作
其他说明lrwxrexrwx 1 root root 8 May 29 04:09 sbin -> usr/bin
root 用户
root 组
8 文件大小(字节):如果是文件夹,显示4096字节;如果是软链接,显示指向的真实文件路径字节数
May 29 04:09 最后修改日期
sbin 文件名/软链接名
- ...
Android查看包名的几种方式
学习目标:学会查看app报名的几种方法反编译查看清单文件使用反编译工具如jadx,GDA,jeb等工具查看
通过shell命令获取包名和入口类名使用以下命令时,要先进入手机shell
dumpsys window windows | grep mFocusedAppdumpsys window windows | grep mCurrentFoucsdumpsys window | grep mCurrentFocus
grep是Linux中的命令,所以要进入shell才可以使用
在我的设备中,只有
dumpsys window | grep mCurrentFoucs
可以使用
还有一组命令,直接在windows命令行中使用
adb shell dumpsys window windows | findstr mFoucsedAppadb shell dumpsys window windows | findstr mCurrentFocusadb shell dumpsys window | findstr mCurrentFocus
同样只有
adb shell dumps ...
adb与Linux常用命令
学习目标:学会使用adb与Linux的常见命令以及logcat的使用方法adbadb的作用
可以方便的在电脑端通过命令操控手机
很多手机自动化指令也是通过adb来实现的
adb的构成
client端,在电脑上,负责发送adb命令
daemon守护进程(adbd),在手机上,负责接收和执行adb命令
server端,在电脑上,负责管理client和daemon之间的通讯
adb工作原理
client端将命令发送给server端
serever端会将命令发送给daemon端
将执行结果返回给server端
server端将结果再返回给client端
adb常用命令adb/ adb help/ adb --help 查看adb帮助文档adb version 显示adb版本和路径adb devices 显示连接的设备列表adb install xxx.apk 通过adb安装appadb install pr xxx.apk 覆盖安装adb uninstall 包名 通过adb卸载appadb push xxx xxx 推送电脑的文件到手机adb pull xxx 拉取手机 ...
bp
跳台阶一个楼梯共有 nn 级台阶,每次可以走一级或者两级,问从第 00 级台阶走到第 nn 级台阶一共有多少种方案。
输入格式共一行,包含一个整数 nn。
输出格式共一行,包含一个整数,表示方案数。
数据范围1≤n≤151≤n≤15
输入样例:5
输出样例:8
#include<bits/stdc++.h>using namespace std;int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; int temp1=1, temp2=2, newF=0; for(int i=3; i<=n; i++){ newF=temp1+temp2; temp1=temp2; temp2=newF; } cout<<newF; return 0;}
记忆化搜索
#include<bits/stdc++.h>using namespace std;const int N=20;int dfs(i ...
32位汇编
基本框架include irvine32.inc.data.codemain procexitmain endpend main
定义变量定义int型数组和变量c语言写法:
int chess[8][8]={0};int a[8],b[15],c[15];int sum=0;
汇编写法:(dd(Define Double Word)用来定义 32 位(4 个字节)的数据)
include irvine32.inc.data chess dd 64 dup(0) a dd 8 dup(0) b dd 15 dup(0) c dd 15 dup(0) sum dd 0 str1 db "八皇后摆法总数:", 0 str2 db "第", 0 str3 db "种可能摆法:", 0 str4 db " ", 0 str5 db "按回车键继续...", 0
基本指令rep stosdmov eax, 0xFFFFFFFF ; 将EAX设置为要存储的值mov edi ...
Pxile6的刷机与Root
学习目标:Root Piexl6刷机预备知识刷机的分类
线刷 官方包(刷的比较彻底,可以刷bootloader、radio)
卡刷 lineage os(双清)
刷机包的分类
线刷包/工厂镜像包
OTA全量包/OTA增量包
谷歌手机工厂镜像 https://developers.google.com/android/images?hl=zh-cn
线刷包的组成
bootloader
radio
android系统
官方系统与aosp系统区别
官方系统有google全家桶,aosp系统默认是没有的,需要另外集成
官方系统是user版本,aops系统可以是user、userdebug或eng,现在一般都使用user版本
联系
不管是官方系统还是aosp系统,刷机步骤都是一样的
开启开发者选项进入到设置 -> 关于手机 -> 点击7次版本号
开启usb调试进入到设置 -> 系统 -> 开发者选项 -> 启用USB调试 -> 信任设备
adb的简单使用首先要将adb添加到环境变量中
adb devices 查看电脑连接 ...
BFS
走迷宫给定一个 n×mn×m 的二维整数数组,用来表示一个迷宫,数组中只包含 00 或 11,其中 00 表示可以走的路,11 表示不可通过的墙壁。
最初,有一个人位于左上角 (1,1)(1,1) 处,已知该人每次可以向上、下、左、右任意一个方向移动一个位置。
请问,该人从左上角移动至右下角 (n,m)(n,m) 处,至少需要移动多少次。
数据保证 (1,1)(1,1) 处和 (n,m)(n,m) 处的数字为 00,且一定至少存在一条通路。
输入格式第一行包含两个整数 nn 和 mm。
接下来 nn 行,每行包含 mm 个整数(00 或 11),表示完整的二维数组迷宫。
输出格式输出一个整数,表示从左上角移动至右下角的最少移动次数。
数据范围1≤n,m≤1001≤n,m≤100
输入样例:5 50 1 0 0 00 1 0 1 00 0 0 0 00 1 1 1 00 0 0 1 0
输出样例:8
#include<bits/stdc++.h>#define x first#define y secondusing namespace std;const int N = ...
双指针与前缀和
最长连续不重复子序列给定一个长度为 nn 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。
输入格式第一行包含整数 nn。
第二行包含 nn 个整数(均在 0∼1050∼105 范围内),表示整数序列。
输出格式共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。
数据范围1≤n≤1051≤n≤105
输入样例:51 2 2 3 5
输出样例:3
#include<bits/stdc++.h>using namespace std;typedef long long ll;const ll N=1e6;ll q[N], c[N];ll n;int res;int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=1; i<=n; i++){ cin>>q[i]; } for(int i=1, j=1; i<=n; i++) ...
二分
模板数组: 3 4 4 5 5 5 6 7
找到第一个大于5的元素
// 数组下标从1开始bool isBlue(int x){ if(x<=5) return true; else return false;}int l=1, r=9; while(l+1!=r){ int mid = (l+r)/2; if(isBlue(q[mid])){ l=mid; }else{ r=mid; }}return r;
找到最后一个小于等于5的元素的位置(下标)
// 数组下标从0开始bool isBlude(int x){ if(x<=5) return true; else return false;}int l=-1, r=8;while(l+1!=r){ int mid = (l+r)>>1; if(isBlue(q[mid])){ l=mi ...