<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[HellDevil的专栏]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/HellDevil</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; HellDevil]]></copyright><item><title><![CDATA[Virtualbox adb device找不到设备解决办法]]></title><link>https://blog.csdn.net/HellDevil/article/details/142894303</link><guid>https://blog.csdn.net/HellDevil/article/details/142894303</guid><author>HellDevil</author><pubDate>Sun, 13 Oct 2024 10:13:12 +0800</pubDate><description><![CDATA[用这个ubuntu系统来开发andorid的应用，遇到一个问题，就是在Virtualbox的右下usb图标里面已经探测到了我的android设备“18d1”（如果没有探测到，请确定android设备打开了adb调试开关以及授权这台PC来调试Android）。去google了上述的关键字，发现有个老外也提出了相同的问题，但是他后来纠正了自己的错误，说是自己错误的启用了usbguard服务。注意：我搜索了下网上的资料，很多资料说在~/.android/这个里面搞个什么adb_usb.ini。]]></description><category></category></item><item><title><![CDATA[Android Gradle7.0 allowInsecureProtocol (true)依然无法引入Maven库的解决方案]]></title><link>https://blog.csdn.net/HellDevil/article/details/121007254</link><guid>https://blog.csdn.net/HellDevil/article/details/121007254</guid><author>HellDevil</author><pubDate>Thu, 28 Oct 2021 09:28:39 +0800</pubDate><description><![CDATA[由于Gradle7.0增加了对Maven url的安全验证，传统不安全的以http开头的url，会导致引入仓库失败。

所以依照官方说明可以增加allowInsecureProtocol在自己的Maven{}里。

但是有的时候引入的Maven库url是属于内网，这个时候，仅仅在根目录下的build.gradle下增加这个依然无效，此时还需要拷贝刚才修改的maven{}内容到setting.gradle这个文件中的repositories里。这样引入的库就可以完美解析了。
...]]></description><category></category></item><item><title><![CDATA[Android如何利用InvocationHandler动态代理调用aidl接口]]></title><link>https://blog.csdn.net/HellDevil/article/details/114685173</link><guid>https://blog.csdn.net/HellDevil/article/details/114685173</guid><author>HellDevil</author><pubDate>Fri, 12 Mar 2021 09:18:20 +0800</pubDate><description><![CDATA[众所周知，Java的InvocationHandler可以作为动态代理去调用接口方法。但是如何去调用android里面的aidl接口定义的方法呢？

经过查阅相关资料和自己实践最终得出解决方案：

1 首先利用反射获取aidl接口的实例


Class&lt;?&gt; reflectCallback = null;
try {
        reflectCallback =  Class.forName("com.xxx.xxx.IAidlClass"); //aidl类
    } catch (C]]></description><category></category></item><item><title><![CDATA[Javadoc 识别@hide标记Tag之doclava]]></title><link>https://blog.csdn.net/HellDevil/article/details/112703559</link><guid>https://blog.csdn.net/HellDevil/article/details/112703559</guid><author>HellDevil</author><pubDate>Sat, 16 Jan 2021 13:52:09 +0800</pubDate><description><![CDATA[最近在开发java sdk, 但是sdk中的有些方法不想暴露给开发者。于是按照android的注释给这些接口

加上了@hide的标记，但是在生成javadoc的时候发现这些接口还是出现了。并且看到在生成javadoc的日志中

提示了@hide标签无法识别的错误。

百度了下，很多地方说要使用google的docklava。于是在网上找了很多方法，都失败了。

自己在github上搜索了下doclava然后根据其中的一个命令结合自己的工程最终测试成功。

下面说下步骤：

