分类归档 Android

通过admin

采用wifi进行android真机调试(不用数据线)

原文:http://ikinglai.blog.51cto.com/6220785/1191260

     传统的android真机测试的办法都是,先在手机上打开USB开发选项,然后连接数据线,在eclipse的devices中可以看到连接的设备,就可以进行调试了。这种办法的缺点是,必须先安装驱动程序,而且要有数据线。像我的mac电脑上面,很多android手机都是没有驱动的,我之前的笨办法是先把apk拷到sdcard里面,然后从文件管理器安装,显然这种办法比较麻烦,下面就介绍以下wifi调试的办法。

我用wifi测试的主要目的是,因为我的数据线老是换掉,或者被别人借走,而且最严重的是mac电脑很多android驱动没有,根本连接不了,所以只能采用wifi的办法了,发现这种办法还是挺不错的,但是使用有一个前提,就是手机必须连上wifi。

1. 在手机上先装一个wifi adb,这个apk非常小,很快就可以装好,网上搜一下,很多的

2. 打开wifi adb,需要获取root权限,然后会显示 adb connect 192.168.1.101:5555这种的信息,前面的是你的wifi的ip地址,然后是大家很熟悉的5555端口

3. 在你的电脑命令行上,执行命令adb connect 192.168.1.101:5555,成功会提示

 

hejinlai_iMac:platform-tools hejinlai$ ./adb connect 192.168.1.101:5555

connected to 192.168.1.101:5555

这样就表明连接成功了,然后在你的eclipse的devices就可以看到这部设备了,接下来的用法就和之前的一模一样了,怎么样?是不是很方便呢,哈哈

通过admin

Android开源项目分类汇总

【本文系外部转贴,原文地址:https://github.com/Trinea/android-open-project

作者:Trinea    主页:www.trinea.cn    邮箱:trinea.cn@gmail.com    QQ:717763774

说明:原作者一直在维护这份开源项目汇总,想获得最新资源请访问原地址。本人转载时修改了部分描述错误,更换了原文中不能显示的图片。

目前包括:

Android开源项目第一篇——个性化控件(View)篇

  包括ListViewActionBarMenuViewPagerGalleryGridViewImageViewProgressBarTextViewScrollViewTimeViewTipViewFlipViewColorPickViewGraphViewUI Style其他

Android开源项目第二篇——工具库篇

  包括依赖注入图片缓存网络相关数据库ORM工具包Android公共库高版本向低版本兼容库多媒体事件总线传感器安全插件化文件其他

Android开源项目第三篇——优秀项目篇

  比较有意思的完整的Android项目

Android开源项目第四篇——开发及测试工具篇

  包括开发效率工具开发自测相关测试工具开发及编译环境其他

Android开源项目第五篇——优秀个人和团体篇

  乐于分享并且有一些很不错的开源项目的个人组织,包括JakeWharton、Chris Banes、Koushik Dutta等大牛

第一部分 个性化控件(View)

主要介绍那些不错个性化的View,包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、TipView、FlipView、ColorPickView、GraphView、UI Style及其他。

一、ListView

1.    android-pulltorefresh

一个强大的拉动刷新开源项目,支持各种控件下拉刷新,ListView、ViewPager、WevView、ExpandableListView、GridView、ScrollView、Horizontal ScrollView、Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多。并且他实现的下拉刷新ListView在item不足一屏情况下也不会显示刷新提示,体验更好。

项目地址:https://github.com/chrisbanes/Android-PullToRefresh

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refreshview-demo.apk?raw=true

APP示例:新浪微博各个页面

2.    android-pulltorefresh-listview

下拉刷新ListView

项目地址:https://github.com/johannilsson/android-pulltorefresh

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refresh-listview-demo.apk?raw=true

PS:这个被很多人使用的项目实际有不少bug,推荐使用上面的android-pulltorefresh

3.    DropDownListView

下拉刷新及滑动到底部加载更多ListView

项目地址:https://github.com/Trinea/AndroidCommon

Demo地址:https://play.google.com/store/apps/details?id=cn.trinea.android.demo

文档介绍:http://www.trinea.cn/android/dropdown-to-refresh-and-bottom-load-more-listview/

4.    DragSortListView

拖动排序的ListView,同时支持ListView滑动item删除,各个Item高度不一、单选、复选、CursorAdapter做为适配器、拖动背景变化等

项目地址:https://github.com/bauerca/drag-sort-listview

Demo地址:https://play.google.com/store/apps/details?id=com.mobeta.android.demodslv

APP示例:Wordpress Android

5.    SwipeListView

支持定义ListView左右滑动事件,支持左右滑动位移,支持定义动画时间

项目地址:https://github.com/47deg/android-swipelistview

Demo地址:https://play.google.com/store/apps/details?id=com.fortysevendeg.android.swipelistview

APP示例:微信

6.    Android-SwipeToDismiss

滑动Item消失ListView

项目地址:https://github.com/romannurik/Android-SwipeToDismiss

支持3.0以下版本见:https://github.com/JakeWharton/SwipeToDismissNOA

Demo地址:https://github.com/JakeWharton/SwipeToDismissNOA/SwipeToDismissNOA.apk/qr_code

7.    StickyListHeaders

GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView,支持快速滑动,支持Android2.3及以上

项目地址:https://github.com/emilsjolander/StickyListHeaders

APP示例:Android 4.0联系人

效果图:

8.    pinned-section-listview

GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView

项目地址:https://github.com/beworker/pinned-section-listview

效果图:

9.    PinnedHeaderListView

GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的ExpandListView

项目地址:https://github.com/JimiSmith/PinnedHeaderListView

10.  QuickReturnHeader

ListView/ScrollView的header或footer,当向下滚动时消失,向上滚动时出现

项目地址:https://github.com/ManuelPeinado/QuickReturnHeader

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/quick-return-header-demo.apk?raw=true

APP示例:google plus

11.  IndexableListView

ListView右侧会显示item首字母快捷索引,点击可快速滑动到某个item

项目地址:https://github.com/woozzu/IndexableListView

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/indexable-listview.apk?raw=true

APP示例:微信通讯录、小米联系人

12.  CustomFastScrollView

ListView快速滑动,同时屏幕中间PopupWindows显示滑动到的item内容或首字母

项目地址:https://github.com/nolanlawson/CustomFastScrollViewDemo

效果图:

13.  Android-ScrollBarPanel

ListView滑动时固定的Panel指示显示在scrollbar旁边

项目地址:https://github.com/rno/Android-ScrollBarPanel

效果展示:https://github.com/rno/Android-ScrollBarPanel/raw/master/demo_capture.png

14.  SlideExpandableListView

用户点击listView item滑出固定区域,其他item的区域收缩

项目地址:https://github.com/tjerkw/Android-SlideExpandableListView

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/slide-expandable-listView-demo.apk?raw=true

15.  JazzyListView

ListView及GridView item以特殊动画效果进入屏幕,效果包括grow、cards、curl、wave、flip、fly等等

项目地址:https://github.com/twotoasters/JazzyListView

Demo地址:https://play.google.com/store/apps/details?id=com.twotoasters.jazzylistview.sample

效果展示:http://lab.hakim.se/scroll-effects/

16.  ListViewAnimations

带Item显示动画的ListView,动画包括底部飞入、其他方向斜飞入、下层飞入、渐变消失、滑动删除等

项目地址:https://github.com/nhaarman/ListViewAnimations

Demo地址:https://play.google.com/store/apps/details?id=com.haarman.listviewanimations

APP示例:Google plus、Google Now卡片式进入、小米系统中应用商店、联系人、游戏中心、音乐、文件管理器的ListView、Ultimate、Light Flow Lite、TreinVerkeer、Running Coach、Pearl Jam Lyrics、Calorie Chart、Car Hire、Super BART、DK FlashCards、Counter Plus、Voorlees Verhaaltjes 2.0

17.  DevsmartLib-Android

横向ListView

项目地址:https://github.com/dinocore1/DevsmartLib-Android

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/horizontal-listview-demo.apk?raw=true

18.  HorizontalVariableListView

支持Item宽度不一致的ListView

项目地址:https://github.com/sephiroth74/HorizontalVariableListView

19.  LinearListView

用LinearLayout实现的ListView,可解决多个ListView并且等问题。目前自己也有需要,等亲自尝试过后会再具体介绍

项目地址:https://github.com/frankiesardo/LinearListView

20.  MultiChoiceAdapter

支持多选的ListView Adapter

项目地址:https://github.com/ManuelPeinado/MultiChoiceAdapter

Demo地址:https://play.google.com/store/apps/details?id=com.manuelpeinado.multichoiceadapter.demo

21.  EnhancedListView

支持横向滑动滑动删除列表项以及撤销删除的ListView,该项目的前身是SwipeToDismissUndoList

项目地址:https://github.com/timroes/EnhancedListView

Demo地址:https://play.google.com/store/apps/details?id=de.timroes.android.listviewdemo&rdid=de.timroes.android.listviewdemo

22.  ListBuddies

自动滚动的双列ListView ,两个ListView滚动速度不一致,有视差效果

项目地址:https://github.com/jpardogo/ListBuddies

Demo地址:https://play.google.com/store/apps/details?id=com.jpardogo.android.listbuddies

效果展示:

二、ActionBar

1.    ActionBarSherlock

为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题

项目地址:https://github.com/JakeWharton/ActionBarSherlock

Demo地址:https://play.google.com/store/apps/details?id=com.actionbarsherlock.sample.demos

APP示例:太多了。。现在连google都在用

2.    ActionBar-PullToRefresh

下拉刷新,ActionBar出现加载中提示

项目地址:https://github.com/chrisbanes/ActionBar-PullToRefresh

Demo地址:https://play.google.com/store/apps/details?id=uk.co.senab.actionbarpulltorefresh.samples.stock

APP示例:Gmail,Google plus,知乎等

3.    FadingActionBar

ListView向下滚动逐渐显现的ActionBar

项目地址:https://github.com/ManuelPeinado/FadingActionBar

Demo地址:https://play.google.com/store/apps/details?id=com.manuelpeinado.fadingactionbar.demo

APP示例:google music,知乎

4.    NotBoringActionBar

google music下拉收缩的ActionBar

项目地址:https://github.com/flavienlaurent/NotBoringActionBar

Demo地址:http://flavienlaurent.com/blog/2013/11/20/making-your-action-bar-not-boring/

APP示例:Google音乐

5.    RefreshActionItem

带进度显示和刷新按钮的ActionBar

项目地址:https://github.com/ManuelPeinado/RefreshActionItem

Demo地址:https://play.google.com/store/apps/details?id=com.manuelpeinado.refreshactionitem.demo

APP示例:The New York Times,DevAppsDirect.

6.    GlassActionBar

类似玻璃的有一定透明度的ActionBar

项目地址:https://github.com/ManuelPeinado/GlassActionBar

Demo地址:https://play.google.com/store/apps/details?id=com.manuelpeinado.glassactionbardemo

APP示例:google music

三、Menu

1.    MenuDrawer

滑出式菜单,通过拖动屏幕边缘滑出菜单,支持屏幕上下左右划出,支持当前View处于上下层,支持Windows边缘、ListView边缘、ViewPager变化划出菜单等。

项目地址:https://github.com/SimonVT/android-menudrawer

Demo地址:http://simonvt.github.io/android-menudrawer/

APP示例:Gmail、Google Music等大部分google app

2.    SlidingMenu

滑出式菜单,通过拖动屏幕边缘滑出菜单,支持屏幕左右划出,支持菜单zoom、scale、slide up三种动画样式出现。

项目地址:https://github.com/jfeinstein10/SlidingMenu

Demo地址:https://play.google.com/store/apps/details?id=com.slidingmenu.example

APP示例:Foursquare, LinkedIn, Zappos, Rdio, Evernote Food, Plume, VLC for Android, ESPN ScoreCenter, MLS MatchDay, 9GAG, Wunderlist 2, The Verge, MTG Familiar, Mantano Reader, Falcon Pro (BETA), MW3 Barracks

MenuDrawer和SlidingMenu比较:SlidingMenu支持菜单动画样式出现,MenuDrawer支持菜单view处于内容的上下层

3.    ArcMenu

支持类似Path的左下角动画旋转菜单及横向划出菜单、圆心弹出菜单

项目地址:https://github.com/daCapricorn/ArcMenu

APP示例:Path

效果图:

https://dl.dropboxusercontent.com/u/11369687/preview1.png

https://dl.dropboxusercontent.com/u/11369687/raymenu.png

4.    android-satellite-menu

类似Path的左下角动画旋转菜单

项目地址:https://github.com/siyamed/android-satellite-menu

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/satellite-menu-demo.apk?raw=true

APP示例:Path

5.    radial-menu-widget

圆形菜单,支持二级菜单

项目地址:https://code.google.com/p/radial-menu-widget/

效果图:http://farm8.staticflickr.com/7377/11621125154_d1773c2dcc_o.jpg

6.    Android Wheel Menu

圆形旋转选取菜单

项目地址:https://github.com/anupcowkur/Android-Wheel-Menu

效果图:

7.    FoldingNavigationDrawer

滑动并以折叠方式打开菜单

项目地址:https://github.com/tibi1712/FoldingNavigationDrawer-Android

Demo地址:https://play.google.com/store/apps/details?id=com.ptr.folding.sample

效果图:

8.    AndroidResideMenu

仿 Dribbble 的边栏菜单

项目地址:https://github.com/SpecialCyCi/AndroidResideMenu

效果图:

四、ViewPager 、Gallery

1.    Android-ViewPagerIndicator

配合ViewPager使用的Indicator,支持各种位置和样式

项目地址:https://github.com/JakeWharton/Android-ViewPagerIndicator

Demo地址:https://play.google.com/store/apps/details?id=com.viewpagerindicator.sample

APP示例:太多了。。

2.    JazzyViewPager

支持Fragment切换动画的ViewPager,动画包括转盘、淡入淡出、翻页、层叠、旋转、方块、翻转、放大缩小等

项目地址:https://github.com/jfeinstein10/JazzyViewPager

