Hello Note

  • 启动进程到在屏幕上完成Activity绘制所用的时间

API>=19 logcat过滤Displayed
adb统计 adb shell am start -S -W package/.class

  • 获取该应用的包名和activity

D:\Android\SDK\build-tools\28.0.3\aapt.exe dump badging C:\Users\86150\Desktop\boost-multidex\multidex.apk>C:\Users\86150\Desktop\boost-multidex\log.txt

  • 查看某个包的版本号

  • adb shell “dumpsys package com.x.x | grep version”

  • 定时关机

@echo off

rem
shutdown.exe -s -t 10800
exit
  • 设置代理并启动
adb root
TIMEOUT /T 1
adb remount
TIMEOUT /T 1
adb push E:\box-hosts\1\hosts  /system/etc/hosts
TIMEOUT /T 1
adb shell pm clear com.x.x.x
TIMEOUT /T 3
adb shell am start -n com.x.x.x/com.x.x.x.activity.x
TIMEOUT /T 1
  • bugreport命令
adb bugreport  ~\

app crash 的时候,系统会保存一个tombstone文件到/data/tombstones目录,
该命令会导出最近的crash相关信息,我们可以通过bugreport导出,
导出后它是一个zip包的形式.
  • 开启布局视图
adb shell setprop debug.layout true
  • kill某个进程
adb shell am force-stop com.x.x.x
TIMEOUT /T 1
  • 截屏到SD卡
adb shell screencap -p /sdcard/01.png

TIMEOUT /T 5

adb pull /sdcard/01.png

TIMEOUT /T 5
  • 抓取log
adb shell logcat -c
TIMEOUT /T 1
adb shell logcat -v time > C:\Users\86150\Desktop\log.txt
  • 清除缓存
adb shell pm clear com.x.x.x
  • 过滤指定的log
adb shell logcat -c
TIMEOUT /T 1
adb shell logcat -v time > C:\Users\86150\Desktop\log\log.txt  -s  WUEEWQAAC
  • 签名APK
D:
TIMEOUT /T 1
cd D:\Android\SDK\build-tools\29.0.3\lib
TIMEOUT /T 1
java -jar apksigner.jar sign --ks C:\key\x.keystore --ks-key-alias x.keystore --ks-pass pass:bxxxxxxx --key-pass pass:pass:bxxxxxxx  --out E:\output\test-signed-jiagu.apk E:\output\test.apk
TIMEOUT /T 1
java -jar apksigner.jar verify -v E:\output\test-signed-jiagu.apk
TIMEOUT /T 60
  • 当前视图Activity
adb shell dumpsys activity | findstr "mFocus"
  • 打开某个Activity
adb shell am start -n com.x.x.x/com.x.x.x.ZActivity
TIMEOUT /T 3
  • 查看某个包信息

adb shell dumpsys package com.examle.xx

  • 查看Android设备系统信息

adb shell cat /system/build.prop

  • 查看设备内存信息

adb shell cat /proc/meminfo

  • 查看设备中各个应用内存情况

adb shell dumpsys meminfo

  • 查看设备中单个应用的内存情况

adb shell dumpsys meminfo packagename

=================抓取网络包=====================
开始tcpdump 
adb push tcpdump /data/local/tcpdump
adb shell chmod 6755 /data/local/tcpdump
adb shell rm -r /sdcard/0919.pcap
adb shell  /data/local/tcpdump -i any -p -s 0 -w /sdcard/0919.pcap
pause
 
下载tcpdump文件到电脑 
 adb pull /sdcard/0919.pcap C:\Users\86150\Desktop\0919.pcap 

  • 获取签名信息
keytool -printcert -jarfile D:\test.apk

java -jar signapk.jar platform.x509.pem platform.pk8 a.apk  b.apk

在这里插入图片描述