下载一个doclava的jar包]]></description><category></category></item><item><title><![CDATA[[Android追忆]CTS测试中的原生Setting和开发setting的切换]]></title><link>https://blog.csdn.net/HellDevil/article/details/106781588</link><guid>https://blog.csdn.net/HellDevil/article/details/106781588</guid><author>HellDevil</author><pubDate>Tue, 16 Jun 2020 10:11:16 +0800</pubDate><description><![CDATA[几年前，自己在做CTS的TV产品的验证工作，日本google要求给他们测试的机器必须安装原生Setting。那个时候使用的是4.4版本，当时还没有android TV版本，所以我们产品不用原生的Setting,自己开发了一个TV版的Setting。那怎么能让他们自由切换呢，很是麻烦，好在之前开发过用户向导，知道有一个Provision应用，里面有这么一段代码：


PackageManager pm = getPackageManager();
ComponentName name = new Compon]]></description><category></category></item><item><title><![CDATA[Android 蓝牙电话联系人同步之蓝牙状态检测]]></title><link>https://blog.csdn.net/HellDevil/article/details/106779456</link><guid>https://blog.csdn.net/HellDevil/article/details/106779456</guid><author>HellDevil</author><pubDate>Tue, 16 Jun 2020 08:26:06 +0800</pubDate><description><![CDATA[最近做的一个语音项目，要求车机端可以利用蓝牙，语音打电话给手机通讯录里的联系人。

实现这个功能需要将手机端的通讯录上传到语音的远程服务器端，并且SDK要求必须把蓝牙的状态实时上报上去。

上报通讯录其实还是很简单的，只要监听车机端的联系人provider的变化就可以进行读取操作和上报。


mContactObserver = new ContactObserver(new Handler());
Uri uri = ContactsContract.Contacts.CONTENT_URI;
mReso]]></description><category></category></item><item><title><![CDATA[Android-Service端和Clinet端通讯-如果client被杀了]]></title><link>https://blog.csdn.net/HellDevil/article/details/106769576</link><guid>https://blog.csdn.net/HellDevil/article/details/106769576</guid><author>HellDevil</author><pubDate>Mon, 15 Jun 2020 20:14:14 +0800</pubDate><description><![CDATA[最近做了一个android的语音项目，service端集成了语音服务，该service提供相关的语音SDK，比如语音搜索音乐，然后音乐app service集成这个SDK，从而获得语音能力。



在实际开发的过程中遇到两个棘手的问题：

1 Voice Service起来了，如果Music并没有启动，有人请求语音搜索音乐，那么怎么能告诉你呢？

2 如果Music起来并且通过bind接口绑定了Voice，那么voice如何知道呢？

针对两个问题我们进行分析：

1 Voice Service起来而M..]]></description><category></category></item><item><title><![CDATA[Android如何通过parcelable传递自定义对象]]></title><link>https://blog.csdn.net/HellDevil/article/details/79447589</link><guid>https://blog.csdn.net/HellDevil/article/details/79447589</guid><author>HellDevil</author><pubDate>Mon, 05 Mar 2018 17:45:09 +0800</pubDate><description><![CDATA[一个后台服务，提供一个接口，想要利用上层的应用传递下来的数据，进行处理。但是这类数据种类繁多，该怎么办呢？Android 提供的parcelable将这些数据传递给世界的另一边。之前看了网络上的做法，有一篇文章无限接近实现了，但是由于部分错误，导致了我一直是失败的，后来自己经过摸索才终于找到原因。废话不多说，讲讲干货。假设我们在服务端有多个数据Bean，如ABean, BBean,CBean等待传...]]></description><category></category></item><item><title><![CDATA[Ubuntu下配置BatteryHistorian跳坑指南]]></title><link>https://blog.csdn.net/HellDevil/article/details/79411186</link><guid>https://blog.csdn.net/HellDevil/article/details/79411186</guid><author>HellDevil</author><pubDate>Thu, 01 Mar 2018 13:59:38 +0800</pubDate><description><![CDATA[前段时间搞优化，其中就涉及到电池的管理。所以就决定把google Battery Historain在我的Ubuntu上配置一下。下面是google官方的Battery Historain的github配置介绍：https://github.com/google/battery-historian基本上按照上面的链接提供的流程是可以走通的，我主要讲在配置中遇到的几个坑：1 在安装dock桌面版的时...]]></description><category></category></item><item><title><![CDATA[从需求到设计（记自已的一次开发经历）]]></title><link>https://blog.csdn.net/HellDevil/article/details/52046079</link><guid>https://blog.csdn.net/HellDevil/article/details/52046079</guid><author>HellDevil</author><pubDate>Wed, 27 Jul 2016 17:13:21 +0800</pubDate><description><![CDATA[闲来无聊，针对自己之前开发的一个项目中的一个案例，详细的说明一下从分析到设计再到最终完成的一个过程。希望对自己对正在寻求转变的人提供一点帮助。
过程是：分析->设计 迭代开发。


