Sublime command + b 运行shell

Sublime自带的build system中是没有shell选项的,直接command + b 也是没有任何反应。那我们就只能自己来写一个执行shell的,还好Sublime支持创建Build System。 依次点击Sublime Tools > Build System > New Build System 在弹出框中替换成以下内容: Sublime 3.* { "shell_cmd": "chmod a+x $file && /bin/sh $file" } Sublime 2.* { "cmd" : ["bash", "$file"], "selector" : "source.shell" } 配置后保存(默认路径就行),切换我们刚才新建的build system。Tools > Build Systems > 保存时创建的名字。 再次按command + b就可以直接运行shell了。 以上教程在MAC上Sublime2、3 测试通过,其他版本请自行测试

Read more

类微信底部Tab+ViewPager延缓加载实现

效果分析     Android APP采用底部tab切换效果越来越多,像微信,QQ, 支付宝等巨型APP都是采用这种设计。我们今天要介绍的就是基于这样的设计的一种内存优化方案 - ViewPager延迟加载。先看看微信的效果吧。 滑动过程中看到的是正在加载...,等切换完成才会开始加载页面内容。 android ViewPager默认加载当前页面的前一张和后一张,一般情况下会初始化三个界面,先不考虑三个页面同时加载导致的线程网络阻塞的问题,用户打开app并不需要马上初始化不可见的页面,这部分内存是可以优化的,可见的时候才开始加载内容,这样尽量减少内存的占用。 原理分析和实现效果     我们采用ViewPager + FragmentPagerAdapter来实现底部Tag切换的效果,要实现微信这种效果首先需要在不可见时文本占位提示正在加载..., 其次需要获取到当前页面可见与不可见的事件监听。在可见的时候加载内容。这两条都可以通过重写ViewPager来实现,但是比较麻烦,有兴趣的朋友可以去尝试下。我们这里介绍一种更简单的方案,通过重写Fragment的setUserVisibleHint方法来实现。 我们来看看setUserVisibleHint方法官网文档 setUserVisibleHint() Set a hint to the system about whether this fragment's UI is currently visible to the user. This hint defaults to true and is persistent across fragment instance state save and restore. An app may set this to false to indicate that the fragment's UI

Read more

怎么下载github项目的某个文件夹?

github上提供了git下载和整个项目的zip包下载,有时候项目很大,而你又只想下载某个文件夹的时候就比较麻烦了。整理了下网上的教程如下: 下载master文件夹: 文件夹地址为:https://github.com/alibaba/freeline/tree/master/gradle 本地使用svn checkout  https://github.com/alibaba/freeline/trunk/gradle 就可以了 第一次使用会提示这个 (R)eject, accept (t)emporarily or accept (p)ermanently?  选择p永久接受就好了。 下载Branch文件夹 原理差不多,如文件夹地址为: https://github.com/alibaba/freeline/tree/as_plugin/android-studio-plugin 这是在as_plugin分支下的android-studio-plugin文件夹 svn checkout https://github.com/alibaba/freeline/branches/as_plugin/android-studio-plugin 就可以了 参考:http://www.zhihu.com/question/25369412

Read more

导入intellij plugin项目报错No plugin module specified for configuration

导入intellij IDEA项目总是运行失败,报错No plugin module specified for configuration。 在http://stackoverflow.com/questions/18278440/how-to-import-and-run-existing-plugins-from-intellij-community-edition-repo上找到了答案,原来导入intellij plugin项目默认用的java项目来解析,所以不管怎么设置都添加不了插件项目。 只要把项目根目录的*.iml中MODULE”  改成MODULE”  就可以啦。 还有,别忘了修改plugin.xml的位置,java项目默认在根目录Meta-INF下,而plugin项目在resource下META-INF下。

Read more

java.lang.UnsupportedClassVersionError: Unsupported major.minor version 51.0

用android studio导入项目的过程中发生了这个错误,gradle classpath用的2.0.111,改成1.5或者2.1就报错extConfig找不到。 网上找了很多答案,答案绝大部分都是说用eclipse设置jre为1.7,但是在android里面我确实已经设置1.8了,在sdk location里面的jdk location。 各种google和stackover找答案,绝望之余居然在百度上找到了解决方案 http://www.she.vc/article/18-98390-0.html 在sdk location里面设置jdk是不够的,还需要修改android studio默认启用的jdk版本。MAC在/Application/Android Studio/Contents/info.plist中 AS默认的是:JVMVersion 1.6*,1.7+ 修改为JVMVersion 1.8.+ 如果修改完报错owner pid 和 my pid不匹配之类的错误,重启android studio就好了。

Read more

android手机调试看不到部分logcat日志

