1. Android系统手机wifi通信功能开发
IDE就用Eclipse就足够了 对于Wifi的控制 android.net.wifi下有不少接口 但是要分别开发电视端和手机端 多思考就能找到电视和手机之间通讯的最好方式
2. android系统怎么通过wifi连接单片机csdn
看看是用什么库或框架。。。。。。。。。自带的HttpURLConnection也可以的,直接连接就行,只是要另起线程 。。。。。。。。。。
3. android开发框架有哪些
1、Rajawali
介绍:
安卓的OpenGL ES 2.0/3.0 引擎。可以用于制作普通应用或者动态壁纸,当然也可以用于制作游戏。
项目地址: https://github.com/Rajawali/Rajawali
2、RxAndroid
介绍:
RxAndroid是RxJava的一个针对Android平台的扩展。它包含了一些能够简化Android开发的工具。
项目地址: https://github.com/ReactiveX/RxAndroid
3、Paginize
介绍:
Paginize 是一个轻量级的UI框架,使用注解来注入布局和view,除了使用注解之外,该框架还有两个特色:1.用Page的概念来取代Fragment,2.切换page时自带ios风格的动画效果。
项目地址: https://github.com/neevek/Paginize
4、otto
介绍:
Otto 是square公司出的一个事件库(pub/sub模式),用来简化应用程序组件之间的通讯。 Otto 修改自Google的Guava库,专门为Android平台进行了优化。
项目地址: https://github.com/square/otto
5 、rebound
介绍:
rebound是facebook的开源动画库。可以认为这个动画库是独立于android Framework之外的一种动画实现。
项目地址: https://github.com/facebook/rebound
6、KJFrameForAndroid
介绍:
KJFrameForAndroid 又叫KJLibrary,是一个帮助快速开发的框架。使用KJFrameForAndroid,你可以只用一行代码就完成http请求、网络图片加载、数据库数据保存或读取。
项目地址: https://github.com/kymjs/KJFrameForAndroid
7、xUtils
介绍:
xUtils
包含了很多实用的android工具。 xUtils
支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls
最低兼容android 2.2 (api level 8)
项目地址: https://github.com/wyouflf/xUtils
目前xUtils主要有四大模块:
DbUtils模块:
android中的orm框架,一行代码就可以进行增删改查;
支持事务,默认关闭;
可通过注解自定义表名,列名,外键,唯一性约束,NOT NULL约束,CHECK约束等(需要混淆的时候请注解表名和列名);
支持绑定外键,保存实体时外键关联实体自动保存或更新;
自动加载外键关联实体,支持延时加载;
支持链式表达查询,更直观的查询语义,参考下面的介绍或sample中的例子。
ViewUtils模块:
android中的ioc框架,完全注解方式就可以进行UI,资源和事件绑定;
新的事件绑定方式,使用混淆工具混淆后仍可正常工作;
目前支持常用的20种事件绑定,参见ViewCommonEventListener类和包com.lidroid.xutils.view.annotation.event。
HttpUtils模块:
支持同步,异步方式的请求;
支持大文件上传,上传大文件不会oom;
支持GET,POST,PUT,MOVE,COPY,DELETE,HEAD,OPTIONS,TRACE,CONNECT请求;
下载支持301/302重定向,支持设置是否根据Content-Disposition重命名下载的文件;
返回文本内容的请求(默认只启用了GET请求)支持缓存,可设置默认过期时间和针对当前请求的过期时间。
BitmapUtils模块:
加载bitmap的时候无需考虑bitmap加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象;
支持加载网络图片和本地图片;
内存管理使用lru算法,更好的管理bitmap内存;
可配置线程加载线程数量,缓存大小,缓存路径,加载显示动画等...
8、butterknife-view
注入工具
介绍:
为了减少频繁的调用findViewById(R.id...),可以采用一些注入框架,可以简化自己的代码,让你更专注于实际的功能开发,butterknife就是这样的一个框架,他是jakewharton大神的作品,值得一试。
class ExampleActivity extends Activity {
@InjectView(R.id.title) TextView title;
@InjectView(R.id.subtitle) TextView subtitle;
@InjectView(R.id.footer) TextView footer;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_activity);
ButterKnife.inject(this);
// TODO Use "injected" views...
}
}
这是博客地址:
http://jakewharton.github.io/butterknife/
项目地址: https://github.com/JakeWharton/butterknife
9、cube-sdk
一淘推出的开发框架
介绍:
cube一个Android开发包, 可极大提高你的开发效率。主要提供了图片加载以及网络请求方面的api功能。
项目地址: https://github.com/etao-open-source/cube-sdk
他们的网站:http://cube-sdk.liaohuqiu.net/cn/
10、ASimpleCache
一个简单的缓存框架
介绍:
ASimpleCache
是一个为android制定的 轻量级的 开源缓存框架。轻量到只有一个java文件(由十几个类精简而来)。
它可以缓存什么东西?普通的字符串、JsonObject、JsonArray、Bitmap、Drawable、序列化的java对象,和
byte数据。
项目地址: https://github.com/yangfuhai/ASimpleCache
11、androidannotations
介绍:
AndroidAnnotations是一个能够让你快速进行Android开发的开源框架,它能让你专注于真正重要的地方。
使代码更加精简,使项目更加容易维护,它的目标就是“Fast Android Development.Easy maintainance”。
通过一段时间的使用发现,相比原生的Android开发,确实能够让你少些很多代码
项目地址: https://github.com/excilys/androidannotations
12、Event Bus
解耦android模块
介绍:
当一个Android应用功能越来越多的时候,保证应用的各个部分之间高效的通信将变得越来越困难。如何优雅地解决这个问题?这时候,就需要使用到EventBus。
EventBus是GreenRobot出品的Android系统的一个Event
Bus类库,使用起来和之前我们所介绍的Square的Otto差不多,都是用来简化应用组件之间的通信。
项目地址: https://github.com/greenrobot/EventBus
13、BeeFramework_Android
介绍:
BeeFramework
Android版主要为Android初级开发人员提供一个基于MVC开发模式的APP DEMO,并提供一套APP内调试工具,包括
查看网络数据请求历史 Crash Log列表 真机WIFI环境下模拟2G\3G网络 查看APP性能(内存占用,CPU占用等)
项目地址: https://github.com/BeeFramework/BeeFramework_Android
14、afinal
介绍:
Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。
Afinal里面目前包含了四大组件:
FinalHttp:用于请求http数据,直接ajax方式请求,文件上传, 断点续传下载文件等
FinalBitmap:用于显示bitmap图片,而无需考虑线程并发和oom等问题。
FinalActivity:完全可以通过注解方式绑定控件和事件,无需编写代码。
FinalDb:android中sqlite的orm框架,一行代码搞定增删改查。
Afinal是一个android的ioc,orm框架,内置了四大模块功能:FinalAcitivity,FinalBitmap,FinalDb,FinalHttp。通过finalActivity,我们可以通过注解的方式进行绑定ui和事件。通过finalBitmap,我们可以方便的加载bitmap图片,而无需考虑oom等问题。通过finalDB模块,我们一行代码就可以对android的sqlite数据库进行增删改查。通过FinalHttp模块,我们可以以ajax形式请求http数据。详情请通过以下网址查看。
项目地址: https://github.com/yangfuhai/afinal
15、Volley
介绍:
在这之前,我们在程序中需要和网络通信的时候,大体使用的东西莫过于AsyncTaskLoader,HttpURLConnection,AsyncTask,HTTPClient(Apache)等,今年的Google
I/O 2013上,Volley发布了。Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。
项目地址: https://github.com/mcxiaoke/android-volley
4. 如何从C++代码直接访问android framework层的WifiService
说到底,Java层的service就是就C++层的binder的封装,所以从原理上来讲通过C++代码直接访问android framework层的service是完全可能的,这篇文章以访问WifiService为例,讲解如何去实现这个功能。
费话少说,直接上代码:
WifiTest.cpp
[cpp] view plain在CODE上查看代码片派生到我的代码片
#include <sys/types.h>
#include <unistd.h>
#include <grp.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
#include <utils/Log.h>
#include <utils/String16.h>
//#include <utils/Vector.h>
#include <utils/List.h>
#include <utils/PropertyMap.h>
using namespace android;
#define WIFI_SERVICE "wifi"
const String16 WIFI_DESCRIPTOR("android.net.wifi.IWifiManager");
class ScanResult
{
private:
ScanResult& operator=(const ScanResult& o);
public:
ScanResult(const ScanResult& o):
mSsid(o.mSsid),mBssid(o.mBssid),mCaps(o.mCaps),mLevel(o.mLevel),mFrequency(o.mFrequency),mTimestamp(o.mTimestamp)
{
}
ScanResult(String8 ssid,String16 bssid,String16 caps,int level,int freq,int64_t timeStamp):
mSsid(ssid),mBssid(bssid),mCaps(caps),mLevel(level),mFrequency(freq),mTimestamp(timeStamp)
{
}
void mp()
{
char temp[130];
int size;
memset(temp,0,sizeof(temp));
printf("ssid %s \n",mSsid.string());
size = mBssid.size();
if(size > sizeof(temp)/2 - 1)
{
size = sizeof(temp)/2 - 1;
}
utf16_to_utf8(mBssid.string(), size, temp);
printf("Bssid %s \n",temp);
size = mCaps.size();
if(size > sizeof(temp)/2 - 1)
{
size = sizeof(temp)/2 - 1;
}
utf16_to_utf8(mCaps.string(), size, temp);
printf("ssid %s \n",temp);
printf("level %d \n",mLevel);
printf("freq %d \n",mFrequency);
printf("freq %ld \n",mTimestamp);
}
private:
String8 mSsid;
String16 mBssid;
String16 mCaps;
int mLevel;
int mFrequency;
int64_t mTimestamp;
};
class IWifiService: public android::IInterface {
public:
DECLARE_META_INTERFACE(WifiService)
virtual void startScan(int forceActive) = 0;
virtual int getScanResults(List<ScanResult> &list) = 0;
virtual bool setWifiEnabled(bool enable) = 0;
};
class BpWifiService: public android::BpInterface<IWifiService>
{
enum
{
FIRST_CALL_TRANSACTION = 1,
TRANSACTION_getConfiguredNetworks = (android::IBinder::FIRST_CALL_TRANSACTION + 0),
TRANSACTION_addOrUpdateNetwork = (android::IBinder::FIRST_CALL_TRANSACTION + 1),
TRANSACTION_removeNetwork = (android::IBinder::FIRST_CALL_TRANSACTION + 2),
TRANSACTION_enableNetwork = (android::IBinder::FIRST_CALL_TRANSACTION + 3),
TRANSACTION_disableNetwork = (android::IBinder::FIRST_CALL_TRANSACTION + 4),
TRANSACTION_pingSupplicant = (android::IBinder::FIRST_CALL_TRANSACTION + 5),
TRANSACTION_startScan = (android::IBinder::FIRST_CALL_TRANSACTION + 6),
TRANSACTION_getScanResults = (android::IBinder::FIRST_CALL_TRANSACTION + 7),
TRANSACTION_disconnect = (android::IBinder::FIRST_CALL_TRANSACTION + 8),
TRANSACTION_reconnect = (android::IBinder::FIRST_CALL_TRANSACTION + 9),
TRANSACTION_reassociate = (android::IBinder::FIRST_CALL_TRANSACTION + 10),
TRANSACTION_getConnectionInfo = (android::IBinder::FIRST_CALL_TRANSACTION + 11),
TRANSACTION_setWifiEnabled = (android::IBinder::FIRST_CALL_TRANSACTION + 12),
TRANSACTION_getWifiEnabledState = (android::IBinder::FIRST_CALL_TRANSACTION + 13),
TRANSACTION_setCountryCode = (android::IBinder::FIRST_CALL_TRANSACTION + 14),
TRANSACTION_setFrequencyBand = (android::IBinder::FIRST_CALL_TRANSACTION + 15),
TRANSACTION_getFrequencyBand = (android::IBinder::FIRST_CALL_TRANSACTION + 16),
TRANSACTION_isDualBandSupported = (android::IBinder::FIRST_CALL_TRANSACTION + 17),
TRANSACTION_saveConfiguration = (android::IBinder::FIRST_CALL_TRANSACTION + 18),
TRANSACTION_getDhcpInfo = (android::IBinder::FIRST_CALL_TRANSACTION + 19),
TRANSACTION_acquireWifiLock = (android::IBinder::FIRST_CALL_TRANSACTION + 20),
TRANSACTION_updateWifiLockWorkSource = (android::IBinder::FIRST_CALL_TRANSACTION + 21),
TRANSACTION_releaseWifiLock = (android::IBinder::FIRST_CALL_TRANSACTION + 22),
TRANSACTION_initializeMulticastFiltering = (android::IBinder::FIRST_CALL_TRANSACTION + 23),
TRANSACTION_isMulticastEnabled = (android::IBinder::FIRST_CALL_TRANSACTION + 24),
TRANSACTION_acquireMulticastLock = (android::IBinder::FIRST_CALL_TRANSACTION + 25),
TRANSACTION_releaseMulticastLock = (android::IBinder::FIRST_CALL_TRANSACTION + 26),
TRANSACTION_setWifiApEnabled = (android::IBinder::FIRST_CALL_TRANSACTION + 27),
TRANSACTION_getWifiApEnabledState = (android::IBinder::FIRST_CALL_TRANSACTION + 28),
TRANSACTION_getWifiApConfiguration = (android::IBinder::FIRST_CALL_TRANSACTION + 29),
TRANSACTION_setWifiApConfiguration = (android::IBinder::FIRST_CALL_TRANSACTION + 30),
TRANSACTION_startWifi = (android::IBinder::FIRST_CALL_TRANSACTION + 31),
TRANSACTION_stopWifi = (android::IBinder::FIRST_CALL_TRANSACTION + 32),
TRANSACTION_addToBlacklist = (android::IBinder::FIRST_CALL_TRANSACTION + 33),
TRANSACTION_clearBlacklist = (android::IBinder::FIRST_CALL_TRANSACTION + 34),
TRANSACTION_getWifiServiceMessenger = (android::IBinder::FIRST_CALL_TRANSACTION + 35),
TRANSACTION_getWifiStateMachineMessenger = (android::IBinder::FIRST_CALL_TRANSACTION + 36),
TRANSACTION_getConfigFile = (android::IBinder::FIRST_CALL_TRANSACTION + 37),
TRANSACTION_captivePortalCheckComplete = (android::IBinder::FIRST_CALL_TRANSACTION + 38),
};
public:
BpWifiService(const android::sp<android::IBinder>& impl): android::BpInterface<IWifiService>(impl)
{
}
void startScan(int forceActive)
{
android::Parcel data, reply;
data.writeInterfaceToken(WIFI_DESCRIPTOR);
if (forceActive)
{
data.writeInt32(1);
}
else
{
data.writeInt32(0);
}
remote()->transact(TRANSACTION_startScan, data, &reply, 0);
}
virtual int getScanResults(List<ScanResult> &list)
{
Parcel data, reply;
data.writeInterfaceToken(WIFI_DESCRIPTOR);
remote()->transact(TRANSACTION_getScanResults, data, &reply, 0);
if (0 != reply.readExceptionCode())
{
return 0;
}
int count = reply.readInt32();
for (int i=0;i<count;i++)
{
String8 ssid;
int res = reply.readInt32();
if (res != 0)
{
reply.readInt32();
reply.readInt32();
int length = reply.readInt32();
ssid = String8((const char*)reply.readInplace(length),length);
}
// utf16_to_utf8(const char16_t* src, size_t src_len, char* dst);
String16 BSSID = reply.readString16();
String16 caps = reply.readString16();
int level = reply.readInt32();
int frequency = reply.readInt32();
int64_t timestamp = reply.readInt64();
ScanResult result(ssid,BSSID,caps,level,frequency,timestamp);
list.push_back(result);
}
return count;
}
bool setWifiEnabled(bool enable)
{
Parcel data, reply;
data.writeInterfaceToken(WIFI_DESCRIPTOR);
if(enable)
data.writeInt32(1);
else
data.writeInt32(0);
remote()->transact(TRANSACTION_setWifiEnabled, data,&reply,0);
reply.readExceptionCode();
return 0!=reply.readInt32();
}
};
IMPLEMENT_META_INTERFACE(WifiService, WIFI_DESCRIPTOR)
int main(int argc, char *argv[])
{
android::sp<android::IServiceManager> sm = android::defaultServiceManager();
android::sp<android::IBinder> binder;
android::sp<IWifiService> wifi;
binder = sm->getService(android::String16(WIFI_SERVICE));
if (binder == 0)
{
return 1;
}
wifi = android::interface_cast<IWifiService>(binder);
wifi->setWifiEnabled(true);
printf("+++++scan start");
wifi->startScan(1);
for(int i=0;i<10;i++)
{
usleep(1*1000*1000);
List<ScanResult> list;
wifi->getScanResults(list);
if(list.size() > 0)
{
for(List<ScanResult>::iterator it = list.begin();it != list.end();++it)
{
(*it).mp();
}
break;
}
}
return(0);
}
基本的思路很简单:
先通过:
android::defaultServiceManager()->getService(android::String16(WIFI_SERVICE));
获取binder接口,再通过Parcel读与binder,具体的实现可以参考IWifiManager.java的代码。
编译后运行以上的代码可以得到类似以下的输出:
ssid wifitest
Bssid b8:55:10:84:13:57
ssid [WPA-PSK-CCMP][WPA2-PSK-CCMP][WPS][ESS]
level -55
freq 2447
time stamp 1073922473
ssid test
Bssid 08:bd:43:c3:a9:96
ssid [WPA2-PSK-CCMP][WPS][ESS]
level -66
freq 2462
time stamp 1073922473
5. 怎样将android wifi编译成驱动模块
修改 init.rc:很多文章都有描述,但还是有些说明不清的地方,我先列出增加项,然后作些说明。
增加: mkdir /system/etc/wifi 0771 wifi wifi
chmod 0771 /system/etc/wifi
chmod 0660 /system/etc/wifi/wpa_supplicant.conf
chown wifi wifi /system/etc/wifi/wpa_supplicant.conf #wifi的原始配置文件
# wpa_supplicant socket
mkdir /data/system/wpa_supplicant 0771 wifi wifi
chmod 0771 /data/system/wpa_supplicant #放置wifi interface的地方
mkdir /data/misc/wifi 0771 wifi wifi
chmod 0771 /data/misc/wifi
chmod 0660 /data/misc/wifi/wpa_supplicant.conf #wifi的配置文件,将由wpa_supplicant根据实际配置写入该文件
mkdir /data/misc/wifi/sockets 0777 wifi wifi #与上层通过socket通信的路径
# Prepare for wifi
setprop wifi.interface ra0 #intreface名称设置,这在framework/base/wifi/java/android/net/wifi /WifiStateTracker.java中会用到,以处理dhcp。rt2070用ra0,而vt6656使用eth1。
这里0771对 目录权限的处理是为了所有用户能对下一级进行搜索,而红字特别提醒的权限配置,是因为/data/misc/wifi/sockets目录不仅为wifi拥有者服务,还因为通信的原因要和其他用户联系,要不然,将会出现Unable to open connection to supplicant on "/data/system/wpa_supplicant/ra0": Connection refused,或permission denied的错误。很多人干脆将上述所有的权限都设为0777,当然也行,但总觉得有些粗糙。
service的修改:
service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant /
-Dwext -ira0 -c/data/misc/wifi/wpa_supplicant.conf #也可以用/system/etc/wifi/wpa_supplicant.conf代替
user root
group system wifi inet
# socket wpa_wlan0 dgram 660 wifi wifi #屏蔽该项是因为这项是用于UDP连接的
disable
oneshot
service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d -B ra0
group system dhcp wifi
disabled
oneshot
6. 安卓怎么恢复wifi模块
恢复安卓WIFI模块的方法有几个:
1,重新搜索,关闭wifi再打开,可以搜索到的。
2,内容重新启动也可以解决。
3,搜索网络在连接,密码。
4,摊贩路由器复位,重新设记WIFI密码。
7. android手机如何实现wifi网桥
1 先用手机wifi解开网络密码 记下网络名称和密码 2电脑连接无线路由器 打开浏览器登陆无线路由器 界面地址一般为192.168.1.1 登陆账号和密码一般为admin 注意 这个是副无线路由 主要设计他就可以了 这样其实这个方法可以橙他人的网
2
3改无线路由的ip为192.168.1.2 保全重启 刷新后 再无线设置打开wds
扫描出主路由器网络名称 把信道记下来 点击链接 把网络名称和密码填上去
再回到副路由器改一下信道 跟刚才的信道一样
3
4找到DHCP页面 把地址池改成和主路由器不一样就可以了 一般为192.168.1.200----------192.168.1.225 改DHCP服务器为“不启动” 最后重启路由器 ok
8. android开发一般都使用什么框架
目前框架使用的主要都是开源框架,都可以在github上找到:
1、volley
2、android-async-http
3、Afinal框架
4、xUtils框架
5、ThinkAndroid
6、LoonAndroid
主要有以下模块:
(1) 自动注入框架(只需要继承框架内的application既可)
(2)
图片加载框架(多重缓存,自动回收,最大限度保证内存的安全性)
(3) 网络请求模块(继承了基本上现在所有的http请求)
(4)
eventbus(集成一个开源的框架)
(5) 验证框架(集成开源框架)
(6) json解析(支持解析成集合或者对象)
(7) 数据库(不知道是哪位写的 忘记了)
(8) 多线程断点下载(自动判断是否支持多线程,判断是否是重定向)
(9)
自动更新模块
(10) 一系列工具类
9. Android 开发一般都使用什么框架
开源框架推荐:
网络
* [okhttp](square/okhttp · GitHub)
* [android-async-http](loopj/android-async-http · GitHub)
事件总线
* [otto](square/otto · GitHub)
* [EventBus](greenrobot/EventBus · GitHub)
依赖注入
* [Dagger](square/dagger · GitHub)
* [RoboGuice](roboguice/roboguice · GitHub)
* [ButterKnife](JakeWharton/butterknife · GitHub)
图片
* [Fresco](facebook/fresco · GitHub)
* [Glide](bumptech/glide · GitHub)
* [picasso](square/picasso · GitHub)
数据库
* [greenDao](greenrobot/greenDAO · GitHub)
* [ormlite](j256/ormlite-android · GitHub)
* [LitePal](LitePalFramework/LitePal · GitHub)
响应式编程
* [RxJava](ReactiveX/RxJava · GitHub)
* [RxAndroid](ReactiveX/RxAndroid: RxJava bindings for An...)
日志输出
* [logger](orhanobut/logger: Simple, pretty and powerf...)
* [android-CLog](liaohuqiu/android-CLog)
* [KLog](ZhaoKaiQiang/KLog · GitHub)
* [LogUtils](pengwei1024/LogUtils · GitHub)
崩溃统计平台
* [腾讯bugly](腾讯Bugly - Android Crash(崩溃)_iOS Crash(崩溃)_ANR_卡顿)
* [Crittercism](Crittercism - Developer Home)
* [Crashlytics](The most powerful, yet lightest weight crash reporting solution for iOS and Android
developers.)
架构设计
这个肯定得了解下MVC,MVP,MVVM还有设计模式这些,这里有几个开源项目推荐下
philm
Movie collection and information app for Android.
Github地址:chrisbanes/philm: Movie collection and info...
SimpleNews
基于Material Design和MVP的新闻客户端
Github地址:GitHub - liuling07/SimpleNews: 基于Material Design和MVP的新闻客户端
GankDaily
A application show technical information every working days, use MVP pattern.
Github地址:maoruibin/GankDaily
SimplifyReader
Github地址:GitHub - SkillCollege/SimplifyReader: 一款基于Google Material Design设计开发的Android客户端,包括新闻简读,图片浏览,视频爽看 ,音乐轻听以及二维码扫描五个子模块。
NBAPlus
Github地址:SilenceDut/NBAPlus · GitHub
PhotoNoter
Github地址:yydct/PhotoNoter
Mei
Github地址:drakeet/Mei: gank.io unofficial client, RxJava & Retrofit
DebugDrawer
Android Debug Drawer for faster development
Github地址:palaima/DebugDrawer · GitHub
ViewServer
Local server for Android's HierarchyViewer
Github地址:romainguy/ViewServer · GitHub
AndroidWiFiADB
IntelliJ/AndroidStudio plugin which provides a button to connect your Android device over WiFi to install, run and debug your applications without a USB connected.