Demo地址:https://github.com/jfeinstein10/JazzyViewPager/blob/master/JazzyViewPager.apk?raw=true

效果类似桌面左右切换的各种效果,不过桌面并非用ViewPager实现而已

3.    Android-DirectionalViewPager

支持横向和纵向(垂直)的ViewPager

项目地址:https://github.com/JakeWharton/Android-DirectionalViewPager

Demo地址:https://market.android.com/details?id=com.directionalviewpager.sample

4.    android-pulltorefresh

支持下拉刷新的ViewPager

项目地址:https://github.com/chrisbanes/Android-PullToRefresh

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/pull-to-refreshview-demo.apk?raw=true

APP示例:新浪微博各个页面

5.    FancyCoverFlow

支持Item切换动画效果的类似Gallery View

项目地址:https://github.com/davidschreiber/FancyCoverFlow

Demo地址:https://play.google.com/store/apps/details?id=at.technikum.mti.fancycoverflow.samples

效果图:

6.    AndroidTouchGallery

支持双击或双指缩放的Gallery(用ViewPager实现),相比下面的PhotoView,在被放大后依然能滑到下一个item,并且支持直接从url和文件中获取图片,

项目地址:https://github.com/Dreddik/AndroidTouchGallery

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/touch-gallery-demo.apk?raw=true

APP示例:类似微信中查看聊天记录图片时可双击放大,并且放大情况下能正常左右滑动到前后图片

7.    Android Auto Scroll ViewPager

Android自动滚动 轮播循环的ViewPager

项目地址:https://github.com/Trinea/android-auto-scroll-view-pager

Demo地址:https://play.google.com/store/apps/details?id=cn.trinea.android.demo

文档介绍:http://www.trinea.cn/android/auto-scroll-view-pager/

8.    Salvage view

带View缓存的Viewpager PagerAdapter,很方便使用

项目地址:https://github.com/JakeWharton/salvage

9.    Android PagerSlidingTabStrip

配合ViewPager使用的Indicator,支持ViewPager Scroll时Indicator联动

项目地址:https://github.com/astuetz/PagerSlidingTabStrip

Demo地址:https://play.google.com/store/apps/details?id=com.astuetz.viewpager.extensions.sample

10.  ViewPager3D

ViewPager3D效果

项目地址:https://github.com/inovex/ViewPager3D

11.  AnimaTabsview

仿网易云音乐标签切换的动画,带透明小三角

项目地址: https://github.com/wuyexiong/transparent-over-animtabsview

在线演示:http://v.youku.com/v_show/id_XNzA4MjY5NjA0.html

五、GridView

1.    StaggeredGridView

允许非对齐行的GridView,类似Pinterest的瀑布流,并且跟ListView一样自带View缓存,继承自ViewGroup

项目地址:https://github.com/maurycyw/StaggeredGridView

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/staggered-gridview-demo.apk?raw=true

APP示例:Pinterest等

2.    AndroidStaggeredGrid

允许非对齐行的GridView,类似Pinterest的瀑布流,继承自AbsListView

项目地址:https://github.com/etsy/AndroidStaggeredGrid

APP示例:Pinterest等

3.    PinterestLikeAdapterView

允许非对齐行的GridView,类似Pinterest的瀑布流,允许下拉刷新

项目地址:https://github.com/GDG-Korea/PinterestLikeAdapterView

APP示例:Pinterest等

4.    DraggableGridView

Item可拖动交换位置的GridView,实际是自己继承ViewGroup实现,类似桌面的单屏效果,可屏幕自动上下滚动进行Item移动交换,多屏效果见下面PagedDragDropGrid

项目地址:https://github.com/thquinn/DraggableGridView

Demo地址:https://github.com/thquinn/DraggableGridView/blob/master/bin/DraggableGridViewSample.apk?raw=true

5.    StickyGridHeaders

GroupName滑动到顶端时会固定不动直到另外一个GroupName到达顶端的GridView

项目地址:https://github.com/TonicArtos/StickyGridHeaders

效果图:

6.    PagedDragDropGrid

Item可拖动交换位置、拖动删除的自定义控件,实际是自己继承ViewGroup实现,类似桌面的多屏效果,可拖动到屏幕边缘,屏幕自动左右滚动进行Item移动交换,可拖动进行删除,单屏效果见上面DraggableGridView

项目地址:https://github.com/mrKlar/PagedDragDropGrid

在线演示:http://youtu.be/FYTSRfthSuQ

7.    Android-DraggableGridViewPager

Item可拖动交换位置的GridView,实际是自己继承ViewGroup实现,类似桌面的多屏效果,可屏幕自动左右滚动进行Item移动交换,单屏效果见上面DraggableGridView

项目地址:https://github.com/zzhouj/Android-DraggableGridViewPager

Demo地址:https://github.com/Trinea/trinea-download/blob/master/draggable-grid-viewpager-demo.apk?raw=true

六、ImageView

1.    PhotoView

支持双击或双指缩放的ImageView,在ViewPager等Scrolling view中正常使用,相比上面的AndroidTouchGallery,不仅支持ViewPager,同时支持单个ImageView

项目地址:https://github.com/chrisbanes/PhotoView

Demo地址:https://play.google.com/store/apps/details?id=uk.co.senab.photoview.sample

APP示例:photup

2.    android-gif-drawable

支持gif显示的view,用jni实现的,编译生成so库后直接xml定义view即可,而且本身不依赖于其他开源项目所以相对下面的ImageViewEx简单的多

项目地址:https://github.com/koral–/android-gif-drawable

3.    ImageViewEx

支持Gif显示的ImageView

项目地址:https://github.com/frapontillo/ImageViewEx

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/imageviewex-demo.apk?raw=true

依赖很多,编译过程很繁琐!|_|!

4.    RoundedImageView

带圆角的ImageView

项目地址:https://github.com/vinc3m1/RoundedImageView

效果图:

5.    ColorArt

根据图片的均色设置背景色显示文字和图片,类似itune11中效果

项目地址:https://github.com/MichaelEvans/ColorArt

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/color-art-demo.apk?raw=true

6.    CircleImageView

圆形的ImageView

项目地址:https://github.com/hdodenhof/CircleImageView

效果图:

7.    ImageViewZoom

支持放大和平移的ImageView

项目地址:https://github.com/sephiroth74/ImageViewZoom

APP示例:https://play.google.com/store/apps/details?id=com.aviary.android.feather

8.    KenBurnsView

实现Ken Burns effect效果,达到身临其境效果的ImageView

项目地址:https://github.com/flavioarfaria/KenBurnsView

9.    CustomShapeImageView

各种形状的ImageView, 相比上面的圆形ImageView,多了更多形状

项目地址:https://github.com/MostafaGazar/CustomShapeImageView

效果图:

七、ProgressBar

1.    SmoothProgressBar

水平进度条

项目地址:https://github.com/castorflex/SmoothProgressBar

Demo地址:https://play.google.com/store/apps/details?id=fr.castorflex.android.smoothprogressbar.sample

2.    ProgressWheel

支持进度显示的圆形ProgressBar

项目地址:https://github.com/Todd-Davies/ProgressWheel

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/progress-wheel-demo.apk?raw=true

3.    android-square-progressbar

在图片周围显示进度

项目地址:https://github.com/mrwonderman/android-square-progressbar

Demo地址:https://play.google.com/store/apps/details?id=net.yscs.android.square_progressbar_example

APP示例:square

效果图:

4.    HoloCircularProgressBar

Android4.1 时钟App样式

项目地址:https://github.com/passsy/android-HoloCircularProgressBar

APP示例:Android4.1时钟App

效果图:

5.    ProgressButton

通过图钉的不同状态显示进度

项目地址:https://github.com/f2prateek/progressbutton

文档介绍:http://f2prateek.com/progressbutton/

效果图:

6.    GoogleProgressBar

类似google 多个圆形卡片翻转的progressBar

项目地址:https://github.com/jpardogo/GoogleProgressBar

效果图:

 

 

7.    TH-ProgressButton

带圆形进度显示的按钮

项目地址;https://github.com/torryharris/TH-ProgressButton

效果图:

 

 

 

8.    NumberProgressBar

带数字进度的进度条

项目地址:https://github.com/daimajia/NumberProgressBar

效果图:

八、TextView

包括TextView及所有继承自TextView控件,如EditText、Button、RadioButton

1.    android-flowtextview

文字自动环绕其他View的Layout

项目地址:https://code.google.com/p/android-flowtextview/

效果图:http://i949.photobucket.com/albums/ad332/vostroman1500/1.png

2.    Android Form EditText

验证输入合法性的编辑框,支持输入、英文、ip、url等多种正则验证

项目地址:https://github.com/vekexasia/android-edittext-validator

Demo地址:https://play.google.com/store/apps/details?id=com.andreabaccega.edittextformexample

3.    Emojicon

支持emojis的TextView和EditText

项目地址:https://github.com/rockerhieu/emojicon

文档地址:http://rockerhieu.com/emojicon/

4.    Android-circlebutton

Android圆形按钮,实际实现是继承自ImageView

项目地址:https://github.com/markushi/android-circlebutton

Demo地址:https://github.com/markushi/android-circlebutton/blob/master/example/example.apk

5.    Segmented Radio Buttons for Android

iOS’s segmented controls的实现

项目地址:https://github.com/vinc3m1/android-segmentedradiobutton

Demo地址:https://github.com/thquinn/DraggableGridView/blob/master/bin/DraggableGridViewSample.apk?raw=true

效果图:

6.    Chips EditText Library

支持国家名字联想从而选择显示该国国旗的EditText,实际就是通过SpannableStringBuilder实现

项目地址:https://github.com/kpbird/chips-edittext-library

Demo地址:https://github.com/kpbird/chips-edittext-library/tree/master/ChipsEditTextDemo/bin

7.    AutoFitTextView

可固定边界内容字体大小自适应的TextView

项目地址:https://github.com/grantland/android-autofittextview

8.    Shimmer for Android

文字发淡光的TextView

项目地址:https://github.com/RomainPiel/Shimmer-android

9.    Titanic

可以显示水位上升下降(水波荡漾)的TextView

项目地址:https://github.com/RomainPiel/Titanic

效果图:

10.  Android-iconify

提供带Icon的TextView,Menu,Button等

项目地址:https://github.com/JoanZapata/android-iconify

11.  Calligraphy

让我们在android开发中使用自定义字体变得更加简单

项目地址 :https://github.com/chrisjenx/Calligraphy

效果图:

12.  CreditsRoll

类似星球大战字幕效果的TextView

项目地址:https://github.com/frakbot/CreditsRoll

13.  android-process-buton

带加载或提交进度的Button

项目地址:https://github.com/dmytrodanylyk/android-process-buton

14.  FButton

扁平化的Button

项目地址:https://github.com/hoang8f/android-flat-button

Demo地址:https://play.google.com/store/apps/details?id=info.hoang8f.fbutton.demo

九、ScrollView

1.    Discrollview

支持滚动时Item淡入淡出,平移,缩放效果的ScrollView

项目地址:https://github.com/flavienlaurent/discrollview

Demo地址:https://github.com/flavienlaurent/discrollview/raw/master/sample.apk

2.    PullScrollView

仿照新浪微博Android客户端个人中心的ScrollView,下拉背景伸缩回弹效果。

项目地址:https://github.com/MarkMjw/PullScrollView

效果图:

3.    ParallaxScrollView

支持视差滚动的ScrollView ,背景图片的滚动速度小于ScrollView中子控件的滚动速度

项目地址:https://github.com/chrisjenx/ParallaxScrollView

Demo地址:http://cloud.github.com/downloads/chrisjenx/ParallaxScrollView/ParallaxScrollViewDemo-v1.0.5.apk

十、TimeView

包括TimePicker、DatePicker、CalendarView、Clock等时间相关控件

1.    android-times-square

Android日历时间部件,支持选取单个日期,多个日期,及日期区间段和对话框形式显示

项目地址:https://github.com/square/android-times-square

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/times-square-demo.apk?raw=true

2.    android-calendar-card

日历

项目地址:https://github.com/kenumir/android-calendar-card

Demo地址:https://play.google.com/store/apps/details?id=com.wt.calendarcardsample

效果图:

3.    AndroidWheel

Android Wheel支持城市、多种日期时间、密码、图片

项目地址:https://code.google.com/p/android-wheel/

效果图:

4.    GoogleDateTimePickers

时间选择部件

项目地址:https://github.com/Mirkoddd/GoogleDateTimePickers

文档地址:https://play.google.com/store/apps/details?id=com.mirko.sample&hl=it

十一、TipView

包括Toast、角标、UndoBar等提示性控件

1.    Crouton

丰富样式的Toast,允许alert、comfirm、info样式及点击消失样式,允许设置Toast显示时间,允许自定义View。 本文32. SuperToasts为其扩展版

项目地址:https://github.com/keyboardsurfer/Crouton

Demo地址:http://play.google.com/store/apps/details?id=de.keyboardsurfer.app.demo.crouton

2.    supertooltips

带动画效果的Tips显示

项目地址:https://github.com/nhaarman/supertooltips

Demo地址:https://play.google.com/store/apps/details?id=com.haarman.supertooltips

3.    Android ViewBadger

为其他View添加角标等

项目地址:https://github.com/jgilfelt/android-viewbadger

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/android-viewbadger.apk?raw=true

效果图:

4.    SuperToasts

更丰富样式的toast,支持Button、Progress、Horizontal Progress样式、支持进入动画、支持撤销及其动画设置

项目地址:https://github.com/JohnPersano/SuperToasts

Demo地址:https://play.google.com/store/apps/details?id=com.supertoastsdemo

效果图:

5.    UndoBar

屏幕底部显示取消或是确认的PopupWindows

项目地址:https://github.com/soarcn/UndoBar

效果图:

6.    UndoBar

屏幕底部显示取消或是确认某操作

项目地址:https://github.com/jenzz/Android-UndoBar

效果图:

十二、FlipView

1.    android-flip

类似Flipboard翻转动画的实现

项目地址:https://github.com/openaphid/android-flip