1 需求分析（案例）：
  这里以这个项目中的一个需求"为用户提供电视观看的功能"。这里我起名为"看电视"(watchTv)
  案例：看电视
  Actor: 用户
  前置条件：系统的电视服务工作正]]></description><category></category></item><item><title><![CDATA[Ubuntu15.10配置redmine]]></title><link>https://blog.csdn.net/HellDevil/article/details/50999399</link><guid>https://blog.csdn.net/HellDevil/article/details/50999399</guid><author>HellDevil</author><pubDate>Mon, 28 Mar 2016 18:35:08 +0800</pubDate><description><![CDATA[最近刚刚在win10上搭建了一个redmine的服务，用于管理自己的小团队。闲来在家无聊，家里正好有台ubuntu15.10系统的64位机器，于是就想也搞个这个东西来玩玩。
废话不多说开始讲解配置过程：
1 安装mysql：
sudo apt-get install mysql-server mysql-client安装的过程中会有提示，让你输入数据库管理员root的密码，你就输入并且记住这]]></description><category></category></item><item><title><![CDATA[Android TV如何杀死后台正在播放的媒体应用。。。]]></title><link>https://blog.csdn.net/HellDevil/article/details/50804054</link><guid>https://blog.csdn.net/HellDevil/article/details/50804054</guid><author>HellDevil</author><pubDate>Fri, 04 Mar 2016 17:52:45 +0800</pubDate><description><![CDATA[前段时间做了个android TV的项目，自己负责的模块是Launcher,这个Launcher上正好有个TV的小窗口，播放实时的TV信号。有一天一个测试跑到我这，感觉天要塌下来一样。
  说: "Hi, 兄弟大事不好啦，完蛋啦。。。Launcher的TV不能播了"
  我说“尼玛，竟有此事！”
  于是跟着测试跑到问题机器上一看。。。尼玛电视电视，竟然无法播放电视了，我勒个去。。。。
]]></description><category></category></item><item><title><![CDATA[Android ScrollLayout判断滑动完毕。]]></title><link>https://blog.csdn.net/HellDevil/article/details/50803772</link><guid>https://blog.csdn.net/HellDevil/article/details/50803772</guid><author>HellDevil</author><pubDate>Fri, 04 Mar 2016 16:40:00 +0800</pubDate><description><![CDATA[最近在做个项目，需要判断ScrollLayout滑动是否完成。查了些资料，很多人说只要判断：
computeScrollOffset()这个方法就可以了，如果是true表示滑动完毕，否则表示滑动失败。


实际使用了下，发现是错误的，当滑动开始的时候，这个方法也返回true.
最后发现需要这么写才能判断，ScrollLayout滑动结束。if (mScroller.computeScro]]></description><category></category></item><item><title><![CDATA[开发日志整理3【Android tombstone分析 升级篇】]]></title><link>https://blog.csdn.net/HellDevil/article/details/48678973</link><guid>https://blog.csdn.net/HellDevil/article/details/48678973</guid><author>HellDevil</author><pubDate>Wed, 23 Sep 2015 13:44:17 +0800</pubDate><description><![CDATA[记得我在2011年8月的一篇文章Android Tombstone/Crash的log分析和定位
介绍了如何分析tombstone。虽然详细介绍了具体的分析方法，但是想要找到具体的出错地点还是比较困难的。
  前段时间在做海思的项目，自己又遇到了和media有关的tombstone的问题，此时非常的纠结。。。百般挫折，终于从芯片的工程师那得知了一个方法可以确认具体的位置。
  废话不多说，方]]></description><category></category></item><item><title><![CDATA[开发日志整理2【android layout用法注意点】]]></title><link>https://blog.csdn.net/HellDevil/article/details/48469585</link><guid>https://blog.csdn.net/HellDevil/article/details/48469585</guid><author>HellDevil</author><pubDate>Tue, 15 Sep 2015 16:57:02 +0800</pubDate><description><![CDATA[记得在开发的时候，想要实现一个动画效果。就是某个控件能够在focus的时候，自身的高度能够向上增长。
