<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Leo-软件开发]]></title><description><![CDATA[枫叶无疆]]></description><link>https://blog.youkuaiyun.com/leogray</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; leogray]]></copyright><item><title><![CDATA[Android WebView注入CSS+JS的项目解决方案]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/80908761</link><guid>https://blog.youkuaiyun.com/leogray/article/details/80908761</guid><author>leogray</author><pubDate>Wed, 04 Jul 2018 12:09:33 +0800</pubDate><description><![CDATA[在某个项目中，由于用到第三方的接口，登录和授权的界面也由第三方提供，而我们是在车机产品上使用，分辨率为800X480。第三方并没有针对这个分辨率的布局，并且不为我们进行修改，就算是高德去推也没有推动。因此，只能使用偏门的方法，之所以说偏门，是因为注入css和js的方式是有风险的，假如web端改了页面，可能我们的app就得跟着升级了。好了，下面开始正题首先，要在WebView注入JS，我们需要开启J...]]></description><category></category></item><item><title><![CDATA[在Android Service中弹出系统全屏对话框]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/79971836</link><guid>https://blog.youkuaiyun.com/leogray/article/details/79971836</guid><author>leogray</author><pubDate>Tue, 17 Apr 2018 11:17:02 +0800</pubDate><description><![CDATA[最终的效果图布局文件就不贴了，这里只写出关键的代码。1、自定义对话框Window window = mAlertDialog.getWindow();//关键代码，设置成ALERT，这样点击back键也无法让对话框消失
window.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
mAlertDialog.show();

