<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[z9722的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/z9722</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; z9722]]></copyright><item><title><![CDATA[setenforce 0/1源码分析]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/143873935</link><guid>https://blog.youkuaiyun.com/z9722/article/details/143873935</guid><author>z9722</author><pubDate>Mon, 25 Nov 2024 11:18:44 +0800</pubDate><description><![CDATA[这个函数在Android上就是对/sys/fs/selinux/enforce写0或1。本文主要介绍setenforce 0/1的代码流程。]]></description><category></category></item><item><title><![CDATA[AOSP12非SDK接口限制放开]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/130834401</link><guid>https://blog.youkuaiyun.com/z9722/article/details/130834401</guid><author>z9722</author><pubDate>Tue, 23 May 2023 20:13:31 +0800</pubDate><description><![CDATA[因工作原因需要将自己增加的一些接口暴露给第三方应用使用，此时我们需要改动AOSP源码。使用Android非sdk接口时。]]></description><category></category></item><item><title><![CDATA[[Android源码分析] 一.系统启动-init启动流程梳理]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/128123126</link><guid>https://blog.youkuaiyun.com/z9722/article/details/128123126</guid><author>z9722</author><pubDate>Thu, 01 Dec 2022 16:38:19 +0800</pubDate><description><![CDATA[init启动流程梳理]]></description><category></category></item><item><title><![CDATA[Android调试技巧-java、c、c++调用栈查看方法]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/126426318</link><guid>https://blog.youkuaiyun.com/z9722/article/details/126426318</guid><author>z9722</author><pubDate>Fri, 19 Aug 2022 17:11:58 +0800</pubDate><description><![CDATA[Android调试技巧-java、c、c++调用栈查看方法]]></description><category></category></item><item><title><![CDATA[命令查看当前界面的Activity和Fragment]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/124197862</link><guid>https://blog.youkuaiyun.com/z9722/article/details/124197862</guid><author>z9722</author><pubDate>Fri, 15 Apr 2022 17:09:28 +0800</pubDate><description><![CDATA[查看别人代码时，常常需要快速定位当前界面是哪实现的，为此我们可以使用如下命令：

查看顶层Activity

adb shell "dumpsys activity -v top | grep ACTIVITY"

查看顶层Fragment

adb shell "dumpsys activity -v top | grep '#0: ' | tail -n 1"




...]]></description><category></category></item><item><title><![CDATA[记一次Android OOM问题]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/123799587</link><guid>https://blog.youkuaiyun.com/z9722/article/details/123799587</guid><author>z9722</author><pubDate>Sat, 02 Apr 2022 17:47:43 +0800</pubDate><description><![CDATA[问题背景：

新平台固件测试后，反馈一个OOM的问题。问题日志如下：


3944  3959 I: Clamp target GC heap from 280MB to 256MB
3944  3959 I: Alloc concurrent copying GC freed 0(0B) AllocSpace objects, 0(0B) LOS objects, 0% free, 256MB/256MB, paused 173us total 383.632ms
3944  3944 I: WaitFo]]></description><category></category></item><item><title><![CDATA[Android 证书安装流程分析]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/121752677</link><guid>https://blog.youkuaiyun.com/z9722/article/details/121752677</guid><author>z9722</author><pubDate>Mon, 06 Dec 2021 18:09:45 +0800</pubDate><description><![CDATA[一.证书在源码中的路径

5.1系统证书(命名是 openssl x509 -subject_hash_old -in filename)
libcore/luni/src/main/files/cacerts

7.1及以后系统证书
/system/ca-certificates/files

二.证书在固件中的路径

/system/etc/security/cacerts

三.手动安装流程

设置--&gt;安全--&gt;从SD卡安装证书：
在AndroidManif.xml里
&lt;Prefe]]></description><category></category></item><item><title><![CDATA[Android Studio Arctic Fox使用问题汇总]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/121424317</link><guid>https://blog.youkuaiyun.com/z9722/article/details/121424317</guid><author>z9722</author><pubDate>Fri, 19 Nov 2021 15:49:03 +0800</pubDate><description><![CDATA[一.Android Gradle plugin requires Java 11 to run.

1.安装jdk 11

2.Android Studio - File -Settings按如下设置后，重启Android Studio



二.Gradle面板没有Task任务列表

Android Studio - File -Settings，取消"Do not build Gradle task list during Gradle sync"


...]]></description><category></category></item><item><title><![CDATA[[Android实战篇] 域名定位]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/121247534</link><guid>https://blog.youkuaiyun.com/z9722/article/details/121247534</guid><author>z9722</author><pubDate>Wed, 10 Nov 2021 15:23:42 +0800</pubDate><description><![CDATA[上回讲到用tcpdump抓取系统网络访问记录[Android实战篇] 系统网络访问记录

通过wireshark查看到系统访问了redirector.gvt1.com，但是是哪里访问的呢？

有同学可能说这个容易，源码里全局搜索下，就能定位了。骚年，要是能直接搜索到地址也不会有这边文章了



一.获取应用包名

首先在netd中添加日志信息，注意高版本android可能需要修改selinux权限

system/netd/server/DnsProxyListener.cpp添加一个通过pid获取ap..]]></description><category></category></item><item><title><![CDATA[[Android实战篇] 系统网络访问记录]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/121098602</link><guid>https://blog.youkuaiyun.com/z9722/article/details/121098602</guid><author>z9722</author><pubDate>Tue, 02 Nov 2021 14:12:25 +0800</pubDate><description><![CDATA[之前使用过fiddler、Charles这些工具来抓包进行数据分析，但是这些工具通常只能抓取Http请求的。现在要抓取系统在亮屏状态时，所有的数据请求，这时可以用到linux下常用的tcpdump。

一.tcpdump编译

在AOSP源码的external/tcpdump路径下。

注意如果lunch时，选择的是user，需要修改下Android.mk，把下面一行注释掉


LOCAL_MODULE_TAGS := debug

二.tcpdump使用

编译好后，push到/system/xbin/下]]></description><category></category></item><item><title><![CDATA[Android加固实现，不落地加载（support 5.0-11）[全网完成度最高的开源方案]]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/120785602</link><guid>https://blog.youkuaiyun.com/z9722/article/details/120785602</guid><author>z9722</author><pubDate>Fri, 15 Oct 2021 16:27:38 +0800</pubDate><description><![CDATA[标题要牛逼点，才有人看吧！

apk加载方案相关文章不少，但是要么是一代(不落地)加载方案，要么二代方案做的不完善，Android高版本支持不了，或者不支持多dex等，反正就是存在各种小问题，离可以使用还有这一点点距离。按理说现在加固方案都到第四代了，没道理二代方案还没人开源吧，仔细想想可能是现在方案更先进了，当年的方案问题没人关注了，二来加固工具使用起来也方便，没必要自己搞一个。

为了让后来人有个学习参考吧，这里把自己鼓捣的结果写出来，大家共同学习共同进步吧！

--------------------]]></description><category></category></item><item><title><![CDATA[Android加固在Android11上的问题]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/119964337</link><guid>https://blog.youkuaiyun.com/z9722/article/details/119964337</guid><author>z9722</author><pubDate>Sat, 28 Aug 2021 11:25:58 +0800</pubDate><description><![CDATA[由于工作需求，近来要研究下apk加固。昨天在网上找了个加固代码，一顿操作下来，加固ok，在Android5和Android10上的机器上跑起来ok，到了Android11上安装出错。

错误信息如下：


adb: failed to install Xxxx.apk: Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of ]]></description><category></category></item><item><title><![CDATA[[Android IPC] 一.Messenger]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/119919696</link><guid>https://blog.youkuaiyun.com/z9722/article/details/119919696</guid><author>z9722</author><pubDate>Thu, 26 Aug 2021 00:15:26 +0800</pubDate><description><![CDATA[Android最常用来快进程通讯的手段是AIDL，这个大家都很熟悉了。今天我们来介绍另一个比AIDL使用起来更简单的跨进程方式Messenger，其实Messenger的内部实现就是用的AIDL，那么为什么我还要介绍他呢？主要是为了后面要介绍的AsyncChannel打个基础，好了，快点进入正题吧！



一.Messenger有什么用

Messenger就是用来发送消息的，核心方法只有一个send。从这个方法来看，显然Messenger是单向的，那如果要双向通信怎么办。其实很简单，两边分别创建一个Mes]]></description><category></category></item><item><title><![CDATA[Android 7.1编译jack-server问题记录]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/119731541</link><guid>https://blog.youkuaiyun.com/z9722/article/details/119731541</guid><author>z9722</author><pubDate>Mon, 16 Aug 2021 13:56:39 +0800</pubDate><description><![CDATA[错误信息
FAILED: /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.8.ALPHA.jar  2&gt;&amp;1 || (exit 0) ) &amp;&amp; (JACK_SERVERencoding=UTF-8 -XX:+TieredCompilation\" prebuilt]]></description><category></category></item><item><title><![CDATA[Android Input系统]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/119393850</link><guid>https://blog.youkuaiyun.com/z9722/article/details/119393850</guid><author>z9722</author><pubDate>Wed, 04 Aug 2021 21:42:01 +0800</pubDate><description><![CDATA[本文基于Android7.1代码分析

一.Input启动

先上个流程图



InputManagerService的创建是在SystemServer，截取下关键代码


    inputManager = new InputManagerService(context);

    wm = WindowManagerService.main(context, inputManager,
                        mFactoryTestMode != FactoryTest.]]></description><category></category></item><item><title><![CDATA[Ubuntu下fastboot命令无法使用解决方案]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/117487972</link><guid>https://blog.youkuaiyun.com/z9722/article/details/117487972</guid><author>z9722</author><pubDate>Wed, 02 Jun 2021 23:17:57 +0800</pubDate><description><![CDATA[fastboot环境变量都设置好了，机器已进入bootloader模式，fastboot device提示
&lt; waiting for any device &gt;

解决方法： https://github.com/snowdream/51-android

]]></description><category></category></item><item><title><![CDATA[Android使用Fiddler抓包记录]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/116847272</link><guid>https://blog.youkuaiyun.com/z9722/article/details/116847272</guid><author>z9722</author><pubDate>Sat, 15 May 2021 16:49:15 +0800</pubDate><description><![CDATA[本文是记录分析系统代理问题时，抓包工具的使用记录

注意：手机和pc连接同一个局域网

一.PC配置

1. 配置fiddler允许监听https

打开Fiddler，菜单栏选择 Tools-Options，按下图配置。首次配置时会提示是否信任fiddler证书，直接yes





2.配置fiddler允许远程连接





3.PC防火墙配置

a).打开防火墙高级设置