Demo地址:https://github.com/openaphid/android-flip/blob/master/FlipView/Demo/APK/Aphid-FlipView-Demo.apk?raw=true

APP示例:flipboard

2.    FlipImageView

支持x、y、z及动画选择的翻转动画的实现

项目地址:https://github.com/castorflex/FlipImageView

Demo地址:https://play.google.com/store/apps/details?id=fr.castorflex.android.flipimageview

3.    FoldableLayout

Flip翻转效果的ListView,目前还不支持ListView缓存

项目地址:https://github.com/alexvasilkov/FoldableLayout

Demo地址:http://play.google.com/store/apps/details?id=com.alexvasilkov.foldablelayout.sample

十三、ColorPickView

1.    ColorPickerView

颜色选择器,支持PopupWindows或新的Activity中打开

项目地址:https://code.google.com/p/color-picker-view/

效果图:

2.    HoloColorPicker

颜色选择器

项目地址:https://github.com/LarsWerkman/HoloColorPicker

Demo地址:https://docs.google.com/file/d/0BwclyDTlLrdXRzVnTGJvTlRfU2s/edit

3.    ColorPickerPreference

颜色选择器

项目地址:https://github.com/attenzione/android-ColorPickerPreference

效果图:

十四、GraphView

1.    achartengine

强大的图表绘制工具,支持折线图、面积图、散点图、时间图、柱状图、条图、饼图、气泡图、圆环图、范围(高至低)条形图、拨号图/表、立方线图及各种图的结合

项目地址:https://code.google.com/p/achartengine/

官方网站:http://www.achartengine.org/

效果图:

http://www.achartengine.org/dimages/sales_line_and_area_chart.png

http://www.achartengine.org/dimages/temperature_range_chart.png

http://www.achartengine.org/dimages/combined_chart.png

http://www.achartengine.org/dimages/budget_chart.png

APP示例:Wordpress Android,Google Analytics

2.    GraphView

绘制图表和曲线图的View,可用于Android上的曲形图、柱状图、波浪图展示

项目地址:https://github.com/jjoe64/GraphView

Demo地址:https://play.google.com/store/apps/details?id=com.sothree.umano

Demo项目:https://github.com/jjoe64/GraphView-Demos

APP示例:Wordpress Android,Google Analytics

3.    HoloGraphLibrary

绘制现状图、柱状图、饼状图

项目地址:https://bitbucket.org/danielnadeau/holographlibrary/src

文档介绍:https://bitbucket.org/danielnadeau/holographlibrary/wiki/Home

十五、UI Style

不同样式的系统UI风格,如IOS、Bootstrap风格

1.    UITableView

ios风格控件,包括Button、ListView、TableView

项目地址:https://github.com/thiagolocatelli/android-uitableview

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/ui-tableview-demo.apk?raw=true

2.    ATableView

ios风格控件

项目地址:https://github.com/dmacosta/ATableView

Demo地址:https://play.google.com/store/apps/details?id=com.nakardo.atableview.demo

3.    Cards-UI

卡片式View,支持单个卡片,item为卡片的ListView

项目地址:https://github.com/afollestad/Cards-UI

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/cards-ui-demo.apk?raw=true

4.    cardslib

卡片式View,支持单个卡片,item为卡片的ListView和GridView

项目地址:https://github.com/gabrielemariotti/cardslib

Demo地址:https://play.google.com/store/apps/details?id=it.gmariotti.cardslib.demo

5.    Android-Bootstrap

Bootstrap 风格的按钮

项目地址: https://github.com/Bearded-Hen/Android-Bootstrap

效果图:

十六、其他

1.    SwipeBackLayout

左右或向上滑动返回的Activity

项目地址:https://github.com/Issacw0ng/SwipeBackLayout

Demo地址:https://play.google.com/store/apps/details?id=me.imid.swipebacklayout.demo

APP示例:知乎

2.    android-styled-dialogs

可自定义样式的dialog,默认与Holo主题样式一致,在Android2.2以上同一样式

项目地址:https://github.com/inmite/android-styled-dialogs

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/styled-dialogs-demo.apk?raw=true

3.    Android Sliding Up Panel

可拖动的View,能在当前Activity上扶起一个可拖动的Panel

项目地址:https://github.com/umano/AndroidSlidingUpPanel

Demo地址:https://play.google.com/store/apps/details?id=com.sothree.umano

APP示例:Google Music精简播放栏

4.    AndroidWheel

Android Wheel支持城市、多种日期时间、密码、图片

项目地址:https://code.google.com/p/android-wheel/

效果图:

5.    TableFixHeaders

第一列固定的Table

项目地址:https://github.com/InQBarna/TableFixHeaders

Demo地址:http://bit.ly/13buAIq

6.    Inscription

可用于展示应用change和new feature信息

项目地址:https://github.com/MartinvanZ/Inscription

7.    ActivityTransition

Activity切换动画,包括渐变、flip、某个位置进入等等

项目地址:https://github.com/ophilbert/ActivityTransition

使用介绍:https://github.com/jfeinstein10/JazzyViewPager/blob/master/JazzyViewPager.apk?raw=true

效果图:类似桌面左右切换的各种效果,不过桌面并非用ViewPager实现而已

8.    GlowPadBackport

将Android4.2的锁屏界面解锁扩展到Android1.6及1.6+

项目地址:https://github.com/rock3r/GlowPadBackport

Demo地址:https://play.google.com/store/apps/details?id=net.sebastianopoggi.samples.ui.GlowPadSample

效果图:

9.    GlowPadView

Android4锁屏界面解锁

项目地址:https://github.com/nadavfima/GlowPadView

效果图:https://raw.github.com/nadavfima/GlowPadView/master/example.png

10.  android-lockpattern

Android的图案密码解锁

项目地址:https://code.google.com/p/android-lockpattern/

Demo地址:https://play.google.com/store/apps/details?id=group.pals.android.lib.ui.lockpattern.demo

使用介绍:https://code.google.com/p/android-lockpattern/wiki/QuickUse

APP示例:Android开机的图案密码解锁,支付宝的密码解锁

11.  RangeBar

类似于SeekBar,不同的是可以选择一个范围内的值而不是单个值

项目地址:https://github.com/edmodo/range-bar

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/range-bar-demo.apk?raw=true

效果图:

12.  ChromeView

利用Chromium实现的WebView,解决各个Android版本WebView不同的问题,同时利用最新Chrome代码

项目地址:https://github.com/pwnall/chromeview

13.  Android Slider Preference Library

可添加到设置中的基于对话框的RankBar小部件

项目地址:https://github.com/jayschwa/AndroidSliderPreference

14.  ShowcaseView library

用于高亮显示应用程序的特定部分,从而突出突出重点

项目地址:https://github.com/amlcurran/ShowcaseView

15.  android-segmented-control

Android上的Segmented Controls,相当于RadioButton组

项目地址:https://github.com/hoang8f/android-segmented-control

16.  Swipeable Cards

类似Tinder的卡片效果,可以加载图片并动画效果展示,向左滑动表示喜欢,向右表示不喜欢

项目地址:https://github.com/kikoso/Swipeable-Cards

Demo地址:https://play.google.com/store/apps/details?id=info.hoang8f.fbutton.demo

17.  EdgeEffectOverride

改变ScrollView, ListView, ExpandableListView, GridView, ViewPager等滚动控件滚动到边缘的颜色效果

项目地址:https://github.com/AndroidAlliance/EdgeEffectOverride

第二部分 工具库

主要包括那些不错的开发库,包括依赖注入框架、图片缓存、网络相关、数据库ORM建模、Android公共库、Android 高版本向低版本兼容、多媒体相关及其他。

一、依赖注入DI

通过依赖注入减少View、服务、资源简化初始化,事件绑定等重复繁琐工作

1.    AndroidAnnotations(Code Diet)

android快速开发框架

项目地址:https://github.com/excilys/androidannotations

文档介绍:https://github.com/excilys/androidannotations/wiki

官方网站:http://androidannotations.org/

特点:(1) 依赖注入:包括view,extras,系统服务,资源等等

(2) 简单的线程模型,通过annotation表示方法运行在ui线程还是后台线程

(3) 事件绑定:通过annotation表示view的响应事件,不用在写内部类

(4) REST客户端:定义客户端接口,自动生成REST请求的实现

(5) 没有你想象的复杂:AndroidAnnotations只是在在编译时生成相应子类

(6) 不影响应用性能:仅50kb,在编译时完成,不会对运行时有性能影响。

PS:与roboguice的比较:roboguice通过运行时读取annotations进行反射,所以可能影响应用性能,而AndroidAnnotations在编译时生成子类,所以对性能没有影响

2.    roboguice

帮你处理了很多代码异常,利用annotation使得更少的代码完成项目

项目地址:https://github.com/roboguice/roboguice

文档介绍:https://github.com/roboguice/roboguice/wiki

3.    butterknife

利用annotation帮你快速完成View的初始化,减少代码

项目地址:https://github.com/JakeWharton/butterknife

文档介绍:http://jakewharton.github.io/butterknife/

4.    Dagger

依赖注入,适用于Android和Java

项目地址:https://github.com/square/dagger

文档介绍:http://square.github.io/dagger/

二、图片缓存

1.    Android-Universal-Image-Loader

图片缓存,目前使用最广泛的图片缓存,支持主流图片缓存的绝大多数特性。

项目地址:https://github.com/nostra13/Android-Universal-Image-Loader

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/universal-imageloader-demo.apk?raw=true

文档介绍:http://www.intexsoft.com/blog/item/74-universal-image-loader-part-3.html

2.    picasso

square开源的图片缓存

项目地址:https://github.com/square/picasso

文档介绍:http://square.github.io/picasso/

特点:(1)可以自动检测adapter的重用并取消之前的下载

(2)图片变换

(3)可以加载本地资源

(4)可以设置占位资源

(5)支持debug模式

3.    ImageCache

图片缓存,包含内存和Sdcard缓存

项目地址:https://github.com/Trinea/AndroidCommon

Demo地址:https://play.google.com/store/apps/details?id=cn.trinea.android.demo

文档介绍:http://www.trinea.cn/android/android-imagecache/

特点:(1)支持预取新图片,支持等待队列

(2)包含二级缓存,可自定义文件名保存规则

(3)可选择多种缓存算法(FIFO、LIFO、LRU、MRU、LFU、MFU等13种)或自定义缓存算法

(4)可方便的保存及初始化恢复数据

(5)支持不同类型网络处理

(6)可根据系统配置初始化缓存等

三、网络相关

1.    Asynchronous Http Client for Android

Android异步Http请求

项目地址:https://github.com/loopj/android-async-http

文档介绍:http://loopj.com/android-async-http/

特点:(1) 在匿名回调中处理请求结果

(2) 在UI线程外进行http请求

(3) 文件断点上传

(4) 智能重试

(5) 默认gzip压缩

(6) 支持解析成Json格式

(7) 可将Cookies持久化到SharedPreferences

2.    android-query

异步加载,更少代码完成Android加载

项目地址:https://github.com/androidquery/androidquery 或 https://code.google.com/p/android-query/

文档介绍:https://code.google.com/p/android-query/#Why_AQuery?

Demo地址:https://play.google.com/store/apps/details?id=com.androidquery

特点:https://code.google.com/p/android-query/#Why_AQuery?

3.    Async Http Client

Java异步Http请求

项目地址:https://github.com/AsyncHttpClient/async-http-client

文档介绍:http://sonatype.github.io/async-http-client/

4.    Ion

支持图片、json、http post等异步请求

项目地址:https://github.com/koush/ion

文档介绍:https://github.com/koush/ion#more-examples

5.    HttpCache

Http缓存

项目地址:https://github.com/Trinea/AndroidCommon

Demo地址:https://play.google.com/store/apps/details?id=cn.trinea.android.demo

文档介绍:http://www.trinea.cn/android/android-http-cache

特点是:(1) 根据cache-control、expires缓存http请求

(2) 支持同步、异步Http请求

(3) 在匿名回调中处理请求结果

(4) 在UI线程外进行http请求

(5) 默认gzip压缩

6.    Http Request

项目地址:https://github.com/kevinsawicki/http-request

文档介绍:https://github.com/kevinsawicki/http-request#examples

7.    okhttp

square开源的http工具类

项目地址:https://github.com/square/okhttp

文档介绍:http://square.github.io/okhttp/

