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 -r 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 ...