Private (Clean and Dirty) RAM
私有内存,这种方式只统计了当前进程独享的内存,Private Clean和Private Dirty的总和就是当前进程的独占内存,当进程销毁时系统会回收这部分内存。
Private Dirty:是必须保存在内存中数据,如程序运行过程中的变量数据,这部分内存中的东西未成为垃圾数据之前必须一直保存在内存中
Private Clean:是从持久化文件中加载的数据,如程序执行时加载的代码,这部分内存中的数据可以丢掉,再次使用时可以再从持久化文件中再次加载。
Proportional Set Size (PSS)
比例集大小,该方式统计的内存除了进程独享内存外,还包括通过共享页面与其他进程共享的内存。共享内存的一个常见用途是在进程之间共享“代码”内存页
(加载只读可执行代码的内存区域)。比如外部库和JVM的可执行代码是存放在可以跨进程安全共享的内存区域。共享内存会根据共享进程数量分摊到各个进程中。

  • 获取所有进程的内存使用的排行榜,排行是以 Pss 的大小而排序

adb shell procrank

  • 查看设备cpu情况

adb shell dumpsys cpuinfo

  • 查看进程

adb shell ps
adb shell “ps |grep com.x.x”

-查看某个进程线程数

adb shell cat /proc/进程id/status
或者 adb shell top -m 5 前5个占用线程数大的应用

  • 截图

adb shell screencap -p /sdcard/01.png
TIMEOUT /T 5
adb pull /sdcard/01.png
TIMEOUT /T 5

  • Application,Service,Activity三者的Context的应用场景

NO1表示Application和Service可以启动一个Activity,不过需要创建一个新的task任务队列。而对于Dialog而言,只有在Activity中才能创建。
对于需要在静态内部类中使用非静态外部成员变量(如:Context、View ),可以在静态内部类中使用弱引用来引用外部类的变量来避免内存泄漏。
Applicaiton 当需要显示Dialog时,需要dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)类型,否则会出现 Caused by: android.view.WindowManager$BadTokenException: Unable to add window – token null is not for an application
在这里插入图片描述

  • adb查看过度绘制-GPU过度绘制

开启adb shell setprop debug.hwui.overdraw show
关闭adb shell setprop debug.hwui.overdraw false
原色:没有过度绘制
蓝色:1 次过度绘制
绿色:2 次过度绘制
粉色:3 次过度绘制
红色:4 次及以上过度绘制

  • adb显示布局边界

显示:setprop debug.layout true
隐藏:setprop debug.layout false
注意,执行命令后需要重新打开应用才能生效。

Android中一张图片占多大内存

系统可用内存不足和应用可用内存不足
如何使用android工具systrace进行调试
抖音 Android 性能优化系列:启动优化实践
字节码插桩
ASM 修改字节码

  • 如何查看Android apk的签名信息

1、直接查看apk的签名信息:
keytool -list -printcert -jarfile D:\test.apk
2、查看keystore的签名信息:
keytool -list -v -keystore debug.keystore
3、先将apk后缀改为.zip,然后解压,然后进入META-INF目录,找到XXX.RSA文件
keytool -printcert -file XXX.RSA

Android给第三方应用添加系统签名的两种方式

用VsCode画类图、流程图、时序图、状态图
adb shell 查看CPU架构
关于32位和64位SO库混合引入Crash解决方案
说说Android项目中的armeabi,armeabi-v7a和x86

  • apk引用那些so位于什么位置
tasks.whenTaskAdded { task ->
    if (task.name=='transformNativeLibsWithMergeJniLibsForxxxRelease') { //如果是有多个flavor,则用 mergeFlavorDebugNativeLibs的形式
        task.doFirst {
            println("------------------- find so files start -------------------")
            println("------------------- find so files start -------------------")
            println("------------------- find so files start -------------------")

            it.inputs.files.each { file ->
                printDir(new File(file.absolutePath))
            }

            println("------------------- find so files end -------------------")
            println("------------------- find so files end -------------------")
            println("------------------- find so files end -------------------")
        }
    }
}