实现这个方法有好多种方法。比如采用动态改变控件的高度或者采用layout的方式。
一开始啥也没想，就用了layout方法在属性动画中valueAnimator里面去变化
先看下这个View.layout(int left, int top, int right, int bottom)
它]]></description><category></category></item><item><title><![CDATA[开发日志整理1【android Launcher如何实现多屏循环滑动】]]></title><link>https://blog.csdn.net/HellDevil/article/details/48215007</link><guid>https://blog.csdn.net/HellDevil/article/details/48215007</guid><author>HellDevil</author><pubDate>Sun, 06 Sep 2015 10:54:54 +0800</pubDate><description><![CDATA[最近要开发一款TV上的Launcher，需求上要有三个类似三明治的页面，可以循环滚动，让用户自由切换。想过使用android原生的Launcher。但是分析了下，比较复杂，需要花费时间去理解和学习，由于任务紧迫，而且有特殊的定制要求所以决定采用ViewGroup去实现。下面就详细解决我是是如何实现的。
       首先，我在代码中建立了一个“自定义控件”，这个控件继承与ViewGroup，额。]]></description><category></category></item><item><title><![CDATA[开发日志整理<序>（5/2013-至今）]]></title><link>https://blog.csdn.net/HellDevil/article/details/48214855</link><guid>https://blog.csdn.net/HellDevil/article/details/48214855</guid><author>HellDevil</author><pubDate>Fri, 04 Sep 2015 22:37:37 +0800</pubDate><description><![CDATA[最近在开始整理2013年3月开始到现在的一些开发心得和日志。期间遇到了许许多多的莫名其妙的问题。因此，最后虽然都解决了，但是花费时间颇多。所以接下来，想写一些自己遇到的问题以及最后解决的方式。希望能够帮助自己提高，也希望能够帮助其他人。问题主要其中在android开发，应用层面的比较多，也有其他层面的。]]></description><category></category></item><item><title><![CDATA[Android4.2 Usb Debug启动流程]]></title><link>https://blog.csdn.net/HellDevil/article/details/39472141</link><guid>https://blog.csdn.net/HellDevil/article/details/39472141</guid><author>HellDevil</author><pubDate>Mon, 22 Sep 2014 09:18:11 +0800</pubDate><description><![CDATA[最近自己搞的Android项目，发现设置中的Usb Debug无法启动了，于是]]></description><category></category></item><item><title><![CDATA[Ubuntu14.04上安装tftpd服务]]></title><link>https://blog.csdn.net/HellDevil/article/details/39202159</link><guid>https://blog.csdn.net/HellDevil/article/details/39202159</guid><author>HellDevil</author><pubDate>Thu, 11 Sep 2014 09:23:10 +0800</pubDate><description><![CDATA[准备在自己的Ubuntu14.04上使用tftpd服务，然后在网上查]]></description><category></category></item><item><title><![CDATA[Android4.2 CTS test_getByName Fail解决]]></title><link>https://blog.csdn.net/HellDevil/article/details/39026329</link><guid>https://blog.csdn.net/HellDevil/article/details/39026329</guid><author>HellDevil</author><pubDate>Wed, 03 Sep 2014 13:34:39 +0800</pubDate><description><![CDATA[最近在搞android4.2 的CTS问题，遇到一个]]></description><category></category></item></channel></rss>