b).新建入站规则，选择"端口"，下一步。设置"特定本地端口"为"8888",一直下一步即可



4.查看本机ip
...]]></description><category></category></item><item><title><![CDATA[[Android的Init进程一]启动脚本init.rc]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/115524145</link><guid>https://blog.youkuaiyun.com/z9722/article/details/115524145</guid><author>z9722</author><pubDate>Wed, 28 Apr 2021 20:12:23 +0800</pubDate><description><![CDATA[Android Init语言由五个大类的语句组成，Actions, Commands, Services, Options, Imports。

1.Actions

on &lt;trigger&gt;
   &lt;command&gt;
   &lt;command&gt;
   &lt;command&gt;


2.Commands




3.Services

service &lt;name&gt; &lt;pathname&gt; [ &lt;argument&gt; ]*
    &lt]]></description><category></category></item><item><title><![CDATA[Android native crash定位]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/114874330</link><guid>https://blog.youkuaiyun.com/z9722/article/details/114874330</guid><author>z9722</author><pubDate>Tue, 16 Mar 2021 12:35:11 +0800</pubDate><description><![CDATA[目录一.应用开发1.模拟环境2.crash定位脚本演示3.脚本说明二.系统开发
本文针对Android应用开发和系统开发分别提供了两款native crash定位工具。
一.应用开发
下载地址：
1.模拟环境

本文使用Android Studio 4.1版本，按默认配置创建一个jni工程。

模拟native crash，修改natvie-lib.cpp


2.crash定位脚本演示

通过logcat查找tombstone

I/BootReceiver: Copying /data/tombston]]></description><category></category></item><item><title><![CDATA[Android getDeviceId流程分析]]></title><link>https://blog.youkuaiyun.com/z9722/article/details/114705284</link><guid>https://blog.youkuaiyun.com/z9722/article/details/114705284</guid><author>z9722</author><pubDate>Mon, 15 Mar 2021 17:50:15 +0800</pubDate><description><![CDATA[1.首先来看getDeviceId
frameworks/base/telephony/java/android/telephony/TelephonyManager.java
public String getDeviceId() {
    ...
    ITelephony telephony = getITelephony();
     if (telephony == null)
         return null;
     return telephony.getDeviceId(m]]></description><category></category></item></channel></rss>