
Android
文章平均质量分 63
yinhunzw
每天进步一大点
展开
-
Android Activity启动模式
LaunchMode(启动模式)原创 2023-03-15 19:16:36 · 560 阅读 · 1 评论 -
LowMemoryKiller 的使用
android 所有应用adj的获取方法原创 2022-07-12 14:55:06 · 911 阅读 · 2 评论 -
Android内存管理
前言 内存优化一直是 Android 开发中的一个非常重要的话题,他直接影响着我们 app 的性能表现。但这个话题涉及到的内容很广且都偏向底层,让很多开发者望而却步。同时,内存优化更加偏向于“经验知识”,需要在实际项目中去应用来学习。因而本文并不想深入到底层去讲内存优化的原理,而是着眼于宏观,聊聊 android 是如何分配和管理内存、在内存不足的时候系统会如何处理以及会对用户造成什么样的影响。Android 应用基于 JVM 语言进行开发,虽然 google 根据移动设备特点开发了自家的虚..原创 2022-05-07 14:30:21 · 1082 阅读 · 0 评论 -
android DMA buffer查看
执行 adb shell cat /sys/kernel/debug/dma_buf/dmaprocs |grep size会打印出如下信息,如com.app.systemapp (PID 23220) size: 11704 com.android.systemui (PID 1275) size: 8172com.app.systemapp (PID 23220) size: 1170411704为 11.704M原创 2022-05-06 10:48:31 · 1906 阅读 · 0 评论 -
Android Looper和Handler
Message:消息,其中包含了消息ID,消息处理对象以及处理的数据等,由MessageQueue统一列队,终由Handler处理。Handler:处理者,负责Message的发送及处理。使用Handler时,需要实现handleMessage(Message msg)方法来对特定的Message进行处理,例如更新UI等。MessageQueue:消息队列,用来存放Handler发送过来的消息,并按照FIFO规则执行。当然,存放Message并非实际意义的保存,而是将Message以链表的方式串联起原创 2022-02-12 15:29:14 · 236 阅读 · 0 评论 -
android 启动app event log
Time pid TAG Messag 01:20:33.418 951 wm_stack_created 22 01:20:33.421 951 wm_task_created [78,22] 01:20:33.422 951 wm_task_moved [78,0,2147483647] 01:20:33.423 951 am_focused_stack [0,22,0,reuseOrNewTa..原创 2022-02-09 17:04:59 · 2567 阅读 · 0 评论 -
APK体积优化
1.图片优化仅支持特定密度:图片资源仅保留mdpi或drawable-nodpi png、jpg转成webp推荐使用有损75%,视情况而定;2.Json文件压缩使用工具对json文件压缩;主要是删除空格和制表符等;对于大的json文件效果比较明显,几百kb的文件可以压缩为几十kb可使用在线json压缩工具3.去除无用的语言资源可只保留中文语言包android{defaultConfig{resConfigs...原创 2021-11-23 17:50:38 · 2434 阅读 · 1 评论 -
adb 查看android activity 任务栈 /查看window层次
adb shell dumpsys activity activities |grep -E "Task id|Hist #|* TaskRecord"原创 2021-09-22 14:35:38 · 2055 阅读 · 0 评论 -
android9.0以上,framewrok.jar push到system/framework不起作用解决方案
android9.0 framewrok.jar push到system/framework不起作用,解决方式:adb push out/target/product/xxx/system/framework/boot-framework.vdex /system/framework/adb push out/target/product/xxx/system/framework/arm/boot-framework.art /system/framework/armadb push ou..原创 2021-09-16 17:37:49 · 799 阅读 · 0 评论 -
ServiceManager addService流程(源码修改版)
step1 创建aidl文件在源码frameworks/base/core/java/android/os/ 下面新增 一个ICCCService.aidl假设我们定义了5个函数,这些函数将会在SystemServer进程执行。内容如下// ICCCService.aidlpackage android.os;// Declare any non-default types here with import statementsinterface ICCCService ..原创 2021-09-02 09:15:50 · 1067 阅读 · 1 评论 -
Android 系统定制常用方案
1.sdcard预留空间防止空间满系统无法启动(Android 9.0)原创 2021-06-17 09:31:27 · 2060 阅读 · 0 评论 -
java中Map遍历的四种方式
在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方式去遍历。方法一:在for循环中使用entries实现Map的遍历:/*** 最常见也是大多数情况下用的最多的,一般在键值对都需要使用 */Map <String,String>map = new HashMap<String,String>();map.put("熊大", "棕色");map.pu原创 2021-03-14 22:22:14 · 428 阅读 · 0 评论 -
android 打开adb 调试
1.开发者模式中弹框“一律允许使用这台计算机进行调试”此弹框为Activity,所要打开的Activity为:/frameworks/base/core/res/res/values/config.xml <string name="config_customAdbPublicKeyConfirmationComponent" >com.android.systemui/com.android.systemui.usb.UsbDebuggingAc..原创 2021-01-23 16:01:27 · 1189 阅读 · 0 评论 -
Android RescueParty
在 Android 8.0 中,救援程序默认处于启用状态,其实现位于/services/core/java/com/android/server/RescueParty.java中。 在出现以下情况时,救援程序会收到有关启动和崩溃事件的信息,然后即会启动:system_server 在 5 分钟内重启 5 次以上。 永久性系统应用在 30 秒内崩溃 5 次以上。当检测到上述某种情况时,救援程序会将其上报给下一救援级别、处理与该级别相关联的任务,并让设备继续运行,看看能否恢复。清除或重置内容的程度..原创 2021-01-05 13:25:41 · 386 阅读 · 0 评论 -
Android rc 文件的使用
应用中添加使用rc0.在Android.mk同目录下新建文件haha.sh (文件名任意),执行shell操作,以下简单举例#!/bin/shrm -rf /system/etc/xxx1. 在Android.mk同目录下新建文件test.rc (文件名任意)含义:当设置系统属性persist.vendor.test.haha=2时,启动服务,执行shell脚本on property:persist.vendor.test.haha=2 start haha-sh...原创 2020-12-25 09:47:49 · 9025 阅读 · 0 评论 -
android shell查看文件系统大小,磁盘使用情况 df du
Androidadbshell中执行df查看文件系统的磁盘空间占用情况df或者df -h或者df -H其中 -h Human readable output (K=1024) -H Human readable output (k=1000)generic_x86_64:/system # df -HFilesystem Size Used Avail Use% Mounted on/dev/...原创 2020-12-18 13:35:38 · 8845 阅读 · 0 评论 -
Android 给应用添加默认权限
修改文件夹权限和所在组init.rc中on post-fs-data 时添加on post-fs-data symlink /mnt/vendor/test /mnt/test chown system system /mnt/test chmod 0775 /mnt/test给app添加默认权限1. product 的mk文件中添加PRODUCT_COPY_FILES += \/config/permission/default_permission_原创 2020-12-16 14:25:36 · 2053 阅读 · 0 评论 -
Android AOA链接(accessory & host)
目录AOA连接两台Android 设备1. 配件端(手机)1.1AndroidManifest 要求1.2 与配件通信1.3 终止通信2. 主机端(车机)2.1 API 概述2.2 AndroidManifest 要求2.3 启动Android设备(手机端)配件模式2.4 枚举设备2.5 获取与设备进行通信的权限2.6 与设备通信2.7 终止与设备通信3. 参考链接:AOA连接两台Android 设备Android 开放配件 (AOA) 支持功原创 2020-12-16 14:11:53 · 3658 阅读 · 2 评论 -
Android 蓝牙BLE扫描
1.声明蓝牙权限和定位权限<!--蓝牙权限--><uses-permission android:name="android.permission.BLUETOOTH"/><uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/><!-- LE Beacons位置相关权限--><uses-permission android:name="android.permiss原创 2020-12-16 13:48:22 · 3299 阅读 · 1 评论 -
AIDL 参数 in out inout区别
以客户端传递Person对象为例; 假设Person只包含一个String类型 name字段addPerson(in Person person) addPerson(out Person person) addPerson(inout Person person)区别:AIDL中的定向 tag 表示了在跨进程通信中数据的流向,其中 in 表示数据只能由客户端流向服务端, out 表示数据只能由服务端流向客户端,而 inout 则表示数据可在服务端与客户端之间双向流通如person对象传递到原创 2020-12-16 13:38:55 · 395 阅读 · 0 评论 -
android Selinux 之 platform_app,system_app,priv_app,untrusted_app
概念:平台签名:Android.mk中,定义LOCAL_CERTIFICATE := platformsystem权限:AndroidManifest.xml中声明 android:sharedUserId="android.uid.system" ,同时是平台签名分类:untrusted_app 第三方app,没有Android平台签名,没有system权限 platform_app 有android平台签名,没有system权限 system_app 有android平台签...原创 2020-12-15 09:50:06 · 7276 阅读 · 3 评论 -
Car-创建车机模拟器
1. SDK和模拟器准备Android SDK下载 Android P (28), 并将模拟器升级到最新(可以模拟更多的汽车数据)2. system image 准备源码全编生成编译产物,源码服务器目录 \android_org\out\target\product\generic_x86_64选择指定文件替换本地SDK中的image。我压缩备份了需要的文件,做了共享 车机模拟器image文件.7z, 解压替换本地SDK浏览器输入 file://BDJS-PF1LN39B/share或者文原创 2020-12-04 09:33:33 · 4095 阅读 · 2 评论 -
Android 常用adb 命令
adb command基本用法命令语法为命令指定目标设备启动/停止查看 adb 版本以 root 权限运行 adbd指定 adb server 的网络端口设备连接管理查询已连接设备/模拟器USB 连接无线连接(需要借助 USB 线)无线连接(无需借助 USB 线)应用管理查看应用列表所有应用系统应用第三方应用包名包含某字符串的应用安装 APK卸载应用清除应用数据与缓存查看前台 Activity查看正在运行的 Services查看应用详细信原创 2020-12-01 14:06:06 · 772 阅读 · 0 评论 -
Android Selinux介绍,如何添加selinux 权限
文件类:type=1400 audit(0.0:104avc: denied { search } for name="vendor" dev="tmpfs" ino=9241 scontext=u:r:dumpstate:s0 tcontext=u:object_r:mnt_vendor_file:s0 tclass=dir permissive=0分析:缺少的权限:{write/read/search} 谁缺少权限:scontext=u:r:dumpstate:s0 哪个文件的权限:t.原创 2020-11-14 17:46:05 · 9664 阅读 · 1 评论 -
Android 编译之android.mk
1. android系统源码的编译流程来回顾一下常见的编译步骤:source build/envsetup.shlunch xxxmake -j8 2>&1 | tee build.log这三步究竟做了什么呢?我们来逐步分析一下。1.1 source build/envsetup.shbuild/envsetup.sh这个文件中定义了一些变量和函数,执行source build/envsetup.sh之后,envsetup.sh中的变量成了全局变量,而其中的函数也可以直接在原创 2020-11-04 15:27:47 · 2443 阅读 · 0 评论 -
Android 生成系统签名文件,并用系统签名文件给apk签名
1. \build\make\target\product\security 源码路径下取得文件platform.pk8 platform.x509.pem2.写以下bat脚本文件,与上述两个文件放在同目录下,执行脚本文件@echo offecho 开始执行!openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pemecho 生成 platform.pemopenssl pkcs12 -expor...原创 2020-10-28 19:30:51 · 1681 阅读 · 1 评论 -
Android Studio “/dev/kvm device: permission denied” 解决办法
在创建虚拟机的时候出现 /dev/kvm 的权限错误或者以前可以用,但启动模拟器的时候提示错误emulator: ERROR: x86_64 emulation currently requires hardware acceleration!Please ensure KVM is properly installed and usable.CPU acceleration status: This user doesn't have permissions to use KVM (/dev原创 2020-08-19 16:57:05 · 2433 阅读 · 3 评论 -
Anroid 主题实现方案--Runtime Resource Overlay
Anroid 9.0 主题实现方案--Runtime Resource Overlay简单资源替换生效流程可以进行以下几步:预制方式: 生成overlay apk; 将overlay apk push 到vendor/overlay目录下; 重启手机; 主题切换 此时若目标应用正在显示,Activity 会重新走生命周期,显示新的资源信息。 安装方式 生成overlay apk; 安装apk 重启手机; 主.原创 2020-07-09 16:38:23 · 1196 阅读 · 0 评论 -
Android 车机开发 ServiceManager Selinux 权限配置说明
添加编译时Lunch option aosp_car_x86_64-eng\device\generic\car\vendorsetup.sh在文件最后添加add_lunch_combo aosp_car_x86_64-engSelinux两种模式Enforcing:强制模式,SELinux 运作中,且已经正确的开始限制 domain/typePermissive:宽容模式,SELinux 运作中,仅会有警告讯息并不会限制 domain/type 的存取userde..原创 2020-07-09 16:28:28 · 2425 阅读 · 0 评论 -
LOCAL_STATIC_JAVA_LIBRARIES 和 LOCAL_JAVA_LIBRARIES 区别
LOCAL_STATIC_JAVA_LIBRARIESLOCAL_STATIC_JAVA_LIBRARIES表示把引用的外部Java库直接编译打包到本模块中,在runtime时可以直接从本模块中找到相关的东西。LOCAL_JAVA_LIBRARIESLOCAL_JAVA_LIBRARIES表示引用的外部Java库在编译时可以找到相关的东西,但并不打包到本模块,在runtime时需要从别的地方查找,这个别的地方就是在编译时将引用的外部Java库的模块名添加到PRODUCT_BOOT_JARS,例如An原创 2020-07-09 09:33:06 · 8163 阅读 · 2 评论 -
git 查看 修改 生成 用户名 邮箱, 生成ssh key
git 看用户名以及邮箱$ git config user.name$ git config user.emailgit 设置用户名和邮箱$ git config --global user.name "your name"$ git config --global user.email "your email"生成ssh keyssh-keygen -t rsa -C "1240847112@example.com"...原创 2020-06-24 10:34:11 · 2209 阅读 · 0 评论 -
系统编译添加jar包常见问题: 1. NoClassDefFoundError 2. package_whitelist.txt which is not in the whitelist .
问题背景:想在源码中添加自定义jar包(xxx.jar), 当在其他模块中使用时报错.关键信息: java.lang.NoClassDefFoundError: Failed resolution of ...解决方式:在 /build/make/target/product/core_minimal.mk 中添加jar 模块名PRODUCT_BOOT_JARS := \ $(TARGET_CORE_JARS) \ ext \ framework \原创 2020-06-06 18:45:34 · 2111 阅读 · 0 评论 -
Android studio 中导入framework 系统 jar包,使应用可以访问系统api,不报红,编译通过
1. framework.jar 的添加将系统jar包放到module的libs文件夹下2. Project的build.gradle 文件中添加gradle.projectsEvaluated提高编译时lib库的引用优先级allprojects { repositories { google() jcenter() } gradle.projectsEvaluated { tasks.with.原创 2020-05-28 09:43:05 · 2091 阅读 · 1 评论 -
Android Log的使用和管理
1. Logcat 常用命令: adb 1. 将log 输出到sdcard/log 目录下,每1024kb保存为一个文件,限制文件数量上限为10进入sdcard 目录(generic_x86_64:/sdcard/log),执行adb命令 :generic_x86_64:/sdcard/log # logcat -b all -f log.log -n 10 -r 1024命令解释:logcat -b (请求查看备用的环形缓冲区),参数如下...原创 2020-05-22 11:36:34 · 421 阅读 · 0 评论 -
Android studio 导入framework 源码编译调试
1 生成android.iml 和 android.ipr在源码环境下,首先要源码编译成功源码根目录下执行$source build/envsetup.sh$lunch aosp_car_x86_64-eng$make -j8 若之前已全编成功并且没有clean,则无需执行此全编命名$ mmm development/tools/idegen/$development/tools/ide...原创 2020-05-13 16:33:23 · 2633 阅读 · 1 评论 -
Android MVP 简单易懂demo
上图是MVP,下图是MVCMVP和MVC的区别,在于以前的View层不仅要和model层交互,还要和controller层交互。而在mvp中,view层只和presenter层交互,而model层也和presenter交互,presenter构成了view层和model层的桥梁,也解耦了view层和model层。这一点很关键。我认为,这也是mvp的本质:解耦view层和mo...原创 2019-10-16 23:32:28 · 246 阅读 · 0 评论 -
android 跳转到系统设置界面的所有Intent
Intent 的 意图: Intent intent = new Inetnt(Setings);Setings:1. ACTION_ACCESSIBILITY_SETTINGS : // 跳转系统的辅助功能界面Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);startActi...转载 2019-05-11 15:25:56 · 199 阅读 · 0 评论 -
SystemUI TileService的使用教程-屏幕常亮按钮的添加
TileServiceAndroidManifest.xml <service android:name=".systemui.KeepScreenOnTileService" android:icon="@drawable/toggleon" android:label="屏幕常亮" ...原创 2019-04-10 09:38:48 · 1960 阅读 · 0 评论 -
ListView 性能优化 方案
在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能。本文的重点即是从如下几个方面介绍如何对ListView进行优化。1、convertView重用Android SDK中这样讲:the old view ...原创 2019-04-13 09:56:44 · 338 阅读 · 0 评论 -
Android Studio 编译 以及引用jar aar
编译:Module gradle 中 //task to delete the old jar task deleteOldJar(type: Delete) { delete 'release/zwlib.jar' } //task to export contents as jar task exportJar(type: Co...原创 2019-04-08 23:29:58 · 228 阅读 · 0 评论