<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dingyu]]></title><description><![CDATA[一点寒芒先至，随后枪出如龙]]></description><link>https://blog.youkuaiyun.com/iamdy</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; iamdy]]></copyright><item><title><![CDATA[应用的主线程和binder线程是如何启动的]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/123739789</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/123739789</guid><author>iamdy</author><pubDate>Fri, 25 Mar 2022 17:06:55 +0800</pubDate><description><![CDATA[kernel启动后，init进程会通过init rc配置脚本启动编译为app_process的二进制可执行文件，启动后的进程名为zygote。
zygote会启动虚拟机环境，然后fork出system_server进程，进入Java世界。
system_server是Android的系统进程，各大服务AMS、PMS、WMS等都运行在这个进程中。
1 system_server 进程发送fork请求
启动四大组件时，如果应用进程不存在，就会走到AMS创建应用进程的过程，这个进程是从zygote fork出来的]]></description><category></category></item><item><title><![CDATA[去掉系统原生模块的一种新方法]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/123579706</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/123579706</guid><author>iamdy</author><pubDate>Fri, 18 Mar 2022 17:04:59 +0800</pubDate><description><![CDATA[1 修改模块的Android.mk文件
见过最蠢的方法，更新模块、移植都不方便
2 修改PRODUCT_PACKAGES
一般的做法，暴力删除build、device下PRODUCT_PACKAGES的对应模块，缺点是分散，很难删干净，移植不方便
3 新方法

a 定义一个变量PRODUCT_DEL_PACKAGES
在build/core/product.mk中
b 将需要删除的模块赋值给这个变量
PRODUCT_DEL_PACKAGES += Browser2
c 在build的makefile文件中处]]></description><category></category></item><item><title><![CDATA[Android设备安装150个应用后开机耗时分析优化]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/123430854</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/123430854</guid><author>iamdy</author><pubDate>Fri, 11 Mar 2022 18:03:21 +0800</pubDate><description><![CDATA[设备安装150个应用后，开机耗时增加7s，主要是PMS扫描/data/app，耗时6.5s。
分析发现，主要耗时在

scanPackageNewLI 解析apk文件
commitReconciledScanResultLocked 将解析到的组件添加到PMS

backtrace如下：
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
scanDirTracedLI
    |--&gt;]]></description><category></category></item><item><title><![CDATA[CLion调试Android 11 Native代码]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/111272854</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/111272854</guid><author>iamdy</author><pubDate>Wed, 16 Dec 2020 16:16:00 +0800</pubDate><description><![CDATA[1 下载并编译sources
代码需要在自己电脑上编译，生成CMakeLists.txt和符号表。
2 CLion配置


2.1 导入第一步的代码到CLion
AOSP Native代码导入IDE（CLion）.


2.2 设置远程调试

Run -&gt; Edit Configurations
点击+号，选择GDB Remote Debug

按下图配置，设置GDB路径、端口号、符号目录、路径映射




3 Debug运行中的进程

3.1 设置端口转发，attach进程pid

adb forw]]></description><category></category></item><item><title><![CDATA[AOSP Native代码导入IDE（CLion）]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/106658583</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/106658583</guid><author>iamdy</author><pubDate>Wed, 10 Jun 2020 10:28:30 +0800</pubDate><description><![CDATA[AOSP可以很容易的导入到Android Studio，可以很舒服的跳转、调试，但是仅限于Java，
Native代码连跳转都不行。
JB有一款C/C++的IDE CLion，很自然想到能不能导入到CLion呢？
1 编译
要让 IDE 正确地建立索引，我们需要让 IDE 能正确地知道源文件、头文件、宏定义等各种数据。
CLion是基于CMake的，AOSP的Soong可以生成CMakeLists.txt，build目录下有文档build/soong/docs/clion.md
// 打开开关，编译时生成C]]></description><category></category></item><item><title><![CDATA[Android P(9.0) 关闭DEXPREOPT后每次开机都DEXOPT导致开机很久]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/84884046</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/84884046</guid><author>iamdy</author><pubDate>Fri, 07 Dec 2018 18:12:06 +0800</pubDate><description><![CDATA[最近开发Android P(9.0), 关闭WITH_DEXPREOPT（不关闭的话，编译framework或者services生成的jar包不能直接push到机器，影响开发效率，不知到有没有方法解决这个问题）后，发现每次开机都要很久。
接下来我们一步一步分析
第一步，看Log
10:12:30.474  1338  1338 I  SystemServer: UpdatePackagesIfNe...]]></description><category></category></item><item><title><![CDATA[MachineLearning笔记week6 机器学习系统设计]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/80818931</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/80818931</guid><author>iamdy</author><pubDate>Tue, 26 Jun 2018 18:03:47 +0800</pubDate><description><![CDATA[6.1 Evaluating a Hypothesis

Once we have done some trouble shooting for errors in our predictions by: 
- Getting more training examples 
- Trying smaller sets of features 
- Trying additional feature...]]></description><category></category></item><item><title><![CDATA[MachineLearning笔记week5 NeuralNetworkLearning]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/80764407</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/80764407</guid><author>iamdy</author><pubDate>Thu, 21 Jun 2018 18:16:15 +0800</pubDate><description><![CDATA[5.1 Cost Function

Let’s first define a few variables that we will need to use:


L = total number of layers in the network
slsls_l = number of units (not counting bias unit) in layer lll
K = number o...]]></description><category></category></item><item><title><![CDATA[MachineLearning笔记week4 NeuralNetworks]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/80764338</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/80764338</guid><author>iamdy</author><pubDate>Thu, 21 Jun 2018 18:08:31 +0800</pubDate><description><![CDATA[4.1 Model Representation I

Let’s examine how we will represent a hypothesis function using neural networks. At a very simple level, neurons are basically computational units that take inputs (dendrit...]]></description><category></category></item><item><title><![CDATA[MachineLearning笔记week3 Classification]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/80703202</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/80703202</guid><author>iamdy</author><pubDate>Fri, 15 Jun 2018 11:31:30 +0800</pubDate><description><![CDATA[3.1 Classification

To attemp classification, one method is to use linear regression and map all redictions greater than 0.5 as 1 and all less than 0.5 as a 0. However, this method doesn’t work well b...]]></description><category></category></item><item><title><![CDATA[MachineLearning笔记week2 Linear Regression]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/80618235</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/80618235</guid><author>iamdy</author><pubDate>Fri, 08 Jun 2018 09:23:00 +0800</pubDate><description><![CDATA[2.1 Multiple Features

Linear regression with multiple variables is also known as “multivariate linear regression”.

We now introduce notation for equations where we can have any number of input varia...]]></description><category></category></item><item><title><![CDATA[MachineLearning笔记week1]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/80278278</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/80278278</guid><author>iamdy</author><pubDate>Fri, 11 May 2018 10:45:50 +0800</pubDate><description><![CDATA[1.1 Supervised Learning

In supervised learning, we are given a data set and already know what our correct output should look like, having the idea that there is ralationship between the input and the...]]></description><category></category></item><item><title><![CDATA[Ubuntu .bashrc个人配置]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/79360188</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/79360188</guid><author>iamdy</author><pubDate>Sat, 24 Feb 2018 11:33:38 +0800</pubDate><description><![CDATA[// Android sdk ndk路径
export ANDROID_HOME=&quot;~/bin/android/sdk/&quot;
export ANDROID_SDK_ROOT=$ANDROID_HOME
export NDK_ROOT=$ANDROID_HOME/ndk-bundle
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platfor...]]></description><category></category></item><item><title><![CDATA[节电助手]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/52450727</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/52450727</guid><author>iamdy</author><pubDate>Tue, 06 Sep 2016 15:52:33 +0800</pubDate><description><![CDATA[为了延长电池的续航时间，节电助手会降低设备的性能，并限制振动、位置信息服务和大部分后台流量。对于电子邮件、聊天工具等依赖于同步功能的应用，可能要打开这类应用时才能收到新信息。 
节电助手会在设备充电时自动关闭。Created with Raphaël 2.1.0设置节电模式的调用过程PowerManagerPowerManagerIPowerManagerIPowerManagerPowerMana]]></description><category></category></item><item><title><![CDATA[Android Studio修改应用包名]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/51361965</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/51361965</guid><author>iamdy</author><pubDate>Tue, 10 May 2016 11:46:41 +0800</pubDate><description><![CDATA[修改app/build.gradle的ApplicationId就可以了。 
http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename]]></description><category></category></item><item><title><![CDATA[android 源码编译导入library project]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/45920493</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/45920493</guid><author>iamdy</author><pubDate>Fri, 22 May 2015 19:07:44 +0800</pubDate><description><![CDATA[修改launcher，需要依赖一个library project:password，无法直接在源码中编译。google出来的结果没有合适的方法，最后在源码packageses/apps/Email中找到了答案。需要修改2个文件:launcher的Android.mk、password的Android.mkmakefile文件目录为:launcher/password/Android.mk
launc]]></description><category></category></item><item><title><![CDATA[git删除提交]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/45899099</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/45899099</guid><author>iamdy</author><pubDate>Thu, 21 May 2015 23:31:56 +0800</pubDate><description><![CDATA[git删除提交
1、从资料库中清除文件git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch projects/Moon.mp3' --prune-empty       --tag-name-filter cat -- --all2、 推送我们修改后的repogit push origin master]]></description><category></category></item><item><title><![CDATA[可以听清A short history of nearly everything了]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/41451515</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/41451515</guid><author>iamdy</author><pubDate>Mon, 24 Nov 2014 20:39:41 +0800</pubDate><description><![CDATA[每个音节，非常清晰，很多单词]]></description><category></category></item><item><title><![CDATA[【转自果壳】学习没有“关键期”，现在开始就不晚]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/9093775</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/9093775</guid><author>iamdy</author><pubDate>Fri, 14 Jun 2013 12:54:13 +0800</pubDate><description><![CDATA[成年人大脑的可塑性，远远超过我们过去的认识。如果掌握了正确的方法，你也能像儿童一样学习。

如果你已经36岁，你很可能喜欢收集上好的葡萄酒、唱片或者体育比赛纪念品。但对于理查德•西姆考特（Richard Simcott）来说，他的收藏品是语言。到目前为止，他已经学会了30多种外语，而且他还不打算就此收手。

我们在伦敦一家饭馆里吃饭的时候，他在葡萄牙语、土耳其语和冰岛语之间跳来跳去，说起来]]></description><category></category></item><item><title><![CDATA[代码里的命名规则：错误的和正确的对比]]></title><link>https://blog.youkuaiyun.com/iamdy/article/details/9060777</link><guid>https://blog.youkuaiyun.com/iamdy/article/details/9060777</guid><author>iamdy</author><pubDate>Sun, 09 Jun 2013 08:28:23 +0800</pubDate><description><![CDATA[编程初学者总是把大量的时间用在学习编程语言，语法，技巧和编程工具的使用上。他们认为，如果掌握了这些技术技巧，他们就能成为不错的程序员。然而，计算机编程的目的并不是关于精通这些技术、工具的，它是关于针对特定领域里的特定问题创造出相应的解决方案，程序员通过相互合作来实现这些。所以，很重要的一点，你需要能精确的用代码表达出你的思想，让其他人通过代码能明白你的意图。



让我们先看看编程大师Ro]]></description><category></category></item></channel></rss>