特点:(1) 支持SPDY( http://zh.wikipedia.org/wiki/SPDY )协议。SPDY协议是Google开发的基于传输控制协议的应用层协议,通过压缩,多路复用(一个TCP链接传送网页和图片等资源)和优先级来缩短加载时间。

(2) 如果SPDY不可用,利用连接池减少请求延迟

(3) Gzip压缩

(4) Response缓存减少不必要的请求

8.    Retrofit

RESTFUL API设计

项目地址:https://github.com/square/retrofit

文档介绍:http://square.github.io/retrofit/

9.    RoboSpice

Android异步网络请求工具,支持缓存、REST等等

项目地址:https://github.com/stephanenicolas/robospice

Demo地址:https://github.com/stephanenicolas/RoboDemo/downloads

四、数据库 orm工具包

orm的db工具类,简化建表、查询、更新、插入、事务、索引的操作

1.    greenDAO

Android Sqlite orm的db工具类

项目地址:https://github.com/greenrobot/greenDAO

文档介绍:http://greendao-orm.com/documentation/

官方网站:http://greendao-orm.com/

特点:(1) 性能佳

(2) 简单易用的API

(3) 内存小,好小

(4) 库大小,小

2.    ActiveAndroid

Android Sqlite orm的db工具类

项目地址:https://github.com/pardom/ActiveAndroid

文档介绍:https://github.com/pardom/ActiveAndroid/wiki/_pages

3.    Sprinkles

Android Sqlite orm的db工具类

项目地址:https://github.com/emilsjolander/sprinkles

文档介绍:http://emilsjolander.github.io/blog/2013/12/18/android-with-sprinkles/

特点:比较显著的特点就是配合https://github.com/square/retrofit 能保存从服务器获取的数据

4.    ormlite-android

项目地址:https://github.com/j256/ormlite-android

文档介绍:http://ormlite.com/sqlite_java_android_orm.shtml

5.    Schematic

根据SQLite生成ContentProvider

项目地址:https://github.com/SimonVT/schematic

五、Android公共库

1.    Guava

Google的基于java1.6的类库集合的扩展项目,包括collections, caching, primitives support, concurrency libraries, common annotations, string processing, I/O等等. 这些高质量的API可以使你的JAVa代码更加优雅,更加简洁

项目地址:https://code.google.com/p/guava-libraries/

文档介绍:https://code.google.com/p/guava-libraries/wiki/GuavaExplained

2.    Volley

Google提供的网络通信库,使得网络请求更简单、更快速

项目地址:https://android.googlesource.com/platform/frameworks/volley

Github地址:https://github.com/mcxiaoke/android-volley

文档地址:http://commondatastorage.googleapis.com/io-2013/presentations/110%20-%20Volley-%20Easy,%20Fast%20Networking%20for%20Android.pdf

3.    AndroidCommon

Android公共库

项目地址:https://github.com/Trinea/AndroidCommon

Demo地址:https://play.google.com/store/apps/details?id=cn.trinea.android.demo

文档介绍:http://www.trinea.cn/android/android-common-lib/

包括:(1)缓存(图片缓存、预取缓存、网络缓存)

(2) 公共View(下拉及底部加载更多ListView、底部加载更多ScrollView、滑动一页Gallery)

(3) Android常用工具类(网络、下载、Android资源操作、shell、文件、Json、随机数、Collection等等)

4.    shipfaster

整合了Dagger Otto Retrofit Robolectric Picasso OkHttp,方便快速开发

项目地址:https://github.com/pyricau/shipfaster

5.    CleanAndroidCode

整合了Dagger Otto AndroidAnnotations,方便快速开发

项目地址:https://github.com/pyricau/CleanAndroidCode

6.    xUtils

基于Afinal,包含DbUtils、ViewUtils、HttpUtils、BitmapUtils四大模块,可用于快速开发

项目地址:https://github.com/wyouflf/xUtils

7.    Afinal

Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据

项目地址:https://github.com/yangfuhai/afinal

官方网站:http://www.afinal.org

六、Android 高版本向低版本兼容

1.    ActionBarSherlock

为Android所有版本提供统一的ActionBar,解决4.0以下ActionBar的适配问题

项目地址:https://github.com/JakeWharton/ActionBarSherlock

Demo地址:https://play.google.com/store/apps/details?id=com.actionbarsherlock.sample.demos

APP示例:太多了。。现在连google都在用

2.    Nine Old Androids

将Android 3.0(Honeycomb)所有动画API(ObjectAnimator ValueAnimator等)兼容到Android1.0

项目地址:https://github.com/JakeWharton/NineOldAndroids

Demo地址:https://play.google.com/store/apps/details?id=com.jakewharton.nineoldandroids.sample

文档介绍:http://nineoldandroids.com/

3.    HoloEverywhere

将Android 3.0的Holo主题兼容到Android2.1++

项目地址:https://github.com/Prototik/HoloEverywhere

Demo地址:https://raw.github.com/Prototik/HoloEverywhere/repo/org/holoeverywhere/demo/2.1.0/demo-2.1.0.apk

文档介绍:http://android-developers.blogspot.com/2012/01/holo-everywhere.html

4.    SherlockNavigationDrawer

将Android NavigationDrawer和ActionbarSherlock结合,解决4.0以下NavigationDrawer的适配问题

项目地址:https://github.com/tobykurien/SherlockNavigationDrawer

文档地址:http://developer.android.com/training/implementing-navigation/nav-drawer.html

5.    Notifications4EveryWhere

将Android 4.1的Notification兼容到Android2.2++

项目地址:https://github.com/youxiachai/Notifications4EveryWhere

6.    Android Switch Widget Backport

将Android Switch和SwitchPreference的兼容到Android2.1++

项目地址:https://github.com/BoD/android-switch-backport

Demo地址:https://play.google.com/store/apps/details?id=org.jraf.android.backport.switchwidget.sample

文档介绍:https://github.com/BoD/android-switch-backport#using-the-switch

7.    android-datepicker

将Android 4.0的datepicker兼容到Android2.2++

项目地址:https://github.com/SimonVT/android-datepicker

8.    GlowPadBackport

Android 4.2的GlowPadView向后适配到API4以上

项目地址:https://github.com/frakbot/GlowPadBackport

七、多媒体相关

1.    cocos2d-x

跨平台的2d游戏框架,支持Android、IOS、Linux、Windows等众多平台

项目地址:https://github.com/cocos2d/cocos2d-x

文档介绍:http://www.cocos2d-x.org/wiki

官方网站:http://www.cocos2d-x.org/

2.    Vitamio

是一款Android与iOS平台上的全能多媒体开发框架

项目地址:https://github.com/yixia/VitamioBundle

网站介绍:http://www.vitamio.org/docs/

特点:(1) 全面支持硬件解码与GPU渲染

(2) 能够流畅播放720P甚至1080P高清MKV,FLV,MP4,MOV,TS,RMVB等常见格式的视频

(3) 在Android与iOS上跨平台支持 MMS, RTSP, RTMP, HLS(m3u8)等常见的多种视频流媒体协议,包括点播与直播。

3.    PhotoProcessing

利用ndk处理图片库,支持Instafix、Ansel、Testino、XPro、Retro、BW、Sepia、Cyano、Georgia、Sahara、HDR、Rotate(旋转)、Flip(翻转)等各种特效

项目地址:https://github.com/lightbox/PhotoProcessing

Demo地址:https://github.com/Trinea/TrineaDownload/blob/master/photo-processing.apk?raw=true

4.    Android StackBlur

图片模糊效果工具类

项目地址:https://github.com/kikoso/android-stackblur

Demo地址:https://github.com/kikoso/android-stackblur/blob/master/StackBlurDemo/bin/StackBlurDemo.apk?raw=true

文档介绍:https://github.com/kikoso/android-stackblur#usage

5.    Bitmap Smart Clipping using OpenCV

图片智能裁剪保留重要部分显示

项目地址:https://github.com/beartung/tclip-android

利用淘宝的 http://code.taobao.org/p/tclip/ 库完成

一淘玩客正在使用的图片裁剪,自动识别图片中的重要区域,并且在图片裁剪时保留重要区域

特点:(1). 能进行人脸识别。图片中有人脸,将自动视为人脸区域为重要区域,将不会被裁剪掉

(2).自动其它重要区域。如果图片中未识别出人脸,则会根据特征分布计算出重区域

6.    Cropper

图片局部剪切工具,可触摸控制选择区域或旋转

项目地址:https://github.com/edmodo/cropper

使用介绍:https://github.com/edmodo/cropper/wiki

效果图:

7.    android-crop

图片裁剪Activity

项目地址:https://github.com/jdamcd/android-crop

效果图:

8.    TileView

可分块显示大图,支持2D拖动、双击、双指放大、双指捏合

项目地址:https://github.com/moagrius/TileView

Demo地址:http://moagrius.github.io/TileView/TileViewDemo.apk

9.    BlurEffectForAndroidDesign

图片模糊效果

项目地址:https://github.com/PomepuyN/BlurEffectForAndroidDesign

10.  android-eye

PC端网页查看同一局域网内的手机摄像头内容,可以用来监控哦

项目地址:https://github.com/Teaonly/android-eye

Demo地址:https://play.google.com/store/apps/details?id=teaonly.droideye

11.  libpng for Android

PNG图片的jni库,支持几乎png的所有特性

项目地址:https://github.com/julienr/libpng-android

文档地址:http://www.libpng.org/pub/png/libpng.html

12.  android-gpuimage

基于GPU的图片滤镜

项目地址:https://github.com/CyberAgent/android-gpuimage

13.  AndroidFaceCropper

图片脸部自动识别,将识别后的局部图片返回

项目地址:https://github.com/lafosca/AndroidFaceCropper

14.  Android Video Crop

利用TextureView播放和剪切视频,类似ImageView.setScaleType

项目地址:https://github.com/dmytrodanylyk/android-video-crop

Demo地址:https://github.com/lafosca/AndroidFaceCropper/releases/download/1.0/FaceCropper-sample-debug-unaligned.apk

15.  svg-android

Android Svg矢量图形支持

项目地址:https://github.com/japgolly/svg-android https://github.com/japgolly/svg-android

16.  Android Visualizer

从Android MediaPlayer获得音频,然后像iTunes及WinAmp一样展示音轨

项目地址:https://github.com/felixpalmer/android-visualizer

八、事件总线(订阅者模式)

通过发布/订阅事件解耦事件发送和接受,从而简化应用程序组件(Activities, Fragments及后台线程)之间的通信

1.    EventBus

greenrobot的开源项目

项目地址:https://github.com/greenrobot/EventBus

文档介绍:https://github.com/greenrobot/EventBus#general-usage-and-api

特点:(1) 支持在不同类型的线程中处理订阅,包括发布所在线程,UI线程、单一后台线程、异步线程

(2) 支持事件优先级定义,支持优先级高的订阅者取消事件继续传递,支持粘性事件,是不是跟系统的有序广播、粘性广播很像啊

(3) 不是基于annotations

(4) 性能更优

(5) 体积小

(6) 支持单例创建或创建多个对象

(7) 支持根据事件类型订阅

2.    Otto

Square的开源项目,基于Guava的Android优化

项目地址:https://github.com/square/otto

文档介绍:http://square.github.io/otto/

EventBus与Otto的功能及性能对比文档

EventBus与Otto性能对比Demo Apk

九、传感器

1.    Great Android Sensing Toolkit

Android感应器工具包,包含示例及使用过程中可能需要的算法

项目地址:https://github.com/gast-lib/gast-lib

Demo地址:https://play.google.com/store/apps/details?id=root.gast.playground

文档介绍:https://github.com/gast-lib/gast-lib#documentation

2.    SensorManager

Android传感器管理

项目地址:https://github.com/nlathia/SensorManager

文档介绍:https://docs.google.com/document/d/1TqThJULb-4e6TGb1gdkAaPCfyuXStjJpbnt7a0OZ9OE/edit

3.    GPSLogger

记录GPS信息

项目地址:https://github.com/mendhak/gpslogger

Demo地址:https://play.google.com/store/apps/details?id=com.mendhak.gpslogger

文档介绍:http://code.mendhak.com/gpslogger/

4.    Pedometer

计步器,使用硬件计步感应器

项目地址:https://github.com/j4velin/Pedometer

5.    leapcast

ChromeCast模拟器的App

项目地址:https://github.com/dz0ny/leapcast

6.    Arduino-Communicator

与Arduino通信的App

项目地址:https://github.com/jeppsson/Arduino-Communicator

7.    android-pedometer

Android计步器

项目地址:https://github.com/bagilevi/android-pedometer

Demo地址:http://pedometer.googlecode.com/files/Pedometer-1.4.apk

8.    OwnTracks for Android

自己的轨迹记录

项目地址:https://github.com/owntracks/android

9.    Shake Detector library for Android

Android手机震动摇晃检测库,提供供UI线程调用的回调接口

项目地址:https://github.com/tbouron/ShakeDetector

Demo地址:https://play.google.com/store/apps/details?id=com.github.tbouron.shakedetector.example

10.  Android heart rate monitor

Android心跳检测

项目地址:https://github.com/phishman3579/android-heart-rate-monitor

11.  Bluetooth LE Library for Android

蓝牙源信息,包括宝库Mac、更新时间、RSSI、UUID、信号源距离、影响范围等信息

项目地址:https://github.com/alt236/Bluetooth-LE-Library—Android

Demo地址:https://play.google.com/store/apps/details?id=uk.co.alt236.btlescan

12.  farebot

通过NFC 从公交卡中读取数据的一个应用

项目地址:https://github.com/codebutler/farebot

十、安全

1.    SQLCipher

Sqlite加密工具

项目地址:https://github.com/sqlcipher/sqlcipher

帮助文档:http://sqlcipher.net/sqlcipher-for-android/

2.    Conceal

快速高效的进行文件加密解密

项目地址:https://github.com/facebook/conceal

文档介绍:https://github.com/facebook/conceal#usage

3.    Android-PasscodeLock

应用锁,每次启动或从任何Activity启动应用都需要输入四位数字的密码方可进入

项目地址:https://github.com/wordpress-mobile/Android-PasscodeLock

Demo地址:https://play.google.com/store/apps/details?id=com.sothree.umano

APP示例:Wordpress Android,支付宝,挖财

4.    GlowPadBackport

将Android4.2的锁屏界面解锁扩展到Android1.6及1.6+

项目地址:https://github.com/rock3r/GlowPadBackport

Demo地址:https://play.google.com/store/apps/details?id=net.sebastianopoggi.samples.ui.GlowPadSample

效果图:

5.    GlowPadView

Android 4锁屏界面解锁

项目地址:https://github.com/nadavfima/GlowPadView

效果图:https://raw.github.com/nadavfima/GlowPadView/master/example.png

6.    android-lockpattern

Android的图案密码解锁

项目地址:https://code.google.com/p/android-lockpattern/

Demo地址:https://play.google.com/store/apps/details?id=group.pals.android.lib.ui.lockpattern.demo

使用介绍:https://code.google.com/p/android-lockpattern/wiki/QuickUse

示例APP:Android开机的图案密码解锁,支付宝的密码解锁

十一、插件化

1.    dynamic-load-apk

Android动态加载Apk,热部署。支持一定程度不安装升级

项目地址:https://github.com/singwhatiwanna/dynamic-load-apk

文档介绍:http://blog.csdn.net/singwhatiwanna/article/details/22597587

2.    xCombine

Android App插件式插件开发,插件必须先安装

项目地址:https://github.com/wyouflf/xCombine

文档介绍:http://my.oschina.net/u/1171837/blog/155377

3.    Android Plugin Framework

Android插件式开发,开放的源码目前不完整

项目地址:https://github.com/umeng/apf

十二、文件

对不同文档类型的处理,包括PDF、Word、EPub、Html、Zip等

1.    purePDF

允许从任何运行的SWF文件读取和创建PDF文档

项目地址:https://github.com/sephiroth74/purePDF

2.    Office 365 SDK for Android Preview

可支持Microsoft SharePoint Lists, Microsoft SharePoint Files, Microsoft Exchange Calendar, Microsoft Exchange Contacts, Microsoft Exchange Mail

项目地址:https://github.com/OfficeDev/Office-365-SDK-for-Android

3.    OpenSpritz-Android

EPub阅读器

项目地址:https://github.com/OnlyInAmerica/OpenSpritz-Android

4.    jsoup

一个解析html的java库,可方便的提取和操作数据

项目地址:https://github.com/jhy/jsoup

官方网站:http://jsoup.org/

作用:(1) 从一个url、文件或string获得html并解析

(2) 利用dom遍历或css选择器查找、提取数据

(3) 操作html元素

(4) 根据白名单去除用于提交的非法数据防止xss攻击

(5) 输出整齐的html

5.    ZIP

java压缩和解压库

项目地址:https://github.com/zeroturnaround/zt-zip

文档介绍:https://github.com/zeroturnaround/zt-zip#examples

作用:(1) 解压和压缩,并支持文件夹内递归操作

(2) 支持包含和排除某些元素

(3) 支持重命名元素

(4) 支持遍历zip包内容

(5) 比较两个zip包等功能

十三、其他

1.    Salvage view

带View缓存的Viewpager PagerAdapter,很方便使用

项目地址:https://github.com/JakeWharton/salvage

2.    Android Priority Job Queue

Android后台任务队列

项目地址:https://github.com/path/android-priority-jobqueue

文档介绍:https://github.com/path/android-priority-jobqueue#getting-started

3.    Cobub Razor

开源的mobile行为分析系统,包括web端、android端,支持ios和window phone

项目地址:https://github.com/cobub/razor

Demo地址:http://demo.cobub.com/razor

网站介绍:http://dev.cobub.com/

4.    Countly

Android移动端数据采集分析系统

项目地址:https://github.com/Countly/countly-sdk-android

官网地址:https://count.ly/

5.    aFileChooser

文件选择器,可内嵌到程序中,而无需使用系统或三方文件选择器。

项目地址:https://github.com/iPaulPro/aFileChooser

6.    androidpn

基于xmpp协议的消息推送解决方案,包括服务器端和android端。

项目地址:https://github.com/dannytiehui/androidpn

7.    Bolts

Android的异步编程模式

项目地址:https://github.com/BoltsFramework/Bolts-Android/

与AsyncTask比较:(1) 使用的是无大小限制的线程池

(2) 任务可组合可级联,防止了代码耦合

8.    CastCompanionLibrary-android

使Android程序中更快的接入Google Cast

项目地址:https://github.com/googlecast/CastCompanionLibrary-android

文档介绍:https://developers.google.com/cast/

9.    CastVideos-android

从Android设备分享Video通过Google Cast

项目地址:https://github.com/googlecast/CastVideos-android

文档介绍:https://developers.google.com/cast/

10.  Uninstall_Statics

Android应用自身被卸载监听及打开浏览器等反馈功能实现

项目地址:https://github.com/sevenler/Uninstall_Statics

文档介绍:http://www.cnblogs.com/zealotrouge/p/3157126.html

http://www.cnblogs.com/zealotrouge/p/3159772.html

11.  Memento

保证在系统配置改变时,Activity中的某些数据可以简单安全的保持不变

项目地址:https://github.com/mttkay/memento

文档介绍:https://github.com/mttkay/memento#usage

12.  FreeFlow

布局引擎,更简单的创建自定义布局,并且当数据和布局改变时更美观的过渡动画

项目地址:https://github.com/Comcast/FreeFlow

Demo地址:https://github.com/Comcast/FreeFlow/releases

13.  Android Gesture Detectors Framework

Android手势框架,支持双指旋转、移动、平移、缩放等

项目地址:https://github.com/Almeros/android-gesture-detectors

14.  Mapbox Android SDK

Android Map的替代版

项目地址:https://github.com/mapbox/mapbox-android-sdk

15.  Activity animation

Activity跳转动画,支持各个方向波浪的效果

项目地址:https://github.com/flavienlaurent/activityanimation

在线演示:https://www.youtube.com/watch?v=-E0sc6w_Jck

16.  KryoNet

通过NIO提供客户端和服务器端TCP/UDP网络传输的Java库

项目地址:https://github.com/EsotericSoftware/kryonet

17.  Rebound

一个模仿弹簧反弹的Java库,可用于创建动画

项目地址:https://github.com/facebook/rebound

18.  Android Social Networks

社交网络接入统一管理器,可方便的从Twitter, LinkedIn, Facebook, Google Plus登陆、获得个人信息、发送消息、发送专篇、添加或删除好友

项目地址:https://github.com/antonkrasov/AndroidSocialNetworks

Demo地址:https://play.google.com/store/apps/details?id=com.github.androidsocialnetworks.apidemos

第三部分 优秀项目

主要介绍那些Android还不错的完整项目,目前包含的项目主要依据是项目有意思或项目分层规范比较好。

Linux

项目地址:https://github.com/torvalds/linux

Android

项目地址:https://android.googlesource.com/ 或 https://github.com/android

以上两个项目,不解释

(1) ZXing

二维码扫描工具

项目地址:https://github.com/zxing/zxing 或 https://code.google.com/p/zxing/

APK地址:https://play.google.com/store/apps/details?id=com.google.zxing.client.android

PS:现在市面上很多应用的二维码扫描功能都是从这个修改而来

(2) photup

编辑机批量上传照片到facebook上

项目地址:https://github.com/chrisbanes/photup

APK地址:https://play.google.com/store/apps/details?id=uk.co.senab.photup

PS:代码分包合理,很棒。不过这个项目依赖的开源项目比较多,比较难编译

(3) github-android

Github的Android客户端项目

项目地址:https://github.com/github/android

APK地址:https://play.google.com/store/apps/details?id=com.github.mobile

(4) Notes

MIUI便签

项目地址:https://github.com/MiCode/Notes

APK地址:https://github.com/Trinea/TrineaDownload/blob/master/miui-note-demo.apk?raw=true

PS:项目分包比较合理,相比较miui的文件管理器https://github.com/MiCode/FileExplorer 代码规范较好得多

(5) weicuiyuan

四次元-新浪微博客户端

项目地址:https://github.com/qii/weiciyuan

APK地址:https://play.google.com/store/apps/details?id=org.qii.weiciyuan

(6) gnucash-android

一个记账理财软件

项目地址:https://github.com/codinguser/gnucash-android

APK地址:http://play.google.com/store/apps/details?id=org.gnucash.android

(7) AntennaPod

支持rss订阅、音乐订阅

项目地址:https://github.com/danieloeh/AntennaPod

APK地址:https://play.google.com/store/apps/details?id=de.danoeh.antennapod

(8) ChaseWhisplyProject

打鬼游戏

项目地址:https://github.com/tvbarthel/ChaseWhisplyProject

APK地址:https://play.google.com/store/apps/details?id=fr.tvbarthel.games.chasewhisply

(9) Tweet Lanes

功能完整的Twitter客户端

项目地址:https://github.com/chrislacy/TweetLanes

APK地址:https://play.google.com/store/apps/details?id=com.tweetlanes.android

(10) Financius

简单易用的记账程序

项目地址:https://github.com/mvarnagiris/Financius

APK地址:https://play.google.com/store/apps/details?id=com.code44.finance

(11) todo.txt-android

todo.txt的官方Android应用

项目地址:https://github.com/ginatrapani/todo.txt-android

APK地址:https://play.google.com/store/apps/details?id=com.todotxt.todotxttouch

(12) simpletask

基于todo.txt官方应用的另一个客户端

项目地址:https://github.com/mpcjanssen/simpletask-android

APK地址:https://play.google.com/store/apps/details?id=nl.mpcjanssen.todotxtholo

(13) Muzei Live Wallpaper

定时更换桌面精美壁纸

项目地址:https://github.com/romannurik/muzei

APK地址:https://play.google.com/store/apps/details?id=net.nurik.roman.muzei

第四部分 开发工具及测试工具

主要介绍和Android开发工具和测试工具相关的开源项目。

一、开发效率工具

1.    Json2Java

根据JSon数据自动生成对应的Java实体类,还支持Parcel、Gson Annotations对应代码自动生成。期待后续的提取父类以及多url构建整个工程的功能

项目地址:https://github.com/jonfhancock/JsonToJava

在线演示:http://jsontojava.appspot.com/

2.    IntelliJ Plugin for Android Parcelable boilerplate code generation

Android studio插件,生成Parcelable代码

项目地址:https://github.com/mcharmas/android-parcelable-intellij-plugin

效果图:

3.    Android Holo Colors IntelliJ Plugin

Android studio插件,生成holo样式9 patch图片

项目地址:https://github.com/jeromevdl/android-holo-colors-idea-plugin

效果图:

4.    Android Drawable Factory

用于生成各个分辨率的图片

项目地址:https://github.com/tizionario/AndroidDrawableFactory

效果图:

5.    SelectorChapek for Android

Android Studio插件,可根据固定文件名格式资源自动生成drawable selectors xml文件。

项目地址:https://github.com/inmite/android-selector-chapek

6.    Android Action Bar Style Generator

Android ActionBar样式生成器,可在线选择ActionBar样式自动生成所需要的图片资源及xml文件

项目地址:https://github.com/jgilfelt/android-actionbarstylegenerator

在线演示:http://jgilfelt.github.io/android-actionbarstylegenerator/

7.    ButterKnifeZelezny

用于快速生成ButterKnifeView注入代码的Android Studio/IDEA插件

项目地址:https://github.com/inmite/android-butterknife-zelezny

8.    RoboCoP

利用Gradle task根据固定格式的json文件生成ContentProvider

项目地址:https://github.com/mediarain/RoboCoP

9.    appiconsizes

用于生成各个分辨率的图片

项目地址:http://www.appiconsizes.com/

10.  Gradle Retrolambda Plugin

Retrolambda是将Java8的Lambdas应用于Java7的工具,本项目是Gradle插件,通过Retrolambda从而使Java或Android项目用Java8的Lambdas编写,将编译后的字节码转换为Java6和7的字节码从而正常运行

项目地址:https://github.com/evant/gradle-retrolambda

11.  Dagger IntelliJ Plugin

dagger的intellij插件

项目地址:https://github.com/square/dagger-intellij-plugin

12.  Android Gen Drawable Maven plugin

在编译时根据SVG描述文件生成不同分辨率的jpg、png或点9图片

项目地址:https://github.com/avianey/androidgendrawable-maven-plugin

13.  Android Asset Studio

各种Android资源自动生成器,包括启动图标、ActionBar图标、通知栏图标、点9等

项目地址:https://github.com/romannurik/AndroidAssetStudio

在线演示:http://romannurik.github.io/AndroidAssetStudio/

二、开发自测相关

1.    Quality Tools for Android

Android测试及自测工具集合和示例

项目地址:https://github.com/stephanenicolas/Quality-Tools-for-Android

2.    android-test-kit

Google的Android测试工具

包括GoogleInstrumentationTestRunner(增强版的InstrumentationTestRunner)和Espresso(用于快速写出可靠测试用例的API)

项目地址:https://code.google.com/p/android-test-kit/

文档介绍:https://code.google.com/p/android-test-kit/w/list

3.    robolectric

测试用例编写框架

项目地址:https://github.com/robolectric/robolectric

Demo地址:https://github.com/robolectric/robolectricsample

文档介绍:http://robolectric.org/

特点:(1). 不需要模拟器在一般JVM就可以运行测试用例

(2). 能完成在真机上的大部分测试包括感应器

其他的测试用例及相关模块Mock可见:android-mockmockitoeasy-mock

4.    Android FEST

提供一些列方面的断言,可用于提高编写Android自测代码效率

项目地址:https://github.com/square/fest-android

5.    BoundBox

可用于测试类的各种访问权限的属性、方法。实际是通过BoundBox这个annotation生成一个属性和方法都是public权限的中间类,并对此类进行测试完成的

项目地址:https://github.com/stephanenicolas/boundbox

6.    Hugo

用于打印函数信息及执行时间的工具,仅在debug模式生效

项目地址:https://github.com/JakeWharton/hugo

7.    scalpel

在应用下面添加一层用于界面调试,待详细补充 // TODO

项目地址:https://github.com/JakeWharton/scalpel

8.    Android Screenshot library

Android截图工具类,用于在持续集成时截图

项目地址:https://github.com/rtyley/android-screenshot-lib

9.    sonar-android-lint-plugin

将android lint的错误在sonar中展现

项目地址:https://github.com/SonarCommunity/sonar-android

三、测试工具

1.    Spoon

可用于android不同机型设备自动化测试,能将应用apk和测试apk运行在不同机器上并生成相应测试报告。

项目地址:https://github.com/square/spoon

2.    Tencent APT

APT是腾讯开源的一个Android平台高效性能测试组件,提供丰富实用的功能,适用于开发自测、定位性能瓶颈;测试人员完成性能基准测试、竞品对比测试

项目地址:https://github.com/stormzhang/APT

3.    Emmagee

网易开源的性能测试工具,包括CPU、内存、网络流量、启动时间、电池状态等

项目地址:https://github.com/NetEase/Emmagee

4.    Android py-uiautomator

py-uiautomator是一个对Android uiautomator用python进行封装的测试框架.

项目地址:https://github.com/xiaocong/uiautomator

四、开发及编译环境

1.    Buck

facebook开源的Android编译工具,效率是ant的两倍。主要优点在于:

(1) 加快编译速度,通过并行利用多核cpu和跟踪不变资源减少增量编译时间实现

(2) 可以在编译系统中生成编译规则而无须另外的系统生成编译规则文件

(3) 编译同时可生成单元测试结果

(4) 既可用于IDE编译也可用于持续集成编译

(5) facebook持续优化中

项目地址:https://github.com/facebook/buck

2.    Android Maven Plugin

Android Maven插件,可用于对android三方依赖进行管理。在J2EE开发中,maven是非常成熟的依赖库管理工具,可统一管理依赖库。

项目地址:https://github.com/jayway/maven-android-plugin

3.    umeng-muti-channel-build-tool

渠道打包工具

项目地址:https://github.com/umeng/umeng-muti-channel-build-tool

另可参见Google的构建系统Gradle:http://tools.android.com/tech-docs/new-build-system/user-guide

4.    Genymotion

目前最好用最快的android模拟器

项目地址:http://www.genymotion.com/

Android studio集成控件: http://plugins.jetbrains.com/plugin/7269?pr=idea

Cyril Mottier推荐:http://cyrilmottier.com/2013/06/27/a-productive-android-development-environment/

5.    gradle-mvn-push

方便的将Gradle的Artifacts上传到Maven仓库

项目地址:https://github.com/chrisbanes/gradle-mvn-push

文档介绍:https://github.com/chrisbanes/gradle-mvn-push#usage

6.    Android Emulator Plugin for Jenkins

Android模拟器 jenkins插件,用于Jenkins做持续集成时跑模拟器测试

项目地址:https://github.com/jenkinsci/android-emulator-plugin

7.    Android Maven Plugin

管理应用所需要的依赖库。包括的构建工具有Maven、Gradle、ant、sbt

项目地址:https://github.com/mosabua/maven-android-sdk-deployer

8.    SDK Manager Plugin

下载和管理Android SDK的Gradle插件

项目地址:https://github.com/JakeWharton/sdk-manager-plugin

9.    Gradle Protobuf Plugin

将.proto文件转换成Java文件的gradle插件

项目地址:https://github.com/andrewkroh/gradle-protobuf-plugin

五、其他

1.    ViewServer

允许app运行在任何手机上都可以用HierarchyViewer查看

项目地址:https://github.com/romainguy/ViewServer

2.    GridWichterle for Android

在整个系统上显示一个grid,用来帮助查看应用布局及使得布局更美观,可设置grid网格大小和颜色,android推荐48dp和8dp,可见 Android Design Guidelines – Metrics and Grids

项目地址:https://github.com/inmite/android-grid-wichterle

APK地址:https://play.google.com/store/apps/details?id=eu.inmite.android.gridwichterle

PS:比起hierarchyviewer相差甚远,不过偶尔可用来作为布局查看工具。

3.    Catlog

手机端log查看工具,支持不同颜色显示、关键字过滤、级别过滤、进程id过滤、录制功能等

项目地址:https://github.com/nolanlawson/Catlog

在线演示:https://play.google.com/store/apps/details?id=com.nolanlawson.logcat

4.    PID Cat

根据package查看logcat日志

项目地址:https://github.com/JakeWharton/pidcat

5.    ACRA

应用崩溃信息上报到GoogleDoc工具,网页版展现结果三方开源地址https://github.com/BenoitDuffez/crashreportsviewer

项目地址:https://github.com/ACRA/acra

文档地址:https://github.com/ACRA/acra/wiki/BasicSetup

6.    Crashlytics

提供丰富的应用崩溃信息收集

轻量级,丰富,可自定义应用崩溃信息收集器,附有邮件通知

项目地址:http://www.crashlytics.com/

集成插件:Android Studio, Eclipse and IntelliJ

7.    Android Resource Navigator

chrome插件,可以方便的查看github上android源码工程的styles.xml和themes.xml。主要功能:

(1) 快速打开android styles.xml themes.xml

(2) 方便在资源间跳转。styles.xml themes.xml文件中资源链接跳转,可以方便跳转到某个资源

(3) 方便查找某个style和theme。chrome地址栏输入arn+tab+搜索内容回车即可

(4) 自动下载不同分辨率下的drawable

(5) 通过映射查找那些不是按照固定命名规则命名的style和theme

项目地址:https://github.com/jgilfelt/android-resource-navigator

在线演示:https://chrome.google.com/webstore/detail/android-resource-navigato/agoomkionjjbejegcejiefodgbckeebo?hl=en&gl=GB

8.    android-resource-remover

根据lint的提示删除项目中无用的资源,减少包的大小

项目地址:https://github.com/KeepSafe/android-resource-remover

9.    Telescope

通过手势截图以特定主题发送到特定邮箱地址报告Bug

项目地址:https://github.com/mattprecious/telescope

10.  Complete Android Fragment & Activity Lifecycle

完整的Android Fragment/Activity生命周期图

项目地址:https://github.com/xxv/android-lifecycle

第五部分

主要介绍那些乐于分享并且有一些很不错的开源项目的个人和组织。Follow大神,深挖大神的项目和following,你会发现很多。

一、个人

1.    JakeWharton

就职于Square,绝对牛逼的大神,项目主要集中在Android版本兼容,ViewPager及开发工具上

Github地址:https://github.com/JakeWharton

代表作:ActionBarSherlock,Android-ViewPagerIndicator,Nine Old Androids,SwipeToDismissNOA,hugo,butterknife,Android-DirectionalViewPager, scalpel

pidcat另外对square及其他开源项目有很多贡献

主页:http://jakewharton.com/

2.    Chris Banes

Github地址:https://github.com/chrisbanes

代表作:ActionBar-PullToRefresh,PhotoView,Android-BitmapCache,Android-PullToRefresh

主页:http://chris.banes.me/

3.    Koushik Dutta

就职于ClockworkMod

Github地址:https://github.com/koush

代表作:Superuser,AndroidAsync,UrlImageViewHelper,ion,另外对https://github.com/CyanogenMod 的开源项目有很多贡献

主页:http://koush.com/

4.    Simon Vig

Github地址:https://github.com/SimonVT

代表作:android-menudrawer,MessageBar

主页:http://simonvt.net/

5.    Manuel Peinado

Github地址:https://github.com/ManuelPeinado

代表作:FadingActionBar,GlassActionBar,RefreshActionItem,QuickReturnHeader

6.    Emil Sjolander

Github地址:https://github.com/emilsjolander

代表作:StickyListHeaders,sprinkles,android-FlipView

主页:http://emilsjolander.se/

7.    greenrobot

Github地址:https://github.com/greenrobot

代表作:greenDAO,EventBus

主页:http://greenrobot.de/

8.    Jeff Gilfelt

Github地址:https://github.com/jgilfelt

代表作:android-mapviewballoons,android-viewbadger,android-actionbarstylegenerator,android-sqlite-asset-helper

主页:http://jeffgilfelt.com

9.    Romain Guy

Android team成员(2013.10已离开Android team,仍在Google)

Github地址:https://github.com/romainguy

代表作:ViewServer

主页:http://www.curious-creature.org/category/android/

個人攝影作品:http://www.flickr.com/photos/romainguy

10.  sephiroth74

就职于Aviary.com

Github地址:https://github.com/sephiroth74

代表作:ImageViewZoom,HorizontalVariableListView,AndroidWheel,purePDF

主页:http://www.sephiroth.it/

11.  Cyril Mottier

Google开发者专家认证,发布一些Android技巧及文章

Github地址:https://github.com/cyrilmottier

代表作:GreenDroid,Polaris

主页:http://cyrilmottier.com/

二、组织

1.    Square

有态度有良心的企业,很多不错的分享

Github地址:https://github.com/square

代表作:okhttp、fest-android,android-times-square、picasso、dagger、spoon等等

主页:http://square.github.io/

2.    Inmite s.r.o.

Github地址:https://github.com/inmite

代表作:android-styled-dialogs,android-grid-wichterle,android-selector-chapek

主页:http://www.inmite.eu/

三、博客

1.    Chet Haase

Android framework UI team 成员

主页:http://graphics-geek.blogspot.com/

License

Copyright 2014 trinea.cn

 

Licensed under the Apache License, Version 2.0 (the “License”);

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an “AS IS” BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

 

通过admin

Android开发者必知的5个开源库

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨的大家庭中,最受开发者喜爱的五个Android库。希望通过对它们的了解,能够对你的开发工作有所帮助。

1. GSON

Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可用于将Java对象转换成对应的JSON表示,也可以将JSON字符串转换成一个等效的Java对象。如果与API打交道的话,那么这将会是你经常需要的东西。我们主要使用JSON的原因就是,相较XML,轻量级的JSON要简单的多。

[js]

view plain

copy

 

// Serialize

String userJSON = new Gson().toJson(user);

// Deserialize

User user = new Gson().fromJson(userJSON, User.class);

2. RETROFIT

 

就如它网站上的介绍“Retrofit将你的REST API变为Java接口”一样,Retrofit把REST API返回的数据转化为Java对象方便操作,对于在项目中组织API调用,是一个不错的解决方案。其请求方法和相对URL都带有注解,使得代码变得更加简洁。使用注解,你可以很容易的添加一个请求主体,操纵URL或头文件,并添加查询参数。除此之外,每个函数可以定义为同步或异步,具有返回值的函数为同步执行,而异步函数没有返回值且最后一个参数为Callback对象。

[js]

view plain

copy

 

public interface RetrofitInterface {

// asynchronously with a callback

@GET(“/api/user”)

User getUser(@Query(“user_id”) int userId, Callback<User> callback);

// synchronously

@POST(“/api/user/register”)

User registerUser(@Body User user);

}

// example

RetrofitInterface retrofitInterface = new RestAdapter.Builder()

.setServer(API.API_URL).build().create(RetrofitInterface.class);

// fetch user with id 2048

retrofitInterface.getUser(2048, new Callback<User>() {

@Override

public void success(User user, Response response) {

}

@Override

public void failure(RetrofitError retrofitError) {

}

});

Retrofit默认情况下使用的是GSON,所以无需自定义解析,同时还支持其他转换器。

3. EVENTBUS

EventBus是用于简化应用中各个部件之间通信的一个库。比如从一个Activity发送消息到一个正在运行的服务,亦或是片段之间简单的互动。而下面使用的示例,就是如果网络连接丢失,该如何通知一个活动:

[js]

view plain

copy

 

public class NetworkStateReceiver extends BroadcastReceiver {

// post event if there is no Internet connection

public void onReceive(Context context, Intent intent) {

super.onReceive(context, intent);

if(intent.getExtras()!=null) {

NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);

if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {

// there is Internet connection

} else if(intent

.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {

// no Internet connection, send network state changed

EventBus.getDefault().post(new NetworkStateChanged(false));

}

}

// event

public class NetworkStateChanged {

private mIsInternetConnected;

public NetworkStateChanged(boolean isInternetConnected) {

this.mIsInternetConnected = isInternetConnected;

}

public boolean isInternetConnected() {

return this.mIsInternetConnected;

}

}

public class HomeActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

EventBus.getDefault().register(this); // register EventBus

}

@Override

protected void onDestroy() {

super.onDestroy();

EventBus.getDefault().unregister(this); // unregister EventBus

}

// method that will be called when someone posts an event NetworkStateChanged

public void onEventMainThread(NetworkStateChanged event) {

if (!event.isInternetConnected()) {

Toast.makeText(this, “No Internet connection!”, Toast.LENGTH_SHORT).show();

}

}

}

4. ACTIVEANDROID

ActiveAndroid算是一个轻量级的ORM(对象关系映射),让你无需编写一个单独的SQL语句,就可以保存和检索SQLite数据库记录。每个数据库记录都被包裹整齐地归为一类,如delete()和save()的方法。

扩展ActiveAndroid Model的对象能够保存在数据库里,如:

[js]

view plain

copy

 

user.save();

可以轻易替代大型SQL语句:

 

[js]

view plain

copy

 

INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES (‘Batman’,’Bruce W’,’Palisades 21′,’Gotham’,’40000′,’USA’);

获取所有用户的例子:

[js]

view plain

copy

 

List<User> users = new Select().from(User.class).execute();

而其对应的SQL语句是这样:

[js]

view plain

copy

 

SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;

ActiveAndroid是移除大量,用于和数据库一同工作的样板代码的一个很好的方法。当然除此之外,还有其他开源解决方案,如GreenDAOORMLite

5. UNIVERSAL IMAGE LOADER

UIL是是一个开源项目,其目的就是提供一个可重复使用的仪器为异步图像加载、缓存和显示。它的使用很简单:

[js]

view plain

copy

 

imageLoader.displayImage(imageUri, imageView);

尽管Picasso拥有更好的API,但其缺乏自定义。而使用UIL构建器几乎可以配置所有(其中最重要的就是在抓取和缓存大型图片时,Picasso会失败)。

良好的开源库会让你的开发变得更简单更快速,而普遍流行的库通常测试良好且易用使用。在大多情况下,你可以很容易的将它们从Maven中导入到Android Studio项目里。将它们添加到相关性的build.gradle 文件。并且同步之后,在你的应用里将能够很好的实现它们。

 

通过admin

Android开发者必知的5个开源库

过去的时间里,Android开发逐步走向成熟,一个个与Android相关的开发工具也层出不穷。不过,在面对各种新鲜事物时,不要忘了那些我们每天使用的大量开源库。在这里,向大家介绍的就是,在这个任劳任怨的大家庭中,最受开发者喜爱的五个Android库。希望通过对它们的了解,能够对你的开发工作有所帮助。

1. GSON

Gson是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可用于将Java对象转换成对应的JSON表示,也可以将JSON字符串转换成一个等效的Java对象。如果与API打交道的话,那么这将会是你经常需要的东西。我们主要使用JSON的原因就是,相较XML,轻量级的JSON要简单的多。

[js]

view plain

copy

 

// Serialize

String userJSON = new Gson().toJson(user);

// Deserialize

User user = new Gson().fromJson(userJSON, User.class);

2. RETROFIT

 

就如它网站上的介绍“Retrofit将你的REST API变为Java接口”一样,Retrofit把REST API返回的数据转化为Java对象方便操作,对于在项目中组织API调用,是一个不错的解决方案。其请求方法和相对URL都带有注解,使得代码变得更加简洁。使用注解,你可以很容易的添加一个请求主体,操纵URL或头文件,并添加查询参数。除此之外,每个函数可以定义为同步或异步,具有返回值的函数为同步执行,而异步函数没有返回值且最后一个参数为Callback对象。

[js]

view plain

copy

 

public interface RetrofitInterface {

// asynchronously with a callback

@GET(“/api/user”)

User getUser(@Query(“user_id”) int userId, Callback<User> callback);

// synchronously

@POST(“/api/user/register”)

User registerUser(@Body User user);

}

// example

RetrofitInterface retrofitInterface = new RestAdapter.Builder()

.setServer(API.API_URL).build().create(RetrofitInterface.class);

// fetch user with id 2048

retrofitInterface.getUser(2048, new Callback<User>() {

@Override

public void success(User user, Response response) {

}

@Override

public void failure(RetrofitError retrofitError) {

}

});

Retrofit默认情况下使用的是GSON,所以无需自定义解析,同时还支持其他转换器。

3. EVENTBUS

EventBus是用于简化应用中各个部件之间通信的一个库。比如从一个Activity发送消息到一个正在运行的服务,亦或是片段之间简单的互动。而下面使用的示例,就是如果网络连接丢失,该如何通知一个活动:

[js]

view plain

copy

 

public class NetworkStateReceiver extends BroadcastReceiver {

// post event if there is no Internet connection

public void onReceive(Context context, Intent intent) {

super.onReceive(context, intent);

if(intent.getExtras()!=null) {

NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO);

if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) {

// there is Internet connection

} else if(intent

.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) {

// no Internet connection, send network state changed

EventBus.getDefault().post(new NetworkStateChanged(false));

}

}

// event

public class NetworkStateChanged {

private mIsInternetConnected;

public NetworkStateChanged(boolean isInternetConnected) {

this.mIsInternetConnected = isInternetConnected;

}

public boolean isInternetConnected() {

return this.mIsInternetConnected;

}

}

public class HomeActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

EventBus.getDefault().register(this); // register EventBus

}

