<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ttdevs]]></title><description><![CDATA[https://github.com/ttdevs]]></description><link>https://blog.youkuaiyun.com/ttdevs</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ttdevs]]></copyright><item><title><![CDATA[【Android】ServiceNotFoundException: No service published for: search]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/140957456</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/140957456</guid><author>ttdevs</author><pubDate>Tue, 06 Aug 2024 16:24:33 +0800</pubDate><description><![CDATA[java.lang.IllegalStateException: android.os.ServiceManager$ServiceNotFoundException: No service published for: search]]></description><category></category></item><item><title><![CDATA[Apk静默安装之调用系统隐藏API]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/100522188</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/100522188</guid><author>ttdevs</author><pubDate>Tue, 03 Sep 2019 16:46:02 +0800</pubDate><description><![CDATA[文章目录0x00 问题0x01 调用系统隐藏API0x02 SystemHideAPISystemHideAPI.javaAndroid.mkBuildclasses.jar0x03 总结0xFF 参考
0x00 问题
何为隐藏的API?
简单来说就是在源码中被用 @hide 标记的代码块，比如常量，方法等。以常用的 ActivityManager.java 为例，里面就有大量的隐藏API：
@S...]]></description><category></category></item><item><title><![CDATA[NMS Toast]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/93985941</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/93985941</guid><author>ttdevs</author><pubDate>Fri, 28 Jun 2019 12:28:45 +0800</pubDate><description><![CDATA[0x00 NMS Toast
Toast.makeText(Context, "Toast message content.", Toast.LENGTH_SHORT).show();

以下代码分析基于Android 8.1.0

0x01 Toast
Toast类只有500多行，逻辑比较简单，主要有三部分组成： Toast，INotificationManager和TN。Toast类负责构造T...]]></description><category></category></item><item><title><![CDATA[RockChip主板系统签名说明]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/80683160</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/80683160</guid><author>ttdevs</author><pubDate>Wed, 13 Jun 2018 17:59:18 +0800</pubDate><description><![CDATA[简介

线下设备使用的都是RockChip芯片的主板，我们要求最终运行的App都有系统权限，因此最终签名都会使用系统签名。之前都是打包完成之后再手动签名，现改成打包的时候直接使用RockChip的签名。



操作



手动签名

先生成apk，然后使用 signapk.jar 签名：

java -jar signapk.jar platform.x509.pem platform.pk8 i...]]></description><category></category></item><item><title><![CDATA[Nexus3配合Gradle搭建私有仓库]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/78453178</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/78453178</guid><author>ttdevs</author><pubDate>Sun, 05 Nov 2017 22:30:20 +0800</pubDate><description><![CDATA[Nexus3 私有仓库搭建。将自己的代码通过gradle上传到使用nexus3搭建的私有仓库。]]></description><category></category></item><item><title><![CDATA[ThreadLocal]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/71375416</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/71375416</guid><author>ttdevs</author><pubDate>Sun, 07 May 2017 23:53:32 +0800</pubDate><description><![CDATA[0x00 ThreadLocal

查看Android Message源码的时候，看到一个类： ThreadLocal。之前没注意过这个类，看的有点迷糊，这里对其做一下总结。]]></description><category></category></item><item><title><![CDATA[TextWatcher中的参数]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/70543537</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/70543537</guid><author>ttdevs</author><pubDate>Sun, 23 Apr 2017 23:32:00 +0800</pubDate><description><![CDATA[TextWatcher中的参数


beforeTextChanged




@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}


  This method is called to notify you that, within s, the count]]></description><category></category></item><item><title><![CDATA[java.lang.NumberFormatException: Invalid float: "55,4" 分析]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/69664669</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/69664669</guid><author>ttdevs</author><pubDate>Sat, 08 Apr 2017 08:50:33 +0800</pubDate><description><![CDATA[java.lang.NumberFormatException: Invalid float: "55,4"]]></description><category></category></item><item><title><![CDATA[使用Websocket实现消息推送（心跳）]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/62887058</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/62887058</guid><author>ttdevs</author><pubDate>Fri, 17 Mar 2017 14:02:05 +0800</pubDate><description><![CDATA[本来以为写完了，结果最近和一个同事在讨论心跳的事情，这里再做一个补充。先说我的结论：
WebSocket协议已经设计了心跳，这个功能可以到达检测链接是否可用

心跳是用来检测链接是否可用的，不一定支持携带数据，可要看具体实现

如果非要心跳中带上复杂数据，那这个可作为应用层的一个功能自己去实现]]></description><category></category></item><item><title><![CDATA[Java中的比较: == 和 equals]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/60143351</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/60143351</guid><author>ttdevs</author><pubDate>Fri, 03 Mar 2017 17:21:05 +0800</pubDate><description><![CDATA[- `==`
    
    - 基本类型
        
        对于基本类型，`==` 的功能是比较值。
        
    - `Object`
        
        比较对象在内存中的地址。

- `equals`
    
    基本类型无equals方法。Object对象默认equals的实现如下：]]></description><category></category></item><item><title><![CDATA[Android闹钟遇到的那些坑]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/56847824</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/56847824</guid><author>ttdevs</author><pubDate>Fri, 24 Feb 2017 18:32:29 +0800</pubDate><description><![CDATA[做过闹钟的话你就知道这中间有多少坑了。第一次做闹钟程序是在2012年，那时候android最新版本是2.2，2.3发布在即，做了一个整点提醒的小工具，记得很清楚，主要的问题是锁屏之后闹钟不能准时被唤醒，总会晚那么几秒钟，后来没办法把闹钟提前设置几秒钟。不过那时候环境还好，没有遇到攻克不了的问题，重启也可以唤起闹钟的。但是随着android版本的进化，开发者节操的丢失，问题就越来越难做了。]]></description><category></category></item><item><title><![CDATA[Layout inflate遇到的坑]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/55003142</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/55003142</guid><author>ttdevs</author><pubDate>Sun, 12 Feb 2017 22:34:30 +0800</pubDate><description><![CDATA[Layout inflate遇到的坑]]></description><category></category></item><item><title><![CDATA[使用requests处理cookie]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/53696261</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/53696261</guid><author>ttdevs</author><pubDate>Fri, 16 Dec 2016 18:11:34 +0800</pubDate><description><![CDATA[常见的 application/json 请求，如果token进行验证，我们可以在header或者body中直接添加，对于使用cookie进行验证的请求，虽然可以自己维护cookie，但是会比token麻烦很多。之前的忘了请求都是使用python3的urllib进行，当处理cookie时，发现比较困难，因此着手另寻他法，这样就发现了requests。]]></description><category></category></item><item><title><![CDATA[MediaPlayer单曲循环不卡顿]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/53572466</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/53572466</guid><author>ttdevs</author><pubDate>Sun, 11 Dec 2016 12:23:02 +0800</pubDate><description><![CDATA[需求单曲循环播放歌曲，要求过度连贯，听不出来卡顿感觉。0x01 解决思路
MediaPlayer对于常见的音乐播放，我们第一时间想到的应该就是它，它有一个方法MediaPlayer.setLooping(true);就是用来进行单曲循环的。但是很遗憾，如果你简单的这么做，上面的目的是达不到的，会出现上一遍结束出现一个明显的停止才开始播放下一次的现象。]]></description><category></category></item><item><title><![CDATA[Data Binding给Button设置背景无效]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/53172527</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/53172527</guid><author>ttdevs</author><pubDate>Tue, 15 Nov 2016 16:13:30 +0800</pubDate><description><![CDATA[0x00 问题通过Data Binding给Button设置背景无效。 
具体表现为给Button设置不同的背景图片，但是无论怎样背景只会显示不同的颜色，而不是显示期望的图片。0x01 分析由于对Data Binding不是很熟悉，所以很奇怪为什么。不管怎样先打印下这个资源的值，发现在布局文件中打印资源值是有的。根据经验，设置不同的背景图片，背景会显示不同的颜色，那这个值可能被解析成了颜色值。]]></description><category></category></item><item><title><![CDATA[Retrofit初探——POST方式提交JSON数据]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/53148121</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/53148121</guid><author>ttdevs</author><pubDate>Sun, 13 Nov 2016 11:40:59 +0800</pubDate><description><![CDATA[Retrofit初探——POST方式提交JSON数据]]></description><category></category></item><item><title><![CDATA[使用Websocket实现消息推送（下）]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/52486883</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/52486883</guid><author>ttdevs</author><pubDate>Sun, 11 Sep 2016 20:53:19 +0800</pubDate><description><![CDATA[上一篇使用 Java-WebSocket 写了一套 WebSocket 的Demo，这一篇着重分析下WebSocket 的一些实现细节，更加详细的协议细节可参考 RFC6455。]]></description><category></category></item><item><title><![CDATA[Mac下Homebrew 安装 Mysql]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/52416114</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/52416114</guid><author>ttdevs</author><pubDate>Fri, 02 Sep 2016 19:09:18 +0800</pubDate><description><![CDATA[0x00 mac下mysql安装

简单记录mac下mysql安装。 
这里需要一个前提——先安装 homebrew，具体可以参考这里。]]></description><category></category></item><item><title><![CDATA[使用Websocket实现消息推送（上）]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/52330205</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/52330205</guid><author>ttdevs</author><pubDate>Fri, 26 Aug 2016 23:13:56 +0800</pubDate><description><![CDATA[WebSocket一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455，并被RFC7936所补充规范，WebSocketAPI被W3C定为标准。]]></description><category></category></item><item><title><![CDATA[Android通过Intent传递数据]]></title><link>https://blog.youkuaiyun.com/ttdevs/article/details/52144991</link><guid>https://blog.youkuaiyun.com/ttdevs/article/details/52144991</guid><author>ttdevs</author><pubDate>Mon, 08 Aug 2016 17:20:08 +0800</pubDate><description><![CDATA[当我们需要对JVM中的java对象进行转储时，就需要将其转化成二进制序列，然后才能存储到外部。这个序列中保存了java对象的类型，数据，数据类型等。当需要的时候，再对存储的二进制序列进行反序列化，即可将其还原。常见的场景比如：存储JVM中对象，通过Socket传递java对象，RMI等等。]]></description><category></category></item></channel></rss>