//以下代码...]]></description><category></category></item><item><title><![CDATA[Android Studio批量删除重构项目中没有用到的资源文件]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/79631019</link><guid>https://blog.youkuaiyun.com/leogray/article/details/79631019</guid><author>leogray</author><pubDate>Tue, 20 Mar 2018 20:27:19 +0800</pubDate><description><![CDATA[有个项目经历了重构，之前很多的资源文件，如java类文件、xml文件、png图片等都重新定义了，旧的资源文件遗留了很多，如果一个个去删除估计要疯了，还好android studio有个工具可以完成这个事情，这里记录一下。1、从as中选择Analyze-&amp;gt;Run inspection by Name...2、弹出的对话框中输入unused resources并点击下拉列表的对应项3、之后弹出的...]]></description><category></category></item><item><title><![CDATA[MTK andriod5.1编译静态和共享（动态）jar包]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/79579990</link><guid>https://blog.youkuaiyun.com/leogray/article/details/79579990</guid><author>leogray</author><pubDate>Fri, 16 Mar 2018 12:57:06 +0800</pubDate><description><![CDATA[做andriod系统开发，难免要自定义系统jar包供其他应用使用。在android 系统中使用jar包有静态和共享之分，静态jar包相对容易理解一些，编写静态jar的mk文件也更容易，这里分别介绍两种jar的mk编写方式。一、静态jar包以一个带有AIDL接口的jar包编译为例，mk文件内容如下：LOCAL_PATH:= $(call my-dir)/src/main
include $(CLEA...]]></description><category></category></item><item><title><![CDATA[Linux实现自动上传编译产物到FTP服务器]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/79568084</link><guid>https://blog.youkuaiyun.com/leogray/article/details/79568084</guid><author>leogray</author><pubDate>Thu, 15 Mar 2018 15:03:30 +0800</pubDate><description><![CDATA[在进行Android ROM编译的时候有个需求，将编译出来的bin和ota相关的产物自动上传到FTP服务器，这里提供一个自定义shell脚本来完成这个功能。一、编写一个uploadToFtp.sh脚本,内容如下#!/bin/bashupdir=./product  #要上传的文件夹todir=/...]]></description><category></category></item><item><title><![CDATA[MTK androiod5.1源码精简系统APP]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/79567224</link><guid>https://blog.youkuaiyun.com/leogray/article/details/79567224</guid><author>leogray</author><pubDate>Thu, 15 Mar 2018 14:37:26 +0800</pubDate><description><![CDATA[android 的build system有一套加载*.mk进行系统编译配置的复杂逻辑，再加上MTK又根据自己需要自行添加了一些配置文件，所以在网上搜索到很多精简app的 方法，发现并不能完成真正的移除apk。这里提供两种方式，均已经在项目中通过验证。一、简单的验证移除app后系统的状况确定是否要移除某个app之前我们可能需要做一些简单的验证，这个时候我们不需要去修改mk文件，直接到out目录中的...]]></description><category></category></item><item><title><![CDATA[Android Studio打开项目卡死的问题]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/70225735</link><guid>https://blog.youkuaiyun.com/leogray/article/details/70225735</guid><author>leogray</author><pubDate>Tue, 18 Apr 2017 11:09:25 +0800</pubDate><description><![CDATA[Android Studio每次打开项目都会去校验当前项目使用的gradle和build tools的版本，如果有不一致，就会进行网络下载，这本是一件极好的事情，但大家都懂的，由于墙的问题，遇到不一致时，我们的Android Studio就成功的卡死了。
之前试过好多办法，删除项目中不必要的文件夹，文件，让项目自己生成gradle项目文件，或者去修改部分配置，由于是遇到一个问题就查询一个问题，导]]></description><category></category></item><item><title><![CDATA[Android Studio的利器-Live Template]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/68924395</link><guid>https://blog.youkuaiyun.com/leogray/article/details/68924395</guid><author>leogray</author><pubDate>Fri, 31 Mar 2017 16:09:45 +0800</pubDate><description><![CDATA[Android Studio本身自带了很多模板，而我要说的是自定义的文件注释、函数注释模板、以及生成固定格式代码的模板
1、创建文件注释模板
File-Settings-Editor-Live Templates在右边点击+号先创建一个Template Group作为自己定义的分类，名字自己取，如下图




之后选择自己定义的Group再次右边+号按钮选择Live Template]]></description><category></category></item><item><title><![CDATA[Android Studio导入依赖工程]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/68487560</link><guid>https://blog.youkuaiyun.com/leogray/article/details/68487560</guid><author>leogray</author><pubDate>Thu, 30 Mar 2017 16:51:28 +0800</pubDate><description><![CDATA[之前一直纠结于android studio依赖工程application和library的问题，直到某天在AOSP想同时支持AS编译和android.mk编译之后突然意识到了一个问题，这里做一些记录，并验证过可行。我没有去深入研究过gradle，只是对比android.mk后得出了一些自己的理解。
=================================================]]></description><category></category></item><item><title><![CDATA[CentOS QtCreator无法调试的解决办法]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/50035745</link><guid>https://blog.youkuaiyun.com/leogray/article/details/50035745</guid><author>leogray</author><pubDate>Wed, 25 Nov 2015 13:38:28 +0800</pubDate><description><![CDATA[问题：不管是创建Qt程序还是非Qt C/C++程序，在QtCreator进行调试的时候总是跳过断点，直接运行，右下角的launch Debugging 成红色
在网上查过类似 勾选run in terminal等都没用。


由于装的是较新的QtCreator的缘故，需要有支持python的GDB才能进行调试，一开时顺着这个点折腾了好久都没解决。主要还是QtCreator出错提示做的不是太]]></description><category></category></item><item><title><![CDATA[C++实现自己的插件框架 基于QtCreator源码裁剪]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/45025909</link><guid>https://blog.youkuaiyun.com/leogray/article/details/45025909</guid><author>leogray</author><pubDate>Mon, 13 Apr 2015 15:17:06 +0800</pubDate><description><![CDATA[QtCreator2.5.2插件系统裁剪（requiresQt4.7.4 orlater）
前言：一般的系统（非插件系统），在发布之后如果还需要修改，必须重新编译后发布。然而我们总有一些特殊的需求，要求已发布的系统能够动态的修改，而插件系统，可以很好的解决这个问题。实现插件系统首先要预先定义好系统的扩展接口，插件由其他开发人员根据系统预定的接口编写扩展功能。插件都是以一个独立文件的形式出现的。系]]></description><category></category></item><item><title><![CDATA[windows、C++、MFC、Qt项目除错笔记]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/17097293</link><guid>https://blog.youkuaiyun.com/leogray/article/details/17097293</guid><author>leogray</author><pubDate>Tue, 03 Dec 2013 16:53:32 +0800</pubDate><description><![CDATA[项目做了不少了，期间解决的问题估计光靠脚趾头和手指头是数不过来了，因此专门记录，有点懒，能记多少是多少好了。
 
刚好今天解决了两个蛋疼的问题，就先记着，之后再补补以前的好了。
1.首先问题的现象是程序的Release版本崩溃了（Debug没有崩溃），崩溃的位置位于两个CString赋值，CString这货说实话，用了MFC这么久还真没怎么深究过，只依稀记得这货可动态改变缓冲区大小，且是通过]]></description><category></category></item><item><title><![CDATA[VC++界面美化---模仿MS Office 选项对话框]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/12227783</link><guid>https://blog.youkuaiyun.com/leogray/article/details/12227783</guid><author>leogray</author><pubDate>Wed, 02 Oct 2013 00:46:37 +0800</pubDate><description><![CDATA[---把时髦的技术挂在嘴边，还不如把过时的技术记在心里。


先来看看两幅图：
下幅图一是早期的Windows系统中常见的用于选项设置的窗体



下图二是MS Office Word的选项对话框




默认情况下用MFC的CPropertySheet和CPropertyPage创建的属性页就如图一的样子，要实现图二的样子需要做一些额外的工作：
技术及工具集：VS2]]></description><category></category></item><item><title><![CDATA[分享一个VS配色方案网站]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/12219113</link><guid>https://blog.youkuaiyun.com/leogray/article/details/12219113</guid><author>leogray</author><pubDate>Tue, 01 Oct 2013 13:36:24 +0800</pubDate><description><![CDATA[http://studiostyl.es/ 
网站专门为Visual Studio提供配色方案，附有缩略图以及rated(评估)，dls(下载数)，views(浏览数)。

配置方法：

下载时注意选择自己的vs版本。


导入步骤：  

工具（Tool）---->导入和导出设置(Import and Export Settings Wizard)---->保存当前配置，也可]]></description><category></category></item><item><title><![CDATA[变量_代码大全笔记（三）]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/12162121</link><guid>https://blog.youkuaiyun.com/leogray/article/details/12162121</guid><author>leogray</author><pubDate>Sun, 29 Sep 2013 14:15:53 +0800</pubDate><description><![CDATA[test]]></description><category></category></item><item><title><![CDATA[Qt项目小记]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/12152383</link><guid>https://blog.youkuaiyun.com/leogray/article/details/12152383</guid><author>leogray</author><pubDate>Sun, 29 Sep 2013 11:03:24 +0800</pubDate><description><![CDATA[多屏互动指的是IOS Pad 、IOS Phone、Android Pad、Android Phone与电脑的互动，主要完成Pad端远距离操作电脑，操作PPT播放等。对于老师尤其有用，当老师投影PPT讲义之后，拿着手机或者Pad就能走到学生当中，而不需要站在讲台上操作电脑了。


多屏互动为局域网互联，有Wif即可。我负责PC端服务器的设计和开发工作，期间遇到一些问题和解决方案做些记录。]]></description><category></category></item><item><title><![CDATA[Win32多线程程序开发笔记]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/9310479</link><guid>https://blog.youkuaiyun.com/leogray/article/details/9310479</guid><author>leogray</author><pubDate>Fri, 12 Jul 2013 17:47:34 +0800</pubDate><description><![CDATA[一、核心对象

创建线程之后，一般我们都能拿到两个重要的值，一个是HANDLE，大部分与线程相关的API都需要它。另一个是线程ID，线程的ID是一个全局变量，用于独一无二表现系统某个线程。类似于AttachThreadInput()和PostThreadMessage（）就需要用到线程ID。但是为了安全防护的缘故，我们不能根据ID获取到HANDLE。





HANDLE被称为核]]></description><category></category></item><item><title><![CDATA[深度探索C++对象模型笔记（七）]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/9235509</link><guid>https://blog.youkuaiyun.com/leogray/article/details/9235509</guid><author>leogray</author><pubDate>Wed, 03 Jul 2013 18:28:12 +0800</pubDate><description><![CDATA[站在对象模型的尖端
1、Template

Template Instantiation
当编译器看到template class声明时，实际上什么反应也没有，template class中的数据成员，必须通过template class的某个实体来操作。比如，我们可以这样写：
Point :: Status s;//Status是Point的一个枚举类型
但不能这样写:
Point]]></description><category></category></item><item><title><![CDATA[深度探索C++对象模型笔记（六）]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/9212249</link><guid>https://blog.youkuaiyun.com/leogray/article/details/9212249</guid><author>leogray</author><pubDate>Mon, 01 Jul 2013 14:30:30 +0800</pubDate><description><![CDATA[Runtime Semantics

C++的困难之一，就是不容易从代码看出来表达式的复杂，一个类似if(yy == xx.getValue())的简单式子，有可能经历操作符重载，转换运算符-》if( yy.operator == ( xx.getValue.operator Y() ));这些都由编译器暗中进行。

1、对象的构造和析构


一般而言，我们会把object尽可能放置]]></description><category></category></item><item><title><![CDATA[深度探索C++对象模型笔记（五）]]></title><link>https://blog.youkuaiyun.com/leogray/article/details/9196125</link><guid>https://blog.youkuaiyun.com/leogray/article/details/9196125</guid><author>leogray</author><pubDate>Fri, 28 Jun 2013 18:22:33 +0800</pubDate><description><![CDATA[Semantics of Construction，Destruction，and copy


考虑如下abstract base class声明：
class Abstract_base
{
public:
virtual ~Abstract_base() = 0;
virtual void interface() const = 0;
virtual const char* mumbl]]></description><category></category></item></channel></rss>