@Override

protected void onDestroy() {

super.onDestroy();

EventBus.getDefault().unregister(this); // unregister EventBus

}

// method that will be called when someone posts an event NetworkStateChanged

public void onEventMainThread(NetworkStateChanged event) {

if (!event.isInternetConnected()) {

Toast.makeText(this, “No Internet connection!”, Toast.LENGTH_SHORT).show();

}

}

}

4. ACTIVEANDROID

ActiveAndroid算是一个轻量级的ORM(对象关系映射),让你无需编写一个单独的SQL语句,就可以保存和检索SQLite数据库记录。每个数据库记录都被包裹整齐地归为一类,如delete()和save()的方法。

扩展ActiveAndroid Model的对象能够保存在数据库里,如:

[js]

view plain

copy

 

user.save();

可以轻易替代大型SQL语句:

 

[js]

view plain

copy

 

INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES (‘Batman’,’Bruce W’,’Palisades 21′,’Gotham’,’40000′,’USA’);

获取所有用户的例子:

[js]

view plain

copy

 

List<User> users = new Select().from(User.class).execute();

而其对应的SQL语句是这样:

[js]

view plain

copy

 

SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;

ActiveAndroid是移除大量,用于和数据库一同工作的样板代码的一个很好的方法。当然除此之外,还有其他开源解决方案,如GreenDAOORMLite