def printDir(File file) {
    if (file != null) {
        if (file.isDirectory()) {
            file.listFiles().each {
                printDir(it)
            }
        } else if (file.absolutePath.endsWith(".so")) {
            println "find so file: $file.absolutePath"
        }
    }
}

Android-动画定义与使用
Android动态加载so

题库

面试题1

17个XML布局小技巧

Handler

Retrofit

Retrofit +rxjava 如何触发enqueue

Observable.subscribe()-> subscribeActual(observer) ->CallEnqueueObservable.subscribeActual()->call.enqueue(callback);

自定义View/ViewGroup详解
Android的RV列表刷新?Payload 与 Diff 的方式有什么异同?

串通ANR的一切

RecyclerView的缓存复用机制

插件化
ASM 应用与实践
android自定义Gradle插件和asm的用法的一些知识
自定义Gradle插件
CoordinatorLayout协调者布局原理分析并实现吸顶效果

booster

MinSdkVersion、CompileSdkVersion、TargetSdkVersion

Wireshark零基础使用教程(超详细)

Wireshark的抓包和分析,看这篇就够了!(内含视频教程)

学得懂的 Android Framework 教程之Binder

Android Framework 急速上手

Android Framework一学就会,你学“废”了吗?

高性能图片优化方案

详解静态、动态代理以及应用场景
Android 无所不能的 hook,让应用不再崩溃

查看Android系统源码

Android那两个你碰不到但是很重要的类之ViewRootImpl

Zygote进程,你到底都干了啥

Android ImageView scaleType属性值及显示效果

终于搞明白了什么是同步屏障

终于懂了” 系列:Android屏幕刷新机制—VSync、Choreographer 全面理解!

空间换时间-五秒出解:从900ms到5ms的幕后优化大揭秘!

算法-时间复杂度分析

2023 Android 折叠屏适配详解,是时候点亮新技能了

Android性能优化—FPS提升实战

Android 内存优化的小知识

Android各版本对应的SDK及JDK版本要求

RxJava自带线程池监控和管理的探索之旅

RxJava2开发小记:或许能帮你解决RxAndroid+Retrofit出现的OOM

减少RxJava中多余的线程调度

一次线程OOM排查看线程使用注意事项

Thread也会OOM吗?

Gradle插件开发指南

Android–taskAffinity属性

Android中NestedScrollview的使用

init进程

掌握这10个Android LaunchMode问题,面试轻松搞定

JetPack Compose 实战:打造一个 Compose 版本的「玩 Android」

Jetpack Compose 学习

XmlResourceParser android.content.pm.ProviderInfo.loadXmlMetaData(android.content.pm.PackageManager

快速入门数据结构和算法

  • adb 发送广播

只有action
adb shell am broadcast -a com.a.b.c.d
有action、mimeType需指定具体的广播类
adb shell am broadcast -a com.a.b.c.d -t live/com.a.a.a -n com.conch.a.a/.receiver.TestReceiver
在这里插入图片描述

Android制作AAR包并混淆后加载调用

UnsatisfiedLinkError: dlopen failed: “/data/app/~~xxxxx==/lib/arm64/.so“ has bad ELF magic: 00000000

Android应用启动优化

java.lang.IllegalStateException Can not perform this action after onSaveInstanceState 解决方案

语雀

盒子修改host

1.adb shell
2.echo 1 > /sys/class/remount/need_remount; mount -o rw,remount /system
3.busybox vi system/etc/hosts
4. i 进行编辑
5. ESC  输入:wq保存退出
6. ECS 输入:q!退出


1.adb root
2.TIMEOUT /T 1
3.adb remount
4.TIMEOUT /T 1
5.adb push E:\box-hosts\1\hosts  /system/etc/hosts
6.TIMEOUT /T 60
 

make

makefile教程

cygwin是windows的linux模拟环境,使用cygwin进行模拟,安装时选择make。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值