看不到logcat的原因是部分手机默认关闭了Log.v(),Log.d(),Log.i()显示,日志毕竟要输出要文件,对性能还是有影响的,对普通用户而已日志没有任何作用,当然这就苦了开发者了,下面提供部分手机的解决方案,欢迎大家补充。 华为手机解决方案 1、进入手机拨号界面2、输入*#*#2846579#*#*3、输入完毕后自动跳转到测试界面 4、依次选择ProjectMenu–>后台设置–>LOG设置–>在此可以看见一些列关于LOG的设置(打开或关闭) 5. 按照自己的需求设置LOG开关 ### [奇酷手机解决方案](http://bbs.qiku.com/thread-111909-1-1.html) 1、在桌面点击拨号,在拨号盘输入“*20121220#”,进入工程模式;2、找到日志输出等级,点击进入;3、点击“Log print enable”,选择“Enable”; 4、点击“Java log level”,选择“LOGV”;

Read more

让gradle task可以执行多次

在开发中遇到这个需求,google也没能找到答案,最后自己解决了,分享出来给大家参考参考。 默认情况下gradle的task都是只能执行一次的,如下面的代码 task a { println("execute function a !!!!!!!!!!!!!!!!!!"); } a.execute() a.execute() a.execute() 运行后发现task a仅仅执行了一次,为啥只执行一次呢,开始分析通过查看 AbstractTask::execute()方法如下 public final void execute() { this.getExecuter().execute(this, this.state, new DefaultTaskExecutionContext()); this.state.rethrowFailure(); } 通过观察发现是the.state的问题,state的类型是TaskStateInternal,里面记录了task当前的状态,executing正在执行,executed执行完成等等 知道这个状态影响了task多次执行,但是我们还是没有解决我们的问题,再来看看TaskExecuter类,TaskExecuter是一个接口,定义了executing()方法 public interface TaskExecuter { void execute(TaskInternal var1, TaskStateInternal var2, TaskExecutionContext var3); } 再来看看TaskExecuter的实现类有哪些? ExecuteAtMostOnceTaskExecuter引起了我的注意,让task最多执行一次的执行器,看看源码 public class ExecuteAtMostOnceTaskExecuter implements TaskExecuter { private static final Logger LOGGER = Logging.getLogger(ExecuteAtMostOnceTaskExecuter.class); private final TaskExecuter executer; public

Read more

java.lang.IllegalArgumentException: Illegal character (d83d)

在使用XmlSerializer过程中遇到了下面这个错误 java.lang.IllegalArgumentException: Illegal character (d83d) at org.kxml2.io.KXmlSerializer.reportInvalidCharacter(KXmlSerializer.java:144) at org.kxml2.io.KXmlSerializer.writeEscaped(KXmlSerializer.java:130) at org.kxml2.io.KXmlSerializer.attribute(KXmlSerializer.java:465) 这是安卓4.4及以下系统的bug,XmlSerializer类不支持emoji表情,google在android4.4以上已经修复了这个问题 崩溃的具体原因目前不是很清楚,网上说是XmlSerializer忽略utf-16编码情况,具体也不是很了解,等后续再来研究一下。 支持4.4以下解决方案如下 将XmlSerializer serializer = Xml.newSerializer(); 替换成XmlSerializer serializer = new KXmlSerializer(); package com.baidu.hi.xml; import java.io.; import java.util.Locale; import org.xmlpull.v1.; /* * source:https://github.com/cgeo/cgeo/issues/2635 * 解决XmlSerializer在android4.4及以下不支持emoji的bug */ public class KXmlSerializer implements XmlSerializer { private static

Read more

Intellij Idea输出可运行jar包

在开发中经常可以看到可以执行的jar包,如paros.jar,双击运行就可以出现界面,而且是跨平台的,只要安装了jdk的设置都可以运行,那这样的jar包是怎么打包的呢? 这得说起我一个apk重签名的工具,一个利用java awt开发的可视化小工具,想把它打包成一个jar包供其他用户使用,我是用的开发工具是intellij idea,像eclipse不在讨论范围,android studio和这个操作一致。 开始上图了,选择右上角项目菜单 选择Artifaces,然后点击+号添加JAR 选择程序入口Main方法 如果你的项目仅仅只有代码,没有起亚资源文件需要打入包中,那你可以直接Apply,然后ok了,跳过下面添加图片这一步。 我的项目中包括了一张图片,resigner.png,而且在res目录下 我要怎么把图片文件打包到jar文件中呢 创建一个文件夹,名字和你包含图片的文件夹一直,我这里叫res 再在这个res目录中包含进去我们项目中的图片, 选择add cope of 选择File,会弹出提示框让我们选择文件 选择resigner.png图片 然后Apply ok就完成配置了 想打包的话,选择Build -> Build Artifacts就好了 打完的包就可以在out > artifacts 下面找到了。

Read more

解决CollapsingToolbarLayout和ViewPager滚动矛盾

参考文档:https://gist.github.com/iPaulPro/1468510f046cb10c51ea 项目用用到了CollapsingToolbarLayout和ViewPager,ViewPager中又包含一个ListView, 类似上图中效果,但是做完的效果是ListView不能推动CollapsingToolbarLayout滚动,困扰了我好久,解决方案请参考上述链接,我贴出我解决问题用的布局 用到LinearLayout仅仅是为了增加一个分割线 我的效果图

Read more