5. UNIVERSAL IMAGE LOADER

UIL是是一个开源项目,其目的就是提供一个可重复使用的仪器为异步图像加载、缓存和显示。它的使用很简单:

[js]

view plain

copy

 

imageLoader.displayImage(imageUri, imageView);

尽管Picasso拥有更好的API,但其缺乏自定义。而使用UIL构建器几乎可以配置所有(其中最重要的就是在抓取和缓存大型图片时,Picasso会失败)。

良好的开源库会让你的开发变得更简单更快速,而普遍流行的库通常测试良好且易用使用。在大多情况下,你可以很容易的将它们从Maven中导入到Android Studio项目里。将它们添加到相关性的build.gradle 文件。并且同步之后,在你的应用里将能够很好的实现它们。

 

通过admin

深入理解Java:注解(Annotation)自定义注解入门

要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。

 

元注解:

元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解:

1.@Target,

2.@Retention,

3.@Documented,

4.@Inherited

这些类型和它们所支持的类在java.lang.annotation包中可以找到。下面我们看一下每个元注解的作用和相应分参数的使用说明。

 

@Target:

@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

作用:用于描述注解的使用范围(即:被描述的注解可以用在什么地方)

取值(ElementType)有:

1.CONSTRUCTOR:用于描述构造器

2.FIELD:用于描述域

3.LOCAL_VARIABLE:用于描述局部变量

4.METHOD:用于描述方法

5.PACKAGE:用于描述包

6.PARAMETER:用于描述参数

7.TYPE:用于描述类、接口(包括注解类型) 或enum声明

使用实例:

@Target(ElementType.TYPE)
public @interface Table {
/**
* 数据表名称注解,默认值为类名称
* @return
*/
public String tableName() default “className”;
}

@Target(ElementType.FIELD)
public @interface NoDBColumn {

}

复制代码

注解Table 可以用于注解类、接口(包括注解类型) 或enum声明,而注解NoDBColumn仅可用于注解类的成员变量。

 

@Retention:

@Retention定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时将被读取(请注意并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个meta-Annotation可以对 Annotation的“生命周期”限制。

作用:表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

取值(RetentionPoicy)有:

1.SOURCE:在源文件中有效(即源文件保留)

2.CLASS:在class文件中有效(即class保留)

3.RUNTIME:在运行时有效(即运行时保留)

Retention meta-annotation类型有唯一的value作为成员,它的取值来自java.lang.annotation.RetentionPolicy的枚举类型值。具体实例如下:

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
public String name() default “fieldName”;
public String setFuncName() default “setField”;
public String getFuncName() default “getField”;
public boolean defaultDBValue() default false;
}

复制代码

Column注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理

 

@Documented:

@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员。

复制代码

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Column {
public String name() default “fieldName”;
public String setFuncName() default “setField”;
public String getFuncName() default “getField”;
public boolean defaultDBValue() default false;
}

复制代码

 

@Inherited:

@Inherited 元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。

注意:@Inherited annotation类型是被标注过的class的子类所继承。类并不从它所实现的接口继承annotation,方法并不从它所重载的方法继承annotation。

当@Inherited annotation类型标注的annotation的Retention是RetentionPolicy.RUNTIME,则反射API增强了这种继承性。如果我们使用java.lang.reflect去查询一个@Inherited annotation类型的annotation时,反射代码检查将展开工作:检查class和其父类,直到发现指定的annotation类型被发现,或者到达类继承结构的顶层。

实例代码:

复制代码

/**
*
* @author peida
*
*/
@Inherited
public @interface Greeting {
public enum FontColor{ BULE,RED,GREEN};
String name();
FontColor fontColor() default FontColor.GREEN;
}

复制代码

 

自定义注解:

使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节。在定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。方法的名称就是参数的名称,返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum)。可以通过default来声明参数的默认值。

定义注解格式:

public @interface 注解名 {定义体}

注解参数的可支持数据类型:

1.所有基本数据类型(int,float,boolean,byte,double,char,long,short)

2.String类型

3.Class类型

4.enum类型

5.Annotation类型

6.以上所有类型的数组

Annotation类型里面的参数该怎么设定:

第一,只能用public或默认(default)这两个访问权修饰.例如,String value();这里把方法设为defaul默认类型;

第二,参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和 String,Enum,Class,annotations等数据类型,以及这一些类型的数组.例如,String value();这里的参数成员就为String;

第三,如果只有一个参数成员,最好把参数名称设为”value”,后加小括号.例:下面的例子FruitName注解就只有一个参数成员。

简单的自定义注解和使用注解实例:

复制代码

package annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 水果名称注解
* @author peida
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName {
String value() default “”;
}

复制代码

 

复制代码

package annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* 水果颜色注解
* @author peida
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
/**
* 颜色枚举
* @author peida
*
*/
public enum Color{ BULE,RED,GREEN};

/**
* 颜色属性
* @return
*/
Color fruitColor() default Color.GREEN;

}

复制代码

 

复制代码

package annotation;

import annotation.FruitColor.Color;

public class Apple {

@FruitName(“Apple”)
private String appleName;

@FruitColor(fruitColor=Color.RED)
private String appleColor;

public void setAppleColor(String appleColor) {
this.appleColor = appleColor;
}
public String getAppleColor() {
return appleColor;
}

public void setAppleName(String appleName) {
this.appleName = appleName;
}
public String getAppleName() {
return appleName;
}

public void displayName(){
System.out.println(“水果的名字是:苹果”);
}
}

复制代码

 

注解元素的默认值:

注解元素必须有确定的值,要么在定义注解的默认值中指定,要么在使用注解时指定,非基本类型的注解元素的值不可为null。因此, 使用空字符串或0作为默认值是一种常用的做法。这个约束使得处理器很难表现一个元素的存在或缺失的状态,因为每个注解的声明中,所有元素都存在,并且都具有相应的值,为了绕开这个约束,我们只能定义一些特殊的值,例如空字符串或者负数,一次表示某个元素不存在,在定义注解时,这已经成为一个习惯用法。例如:

复制代码

1 package annotation;
2
3 import java.lang.annotation.Documented;
4 import java.lang.annotation.ElementType;
5 import java.lang.annotation.Retention;
6 import java.lang.annotation.RetentionPolicy;
7 import java.lang.annotation.Target;
8
9 /**
10  * 水果供应者注解
11  * @author peida
12  *
13  */
14 @Target(ElementType.FIELD)
15 @Retention(RetentionPolicy.RUNTIME)
16 @Documented
17 public @interface FruitProvider {
18     /**
19      * 供应商编号
20      * @return
21      */
22     public int id() default -1;
23
24     /**
25      * 供应商名称
26      * @return
27      */
28     public String name() default “”;
29
30     /**
31      * 供应商地址
32      * @return
33      */
34     public String address() default “”;
35 }

复制代码

 

定义了注解,并在需要的时候给相关类,类属性加上注解信息,如果没有响应的注解信息处理流程,注解可以说是没有实用价值。如何让注解真真的发挥作用,主要就在于注解处理方法,下一步我们将学习注解信息的获取和处理!

 

通过admin

Android SQLite 事务处理

应用程序初始化时需要批量的向sqlite中插入大量数据,单独的使用for+Insert方法导致应用响应缓慢,因为 sqlite插入数据的时候默认一条语句就是一个事务,有多少条数据就有多少次磁盘操作。我的应用初始5000条记录也就是要5000次读写磁盘操作。

而且不能保证所有数据都能同时插入。(有可能部分插入成功,另外一部分失败,后续还得删除。太麻烦)

解决方法:

添加事务处理,把5000条插入作为一个事务

 

我们使用SQLite的事务进行控制:

db.beginTransaction();  //手动设置开始事务

try{

//批量处理操作

for(Collection c:colls){

insert(db, c);

}

db.setTransactionSuccessful(); //设置事务处理成功,不设置会自动回滚不提交。

//在setTransactionSuccessful和endTransaction之间不进行任何数据库操作

}catch(Exception e){

MyLog.printStackTraceString(e);

}finally{

db.endTransaction(); //处理完成

}

1.使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功,则所有从beginTransaction()开始的操作都会被提交,如果没有调用setTransactionSuccessful() 方法则回滚事务。

2.使用例子如下:下面两条SQL语句在同一个事务中执行。

Java代码

  1. //银行账户事务测试
  1. public void payment()
  1. {
  1.     SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
  2.     //开启事务
  1.     db.beginTransaction();
  1.     try
  1.     {
  1.         db.execSQL(“update person set amount=amount-10 where personid=?”, new Object[]{1});
  1.         db.execSQL(“update person set amount=amount+10 where personid=?”, new Object[]{2});
  1.         //设置事务标志为成功,当结束事务时就会提交事务
  1.         db.setTransactionSuccessful();
  2.     }
  1.    catch(Exception e){
  2.         throw(e);
  1.     }
  1.     finally
  2.     {
  1.         //结束事务
  1.         db.endTransaction();
  1.     }
  2. }
通过admin

Eclipse add external jars导致运行出现java.lang.NoClassDefFoundError的解决方法

最近发现一个问题,有时候对一个Android项目反复的Add jar和remove jar,发现编译可以通过,但是运行起来当应用到外部jar的对象时,会抛出java.lang.NoClassDefFoundError异常。导致程序奔溃。

查看项目属性,发现java build path里比正常的项目少了Android Dependencies这一项:

通过和丢失之前的项目进行比对,发现差别在于工程根目录下的.classpath文件,<classpathentry exported=”true” kind=”con” path=”com.android.ide.eclipse.adt.LIBRARIES”/>这里的exported变成了false,于是把这里改回true,然后重新关闭和打开工程,发现就ok了。

 

 

另外如果你导入的jar包不是放在工程目录的\libs目录下,也会有这个问题,请把jar包放到\libs目录下,否则虽然能编译通过,但是因为打包的时候没有把jar打包进去,所以导致上面的那个异常。Eclipse在编译的时候会自动把\libs目录下的文件打包进去。

这个问题以前没怎么出现过,不知道是不是和Eclipse版本和ADT版本有关系。

通过admin

八款开源ANDROID游戏引擎

很多初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引擎可供使用,一边自暴自弃的抱怨Android平台游戏开发难度太高,又连个像样的游戏引擎也没有,甚至误以为使用Java语言开发游戏是一件费力不讨好且没有出路的事情。

事实上,这种想法完全是没有必要且不符合实际的,作为能和苹果iOS分庭抗礼的Android(各种意义上),当然也会有相当数量的游戏引擎存在。仅仅因为我们处于这个狭小的天地间,与外界接触不够,所以对它们的存在茫然不知罢了。

 

下面我就罗列出八款常见的Android游戏引擎,以供有需要者参考(收费,下载量过小,不公布源码,以及鄙人不知道(-_-)的引擎不在此列)。

 

1、Angle

 

Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发。该引擎全部用Java代码编写,并且可以根据自己的需要替换里面的实现,缺陷在于文档不足,而且下载的代码中仅仅包含有少量的示例教程。

 

最低运行环境要求不详。

 

项目地址:http://code.google.com/p/angle/

 

2、Rokon

 

rokon是一款Android 2D游戏引擎,基于OpenGL ES技术开发,物理引擎为Box2D,因此能够实现一些较为复杂的物理效果,该项目最新版本为 2.0.3 (09/07/10)。总体来说,此引擎最大的优点在于其开发文档相当之完备,并且项目作者对反馈Bug的修正非常之神速,所以该框架的使用在目前也最为广泛,有人干脆将它称为Cocos2d-iPhone引擎的Android版(业务逻辑和编码风格上也确实很像)。附带一提,国内某个需要注册会员才能下载的Android游戏框架衍生于此框架,所以大家也不要刻板的认为收费便一定是好的,免费就一定不好。

 

最低运行环境要求为Android 1.5。

 

项目地址:http://code.google.com/p/rokon/

 

3、LGame

 

LGame是一款国人开发的Java游戏引擎,有Android及PC(J2SE)两个开发版本,目前最高版本同为0.2.6(31/07/10)。其底层绘图器LGrpaphics封装有J2SE以及J2ME提供的全部Graphics API(PC版采用Graphics2D封装,Android版采用Canvas模拟实现),所以能够将J2SE或J2ME开发经验直接套用其中,两版本间主要代码能够相互移植。Android版内置有Admob接口,可以不必配置XML直接硬编码Admob广告信息。

 

该引擎除了基本的音效、图形、物理、精灵等常用组件以外,也内置有Ioc、xml、http等常用Java组件的封装,代价是jar体积较为庞大,PC版已突破1.2MB,Android版有所简化也在500KB左右。此外,该引擎还内置有按照1:1实现的J2ME精灵类及相关组件,可以将绝大多数 J2ME游戏平移到Android或PC版中。唯一遗憾的是,该项目作者是个极其懒惰的家伙,开发文档从去年说到今年依旧没有提供,只有游戏示例可供下载。

 

最低运行环境要求为Android 1.1。

 

项目地址:http://code.google.com/p/loon-simple/

 

4、AndEngine

 

andengine同样是一款基于OpenGL ES技术的Android游戏引擎,物理引擎同样为Box2D(标配|||)。该框架性能普通,文档缺乏,但示例较为丰富。

 

下载地址(未直接提供jar下载,源码可通过svn提取):http://code.google.com/p/andengine/

 

最低运行环境要求不详。

 

项目地址:http://code.google.com/p/rokon/

 

5、libgdx

 

libgdx是一款基于OpenGL ES技术开发的Android游戏引擎,支持Android平台下的2D游戏开发,物理引擎采用Box2D实现。单就性能角度来说,堪称是一款非常强大的 Android游戏引擎,但缺陷在于精灵类等相关组件在使用上不够简化,而且文档也较为匮乏。

 

最低运行环境要求不详。

 

项目地址:http://code.google.com/p/libgdx/

 

6、jPCT

 

jPCT是一款基于OpenGL技术开发的3D图形引擎(PC环境为标准OpenGL,Android为OpenGL ES),以Java语言为基础的,拥有功能强大的Java 3D解决方案。该引擎与LGame(此为2D游戏引擎)相类似,目前拥有PC(J2SE)以及Android两个开发版本。

 

jPCT的最大优势之一,就在于它惊人的向下兼容性。在PC环境中,jPCT甚至可以运行在JVM1.1环境之中,因为jPCT内部提供的图形渲染接口完全符合所有的Java 1.1规范(就连已经消失的Microsoft VM乃至更古老的Netscape 4 VM也不例外)。

 

最低运行环境要求为Android 1.5。

 

项目地址:http://www.jpct.net/jpct-ae/

 

7、Alien3d

 

Alien3d是一款体积非常之小的Android 3D游戏引擎,基于OpenGL ES技术开发。为了压缩体积,它根据不同功能采用多jar方式发布(包括alien3d-engine.jar,alien3d- tiled.jar,alien3d-sprites.jar,alien3d-shapes.jar,alien3d- particles2d.jar,),事实上它的核心文件大约只有40KB,所有相关jar的总和也不足150KB。

 

最低运行环境要求为Android 1.5。

 

项目地址:http://code.google.com/p/alien3d/

 

8、Catcake

 

Catcake是一款跨平台的Java 3D图形引擎,目前支持PC(J2SE)及Android环境运行(已有iPhone版规划)。该引擎在易用性和运行性能上皆有出色的表现,支持常见的游戏开发功能,诸如精灵动画,音频处理和视频播放等。

 

最低运行环境要求为Android 1.6。

 

项目地址:http://code.google.com/p/catcake/

 

源文档 <http://www.cnblogs.com/henryhu/archive/2011/02/10/1950983.html>

通过admin

Android获取系统cpu信息,内存,版本,电量等信息

1、CPU频率,CPU信息:/proc/cpuinfo和/proc/stat

通过读取文件/proc/cpuinfo系统CPU的类型等多种信息。

读取/proc/stat 所有CPU活动的信息来计算CPU使用率

 

下面我们就来讲讲如何通过代码来获取CPU频率:

package com.orange.cpu;

 

import java.io.BufferedReader;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.io.InputStream;

 

public class CpuManager {

 

// 获取CPU最大频率(单位KHZ)

// “/system/bin/cat” 命令行

// “/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq” 存储最大频率的文件的路径

public static String getMaxCpuFreq() {

String result = “”;

ProcessBuilder cmd;

try {

String[] args = { “/system/bin/cat”,

“/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq” };

cmd = new ProcessBuilder(args);

Process process = cmd.start();

InputStream in = process.getInputStream();

byte[] re = new byte[24];

while (in.read(re) != -1) {

result = result + new String(re);

}

in.close();

} catch (IOException ex) {

ex.printStackTrace();

result = “N/A”;

}

return result.trim();

}

 

// 获取CPU最小频率(单位KHZ)

public static String getMinCpuFreq() {

String result = “”;

ProcessBuilder cmd;

try {

String[] args = { “/system/bin/cat”,

“/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq” };

cmd = new ProcessBuilder(args);

Process process = cmd.start();

InputStream in = process.getInputStream();

byte[] re = new byte[24];

while (in.read(re) != -1) {

result = result + new String(re);

}

in.close();

} catch (IOException ex) {

ex.printStackTrace();

result = “N/A”;

}

return result.trim();

}

 

// 实时获取CPU当前频率(单位KHZ)

public static String getCurCpuFreq() {

String result = “N/A”;

try {

FileReader fr = new FileReader(

“/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq”);

BufferedReader br = new BufferedReader(fr);

String text = br.readLine();

result = text.trim();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return result;

}

 

// 获取CPU名字

public static String getCpuName() {

try {

FileReader fr = new FileReader(“/proc/cpuinfo”);

BufferedReader br = new BufferedReader(fr);

String text = br.readLine();

String[] array = text.split(“:\\s+”, 2);

for (int i = 0; i < array.length; i++) {

}

return array[1];

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

 

2、内存:/proc/meminfo

public void getTotalMemory() {  
        String str1 = "/proc/meminfo";  
        String str2="";  
        try {  
            FileReader fr = new FileReader(str1);  
            BufferedReader localBufferedReader = new BufferedReader(fr, 8192);  
            while ((str2 = localBufferedReader.readLine()) != null) {  
                Log.i(TAG, "---" + str2);  
            }  
        } catch (IOException e) {  
        }  
    }

3、Rom大小

public long[] getRomMemroy() {  
        long[] romInfo = new long[2];  
        //Total rom memory  
        romInfo[0] = getTotalInternalMemorySize();  

        //Available rom memory  
        File path = Environment.getDataDirectory();  
        StatFs stat = new StatFs(path.getPath());  
        long blockSize = stat.getBlockSize();  
        long availableBlocks = stat.getAvailableBlocks();  
        romInfo[1] = blockSize * availableBlocks;  
        getVersion();  
        return romInfo;  
    }  

    public long getTotalInternalMemorySize() {  
        File path = Environment.getDataDirectory();  
        StatFs stat = new StatFs(path.getPath());  
        long blockSize = stat.getBlockSize();  
        long totalBlocks = stat.getBlockCount();  
        return totalBlocks * blockSize;  
    }

4、sdCard大小

public long[] getSDCardMemory() {  
        long[] sdCardInfo=new long[2];  
        String state = Environment.getExternalStorageState();  
        if (Environment.MEDIA_MOUNTED.equals(state)) {  
            File sdcardDir = Environment.getExternalStorageDirectory();  
            StatFs sf = new StatFs(sdcardDir.getPath());  
            long bSize = sf.getBlockSize();  
            long bCount = sf.getBlockCount();  
            long availBlocks = sf.getAvailableBlocks();  

            sdCardInfo[0] = bSize * bCount;//总大小  
            sdCardInfo[1] = bSize * availBlocks;//可用大小  
        }  
        return sdCardInfo;  
    }

5、电池电量

private BroadcastReceiver batteryReceiver=new BroadcastReceiver(){  

        @Override  
        public void onReceive(Context context, Intent intent) {  
            int level = intent.getIntExtra("level", 0);  
            //  level加%就是当前电量了  
    }  
    };  
registerReceiver(batteryReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

6、系统的版本信息

public String[] getVersion(){  
    String[] version={"null","null","null","null"};  
    String str1 = "/proc/version";  
    String str2;  
    String[] arrayOfString;  
    try {  
        FileReader localFileReader = new FileReader(str1);  
        BufferedReader localBufferedReader = new BufferedReader(  
                localFileReader, 8192);  
        str2 = localBufferedReader.readLine();  
        arrayOfString = str2.split("\\s+");  
        version[0]=arrayOfString[2];//KernelVersion  
        localBufferedReader.close();  
    } catch (IOException e) {  
    }  
    version[1] = Build.VERSION.RELEASE;// firmware version  
    version[2]=Build.MODEL;//model  
    version[3]=Build.DISPLAY;//system version  
    return version;  
}

7、mac地址和开机时间

public String[] getOtherInfo(){  
    String[] other={"null","null"};  
       WifiManager wifiManager = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);  
       WifiInfo wifiInfo = wifiManager.getConnectionInfo();  
       if(wifiInfo.getMacAddress()!=null){  
        other[0]=wifiInfo.getMacAddress();  
    } else {  
        other[0] = "Fail";  
    }  
    other[1] = getTimes();  
       return other;  
}  
private String getTimes() {  
    long ut = SystemClock.elapsedRealtime() / 1000;  
    if (ut == 0) {  
        ut = 1;  
    }  
    int m = (int) ((ut / 60) % 60);  
    int h = (int) ((ut / 3600));  
    return h + " " + mContext.getString(R.string.info_times_hour) + m + " "  
            + mContext.getString(R.string.info_times_minute);  
}

 

 

部分内容转载自:

http://gqdy365.iteye.com/blog/1066113

http://blog.csdn.net/chuxing/article/details/7571547

通过admin

Android 中使用自定义字体的方法

1、Android系统默认支持三种字体,分别为:“sans”, “serif”, “monospace

2、在Android中可以引入其他字体 。

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:Android="http://schemas.android.com/apk/res/android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >

    <TableRow>

        <TextView
            Android:layout_marginRight="4px"
            Android:text="sans:"
            Android:textSize="20sp" >
        </TextView>
        <!-- 使用默认的sans字体 -->

        <TextView
            Android:id="@+id/sans"
            Android:text="Hello,World"
            Android:textSize="20sp"
            Android:typeface="sans" >
        </TextView>
    </TableRow>

    <TableRow>

        <TextView
            Android:layout_marginRight="4px"
            Android:text="serif:"
            Android:textSize="20sp" >
        </TextView>
        <!-- 使用默认的serifs字体 -->

        <TextView
            Android:id="@+id/serif"
            Android:text="Hello,World"
            Android:textSize="20sp"
            Android:typeface="serif" >
        </TextView>
    </TableRow>

    <TableRow>

        <TextView
            Android:layout_marginRight="4px"
            Android:text="monospace:"
            Android:textSize="20sp" >
        </TextView>
        <!-- 使用默认的monospace字体 -->

        <TextView
            Android:id="@+id/monospace"
            Android:text="Hello,World"
            Android:textSize="20sp"
            Android:typeface="monospace" >
        </TextView>
    </TableRow>
    <!-- 这里没有设定字体,我们将在Java代码中设定 -->

    <TableRow>

        <TextView
            Android:layout_marginRight="4px"
            Android:text="custom:"
            Android:textSize="20sp" >
        </TextView>

        <TextView
            Android:id="@+id/custom"
            Android:text="Hello,World"
            Android:textSize="20sp" >
        </TextView>
    </TableRow>

</TableLayout>
// 得到TextView控件对象
TextView textView = (TextView) findViewById(R.id.custom);
// 将字体文件保存在assets/fonts/目录下,www.linuxidc.com创建Typeface对象
Typeface typeFace = Typeface.createFromAsset(getAssets(),"fonts/DroidSansThai.ttf");
// 应用字体
textView.setTypeface(typeFace);

如果想对整个界面的所有控件都应用自定义字体,可以:

package arui.blog.csdn.net;  

import android.app.Activity;  
import android.graphics.Typeface;  
import android.view.View;  
import android.view.ViewGroup;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.TextView;  

public class FontManager {  

    public static void changeFonts(ViewGroup root, Activity act) {  

       Typeface tf = Typeface.createFromAsset(act.getAssets(),  
              "fonts/xxx.ttf");  

       for (int i = 0; i < root.getChildCount(); i++) {  
           View v = root.getChildAt(i);  
           if (v instanceof TextView) {  
              ((TextView) v).setTypeface(tf);  
           } else if (v instanceof Button) {  
              ((Button) v).setTypeface(tf);  
           } else if (v instanceof EditText) {  
              ((EditText) v).setTypeface(tf);  
           } else if (v instanceof ViewGroup) {  
              changeFonts((ViewGroup) v, act);  
           }  
       }  

    }  
}