android 框架_android框架 - CSDN
精华内容
参与话题
  • Android系统框架总结(好文)

    千次阅读 2018-08-15 15:47:06
    Android框架图 Android应用程序框架 UI基本开发 Fragment 安全策略 在Android中,安全涵盖了应用程序的部署和执行.对于部署来 说,Android应用程序必须被赋予一个数字证书才允许被安装到某个设备中.对 于运行来...

    原址

    通用概念

    Android框架图

    2016071201.png

    Android应用程序框架

    UI基本开发

    Fragment

    安全策略

    在Android中,安全涵盖了应用程序的部署和执行.对于部署来 说,Android应用程序必须被赋予一个数字证书才允许被安装到某个设备中.对 于运行来说,每个应用程序都在一个独立的应用程序中执行,每个进程都有一 个唯一的永久的用户ID(在安装的时候分配的).

    注册应用程序需要三样东西:

    1. 一个数字证书,
    2. 一个.apk文件
    3. 以及用于将数字签名应用到.apk文件的工具(jarsigner).

    注册一个应用程序步骤如下:

    • 使用Keytool创建一个自注册的证书.

       步骤1 Create a folder to hold the keystore, for example

    c:\android\release\.
    

      步骤2 在命名行中执行如下命令:

           keytool -genkey -v -keystore "FULL PATH OF release.keystore FILE FROM STEP 1"
           -alias androidbook -storepass paxxword -keypass paxxword -keyalg RSA
           -validity 14000
    

    keytool的参数说明如下: 2016070502.png

    • 使用Jarsigner注册.apk文件
      jarsigner -keystore "PATH TO YOUR release.keystore FILE" -storepass paxxword
      -keypass paxxword "PATH TO YOUR APK FILE" androidbook(别名)
      
    • 用zipalign作字节对齐 命令如下:
      zipalign –v 4 infile.apk outfile.apk
      

      验证一个.apk文件是否是4字节对齐,用如下命令

      zipalign –c –v 4 filename.apk
      
    • 安装应用程序
      adb install "PATH TO APK FILE GOES HERE"(安装)
      adb uninstall packagename(卸载)
      adb install –r "PATH TO APK FILE GOES HERE"(重装)
      

    Framework

    Audio System

    Audio System 介绍

    2016053001.png

    AudioTrack 介绍

    2016053002.png

    基本说明:

    1. 用于管理来自一个Source的Audio 播放将播放的Audio 数据送给 AudioFlinger
    2. 提供播放的控制接口 API:start(), stop(), …
    3. 提供Volume 控制接口, 用于控制L/R声道各自的Volume
      • API: setVolume
      • Android 体系中有3个Audio Volume控制, 最终的输出Volume是下面3 者的乘积
        1. Master Volume
        2. Stream Type Volume
        3. Track Volume
    4. AudioTrack可以配置为下面三种Mode:
      1. PUSH MODE
      2. PULL MODE
      3. STATIC MODE
    5. AudioTrack测试程序
      /**
       * 利用AudioTrack播放一个wav文件
       */
      
      //#define LOG_NDEBUG 0
      #define LOG_TAG "AudioTrackTest"
      //#include <utils/Log.h>
      #include <media/AudioTrack.h>
      #include <system/audio.h>
      using namespace android;
      #define ALOGD printf
      int main(int argc, char *argv[])
      {
        int readNum;
        unsigned short channel;
        unsigned int sampleRate;
        FILE *fp = fopen("bzk_chic.wav", "ab+");
        if (fp == NULL) {
          ALOGD("Cannot open .wav file");
          return -1;
        }
        ALOGD("Open wav file successfully!\n");
        fseek(fp, 0x16, 0); 
        readNum= fread(&channel, 1, 2, fp);
        if (readNum < 1) {
          ALOGD("Can not read channel number: %d\n", readNum);
          fclose(fp);
          return 0;
        }
        ALOGD("channel number is %d\n", channel);
        fseek(fp, 0x18, 0); 
        readNum = fread(&sampleRate, 1, 4, fp);
        if (readNum < 1) {
          ALOGD("Cannot read sample rate: %d\n", readNum);
          fclose(fp);
          return 0;
        }
        ALOGD("Sample Rate is %d\n", sampleRate);
      
        // playing to an AudioTrack, set up mask if necessary
        audio_channel_mask_t audioMask = AUDIO_CHANNEL_OUT_STEREO;
        if (0 == audioMask) {
          return -1;
        }
        sp<AudioTrack> audioTrack = new AudioTrack(
                                                   AUDIO_STREAM_MUSIC, sampleRate, AUDIO_FORMAT_PCM_16_BIT, audioMask,
                                                   0, AUDIO_OUTPUT_FLAG_NONE);
        status_t status = audioTrack->initCheck();
        if(status != NO_ERROR) {
          audioTrack.clear();
          ALOGD("Failed for initCheck()");
          return -1;
        }
        audioTrack->start();
      
        unsigned char *buffer = new unsigned char[channel * 64 * 2];
        while (1) {
          readNum = fread(buffer, 1, channel * 64 * 2, fp);
          if (readNum <= 0)
            break;
          ALOGD("Write data : %d to AudioTrack", readNum);
          audioTrack->write(buffer, readNum);
        }
      
        fclose(fp);
        delete []buffer;
        audioTrack->stop();
      
      }
      

    AudioRecord介绍

    2016053003.png

    基本说明:

    1. 用于管理从底层获取录音数据,并提供给上层
    2. 提供录音的控制接口 API:start(), stop()
    3. 获取声音资料的方式
      • 由上层主动调用AudioRecord::read() 来获取数据 (PULL MODE)
      • 上层提供Callback function, 通过AudioRecord主动将资料通过 Callback 给上层(PUSH MODE)

    AudioPolicyService介绍

    2016053004.png

    AudioPolicyService在Audio system中的位置和作用

    • 仅是一个行为决策者,而不是行为的实施者
    • 真正的实施者为AudioFlinger
    • 它是一个在后台进程中的服务实体,提供的服务就是告诉实施者要怎么去 做

    2016053005.png

    AudioPolicyService几大功能:

    • 设备状态管理
    • 输入输出策略管理
    • 音量控制管理
    • Effect 控制管理

    AudioFlinger

    2016053006.png

    AudioFlinger的线程循环逻辑如下所示:

    2016053007.png

    Media Framework

    基础知识

    AMessage代表一个消息,对应一个target, 根据这个target可以知道对 应的消息应该归哪个AHandler去处理。

    AHandler是处理消息的基类,它有一个id,处理与这个id相关联的AMessage, 在 onMessageReceived 函数中处理各种消息。 从AHandler派生的类,都会重写该方法,以处理各种消息。

    有一个全局的 ALooperRoster 对象,它维护了系统中存在的 AHandler对 象。

    ALooper对象,通过 registerHandler 接口将AHandler对象注册给ALooperRoster 对象维护的AHandler列表中。

    主要代码路径

    • MediaPlayer.java
      • Java 层的 MediaPlayer 接口,APK 主要通过 call 它的接口实现播放功能
      • code path: framework/base/media/java/android/media/MediaPlayer.java
    • Media JNI
      • MediaPlayer java 层与 native 层的接口
      • code path: framework/base/media/jni/androidmediaMediaPlayer.cpp
      • output:libmediajni.so
    • MediaPlayer
      • MediaPlayer Native 层 client 端接口
      • code path: framework/av/media/libmedia/
      • output:libmedia.so
    • Media Service
      • Native 层真正实现播放功能的 Service 进程
      • code path: framework/av/media/mediaserver framework/av/media/libmediaplayerservice
      • output: mediaserver libmediaplayerservice.so

    Stagefright

    • StagefrightPlayer
      • 负责提供 player 的接口
      • code path: framework/av/media/libmediaplayerservice/StagefrightPlayer.cpp
    • AwesomePlayer
      • 真正实现 playback 功能的模块
      • code path: : framework/av/media/libstagefright
    • DataSource
      • 提供 Source 数据,可以是本地文件,也可以是网络数据
      • code path: : framework/av/media/libstagefright
    • MediaSource
      • MediaSource使用到了DataSoure和OMX,可以提供解码后的供显示的数据
      • code path: framework/av/media/libstagefright/
    • OMXClient
      • 使用 OMX 的 client 端
      • code path: framework/av/media/libstagefright/
    • OMX
      • 提供一套接口接到底层的 decoder 进行解码
      • code path: framework/av/media/libstagefright/omx

    NuPlayer

    2016053008.png

    OpenMAX

    OpenMAX is a royalty-free, cross-platform API. OpenMAX Working Group has been formed by the Khronos Group. The Standard for Media Library Portability. Reduce the cost and complexity of porting multimedia software to new processors and architectures. 分为 OpenMAX DL, IL, AL 三层,Android 上只用到 OpenMAX IL.

    Graphics

    Android Graphics Pipeline Overview

    • Android Graphics Pipeline

      2016052601.png

      如图,对于一些Buffer,有些通过GPU处理后,再送给HWComposer,有些则 直接送给HWComposer处理。

    • BufferQueue

      2016052602.png

      关于BufferQueue的说明如下:

      1. manages flow of buffers between producers and consumers
      2. two queues
      3. producers dequeue unused buffers, fill them, then queue them
      4. consumers acquire filled buffers, use them, then release them when done.
    • SurfaceFlinger

      它的主要使用是:

      1. Responsible for compositing all windows into the display(s)
      2. Just another GL client
    • HW Composer

      一开始是为了加速叠图而准备的一个HAL,目前作为所有显示的HAL。

      • Overlay
        • Overlay 是什么

          在android 上面,屏幕上输出的画面都是由多个图层(layer)合成 (compsing)得到的结果. 所以在android上面,图像的合成是非常普 通而且常见(频繁)的操作, 如果有一个简单而省电的hardware(hw)来负 责图像合成, 可以很有效的降低功耗,而且也可以降低GPU的loading.

          Overlay 就是一个专门负责图像合成的一个hw. 相比GPU 而言, overlay 是一个非常简单图像处理hw. 和GPU具有的庞大的图形功能不 同, overlay只能负责简单的图像合成动作.

          由于overlay 功能简单,所以hw的实现上相比GPU也要简单很多,工作起 来也会非常省电.

        • Overlay 有什么限制

          由于overlay hw很简单,所以它只能处理简单的图像合成工作,太复杂 的图像合成工作还是要GPU来协助完成.

          overlay 无法处理的case:

          1. 需要旋转的图像
          2. 需要缩放的图像
          3. 图层超过4层

          不过对于普通的android应用场景来说,很少会出现上述的那些cases.

        • 没有overlay HW,图像合成流程

          Surfaceflinger把需要合成的layers 交给GPU 做composing, 最终输出 到屏幕。

          2016071204.png

        • 有Overlay HW, 图像合成的流程

          Surfaceflinger把需要合成的layers 交给ovl做composing, 最终输出 到屏幕。

          2016071205.png

        • 有overlay HW,但需要GPU做图像合成流程

          Overlay不能处理的layers, 会交给GPU做图像合成,GPU把图像合成为 一个layer, 然后再通过overlay 输出.

          2016071206.png

    Android Sync Framework

    • 定义

      Synchronization between consumers and producers who are from different hardware components to use a buffer atomically

    • 应用背景

      在复杂的DMA管线如图形管线(多媒体,摄像头,GPU以及显示设备),一 个buffer的消费者需要知道生产者什么时候完成生产(即创建一个Buffer, 并往里面放置消费者所需要的数据)。同样地,生产者也需要知道消费者 什么时候使用它创建的Buffer,以便它可以重新使用这个Buffer。而且, 一个Buffer可能被多个不同的消费者使用不同的时间。另外,一个消费者 可能需要互斥地消费多个Buffer,等等,有一个问题应运而生,就是如何 保证多个消费者之间同步使用Buffer,以及生产者与消费者协调使用 Buffer。因为Buffer是一个共享资源,且任何消费者或生产者对Buffer的 使用都是排他性的(因为它们属于不同的硬件单元或模块),大体看来, 需要解决如下两个问题:

      1. 消费者与生产者之间对Buffer的同步访问。
      2. 消费者之间对Buffer的同步访问。
    • 目标
      1. Provide a simple API to let components signal when buffers are ready/released.
      2. Allow synchronization primitives to be passed between processes and between userspace and the kernel.
      3. Allow implementers to exploit hardware sync support
      4. Provide visibility into the graphics pipeline for debugging
    • Software Stacks

      2016052609.png

    • 实现
      1. synctimeline

        2016052603.png

        • Represents monotonically increasing counter
        • Generally one instance per driver context
        • allows hardware specific implementation
        • swsync implementation provided
      2. syncpt

        2016052604.png

        • Represents a specific values on a parent timeline
        • 3 states
          • active
          • signaled
          • error
        • starts active and transitions once to either signaled or error
      3. syncfence

        2016052605.png

        • A collection of syncpts
        • Backed by a file and can be passed to userspace.
        • Main primitive drivers and userspace use to describe sync events/dependencies.
        • Fences are a promise by the kernel
          • that work has been queued
          • and will complete in a "timely" manner
        • Starts active and transitions to signaled with all of its syncptsbecome signaled or one becomes errored
        • The list of syncpts is immutable after fence creation
        • A syncpt can only be in one fence.
        • Two fences can be merged to create a third fence containing copies of the sync points in both.
        • Sync Merge
          • Before Merge

            2016052606.png

          • After Merge

            2016052607.png

      4. 代码
        • supported in android-3.10 kernel + staged for quite some time
        • Core
          • drivers/staging/android/sync.c
          • drivers/staging/android/sync.h
        • swsync
          • drivers/staging/android/sw_sync.c
          • drivers/staging/android/sw_sync.h
        • 接口声明

          2016052608.png

      5. 实现synctimeline的建议

        在实现前,先考虑是否可以直接使用swsync, 以swsync为起点。

        • Don'ts
          • Don't base a timeline on any "real" time.
          • Don't allow userspace to explicitly
            • create a fence
            • signal a fence
          • Don't access synctimeline, syncpt, or syncfence elements explicitly.
        • Dos
          • Do provide useful names
          • Do implement timelinevalue str and ptvaluestr
          • Do implement fill driverdata

    Input System

    Input Event Process Flow

    2016053009.png

    Architecture (ICS)

    2016053010.png

    Architecture (JB)

    2016053011.png

    Wifi Framework

    传统WiFi

    Android Framework中的wifi代码分为两部分,一部分面向应用开发者,提供 公共接口给应用开发者,另一部分则是框架的实现灵魂,代码分别位于: Android 5.1

    • frameworks\base\wifi\java\android\net\wifi
    • frameworks\opt\net\wifi\service
    • WifiConfigStore

    P2P/Miracast

    • 开启WifiSink的调用序列

      DisplayManager.requestEnableSink DisplayManager.enableSink DisplayManagerGlobal.enableSink DisplayManagerService.enableSink DisplayManagerService.enableSinkInternal WifiDisplayAdapter.requestEnableSinkLocked WifiDisplayController.requestEnableSink

      WifiDisplaySinkActivity WfdSinkSurfaceFragment WfdSinkExt.setupWfdSinkConnection WfdSinkExt.setWfdMode(true) WifiDisplayAdapter.requestEnableSinkLocked … WifiDisplayController.startWaitConnection WifiDisplayController.enterSinkState

    Global Settings

    设置和访问一个全局变量。

    Settings.java

    //frameworks/base/core/java/android/provider/Settings.java
    public final class Settings {
        public static final String WIFI_AUTO_CONNECT = "wifi_auto_connect";
        ...
        MOVED_TO_GLOBAL.add(Settings.Global.WIFI_AUTO_CONNECT);
    }
    

    defaults.xml

    <!-- /packages/SettingsProvider/res/values/defaults.xml -->
    <integer name="def_wifi_auto_connect">0</integer>
    

    DatabaseHelper.java

    public class DatabaseHelper extends SQLiteOpenHelper {
        ...
        loadIntegerSetting(stmt, Settings.Global.WIFI_AUTO_CONNECT,
                           R.integer.def_wifi_auto_connect);
    
        ...
    }
    

    访问

    //读取
    Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.WIFI_AUTO_CONNECT);
    //写入
    Settings.Global.putInt(getContentResolver(), Settings.Global.WIFI_AUTO_CONNECT, 0);
    展开全文
  • Android 2018优秀开源框架整理收藏

    千次阅读 2018-07-12 17:04:35
    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助!

    中级、高级、资深工程师 知其然知其不可然
     

    • 《框架百大排行榜》里所提到的流行词、流行术语——使用能力、融会贯通其原理、讲解框架能力的高低,将让你不断的在这三个级别徘徊;

    • 会有意识的合并榜单里多款同类型框架,来弥补单一框架的某些缺陷,比如将同为网络请求框架的Volley和Okhttp封装到一起应对不同场面的需求;

    • 会有意识的二次开发、修改源码来扩展榜单所提到的大型框架;

    • 能够在开发团队里推动、部署某些框架的能力——比如要在一个新加入的陌生团队说服leader和项目成员使用热更新、插件化、组件化、hybrid开发等多种开发模式,你是否有这个实力?

    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助!

    1. Retrofit  

    一句话介绍:Retrofit是一款类型安全的网络框架,基于HTTP协议,服务于Android和java语言

    上榜理由:Retrofit以21.8k的stars量雄踞github中android子标题榜首,第一当之无愧。

    官网地址 http://square.github.io/retrofit/

    github https://github.com/square/retrofit

    作者:square团队

    使用:

    compile 'com.squareup.retrofit2:retrofit:2.3.0'

    2.okhttp

    一句话介绍:okhttp是一款基于HTTP和HTTP2.0协议的网络框架,服务于java和android客户端

    上榜理由,okhttp以20.4k的 stars量雄踞github中android子标题第二名。大型公司比如淘宝也封装的是okhttp。Retrofit2.0开始内置okhttp框 架,Retrofit专注封装接口完成业务需求,okhttp专注网络请求的安全高效,笔者将两者区分开,是想让后来学习者知道,这是两套框架,学习框架 原理时可以分开学习,以免理解混乱。

    官网地址 http://square.github.io/okhttp/

    github https://github.com/square/okhttp

    作者:square团队

    使用:

    compile 'com.squareup.okhttp3:okhttp:3.8.0'

       
    3.Butter Knife

    一句话介绍:Butter Knife所提供了一种能力——使用注解生成模板代码,将view与方法和参数绑定。

    上榜理由:github上16.5K个 star,配合Androidstudio提供的Butter Knife插件,帮助开发者省却了频繁findviewbyid的烦恼,最新的Butter Knife还提供了onclick绑定以及字符串的初始化,初学者可以查阅Butter Knife以及Butter Knife插件进一步学习!

    官网地址:http://jakewharton.github.io/butterknife/

    github:https://github.com/JakeWharton/butterknife

    作者:JakeWharton ,也是square团队成员之一

    使用:

    1. dependencies {
    2. compile 'com.jakewharton:butterknife:8.6.0'
    3. annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
    4. }

    4.MPAndroidChart

    一句话介绍:MPAndroidChart是一款图表框架

    上榜理由:github上16.1K个star,以快速、简洁。强大著称的图表框架

    官网地址 https://github.com/PhilJay/MPAndroidChart

    github https://github.com/PhilJay/MPAndroidChart

    作者:PhilJay

    使用:

    1. 1.AS中加入Gradle依赖
    2. 在根目录的 build.gradle上加入:
    3. allprojects {
    4. repositories {
    5. maven { url "https://jitpack.io" }
    6. }
    7. }

    1. 在app的build.gradle上加入:
    2. dependencies {
    3. compile 'com.github.PhilJay:MPAndroidChart:v3.0.2'
    4. }

    5. glide

    一句话介绍:glide是一款专注于提供流畅划动能力的“图片加载和缓存框架”

    上榜理由:15.9k个star,图片加载类框架排名第一的框架,google 在2014开发者大会上演示的camera app就是基于gilde框架开发的

    github https://github.com/bumptech/glide

    作者 Bump Technologies团队

    使用:

    1. repositories {
    2. mavenCentral()
    3. google()
    4. }
    5. dependencies {
    6. implementation 'com.github.bumptech.glide:glide:4.5.0'
    7. annotationProcessor 'com.github.bumptech.glide:compiler:4.5.0'
    8. }

    6.leakcanary

    一句话介绍:一款内存检测框架,服务于java和android客户端

    上榜理由:方便,简洁是leakcanary最大的特点,只需在应用的apllication中集成,就可以直接使用它;15.5k个star说明了它有多么受欢迎

    github https://github.com/square/leakcanary

    作者 square团队

    使用:

    1. dependencies {
    2. debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5.1'
    3. releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    4. testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.1'
    5. }

    1. 在 Application 中写入:
    2. public class ExampleApplication extends Application {
    3. @Override public void onCreate() {
    4. super.onCreate();
    5. if (LeakCanary.isInAnalyzerProcess(this)) {
    6. // This process is dedicated to LeakCanary for heap analysis.
    7. // You should not init your app in this process.
    8. return;
    9. }
    10. LeakCanary.install(this);
    11. // Normal app init code...
    12. }
    13. }

    7.Android-Universal-Image-Loader

    一句话介绍:曾经的图片加载框架王者,android开发老手都用过它

    上榜理由:android端图片加载框架的老 大哥了,15.3k个star足以证明它的热门,UIL与gilde最大区别是可定制,UIL提供了大量配置方式,图片加载状态的回调(成功,失败,进行 中),加载动画等;以及提供了移动端图片加载框架的缓存思路:三级缓存策略 sd卡-内存-网络;值得注意的是,UIL以及两年未更新了,但笔者仍推荐各位使用!

    github https://github.com/nostra13/Android-Universal-Image-Loader

    作者 nostra13

    使用:

    下载地址  universal-image-loader-1.9.5.jar

    8.EventBus

    一句话介绍:EventBus是一款本地组件间通信框架

    上榜理由:组件间通信框架star量第 一:14.8k,在大型项目的Activities,fragments,Threads,Services都可以看到它的使用场景,尽管 EventBus在向未创建的组件传递事件时有些局限,仅适合在“活着的”组件间传递消息,但仍不妨碍它活跃在各个大型项目各个场景里。

    官网地址 http://greenrobot.org/eventbus/documentation/how-to-get-started/

    github https://github.com/greenrobot/EventBus

    作者 greenrobot

    使用:

    compile 'org.greenrobot:eventbus:3.0.0'

    9.zxing

    一句话介绍:条码图像处理库

    上榜理由:如果你用过二维码,你肯定已经间接使用过大名鼎鼎的zxing了。13.9K的star量,让它排在本榜单第九,实至名归,如果你有了解二维码的需求,不妨从了解、修改它源码入手。

    github https://github.com/zxing/zxing

    作者 Sean Owen

    10.picasso

    一句话介绍:强力的图片下载、缓存框架

    上榜理由:本榜单出现的第三款图片类框架,不同的是picasso更强调图片下载,你可以将picasso集成进你的项目中,你也可以结合gilde和UIL与picasso,三者一齐封装至你的项目中,按需所用。

    官网地址 http://square.github.io/picasso/

    github https://github.com/square/picasso

    作者 square团队

    使用:

    compile 'com.squareup.picasso:picasso:2.5.2'

    11.lottie-android

    一句话介绍:一款可以在Android端快速展示Adobe Afeter Effect(AE)工具所作动画的框架

    上榜理由:动画类框架第一名,github上 13.3k个star证明了他的优越性,利用json文件快速实现动画效果是它最大的便利,而这个json文件也是由Adobe提供的After Effects(AE)工具制作的,在AE中装一个Bodymovin的插件,使用这个插件最终将动画效果生成json文件,这个json文件即可由 LottieAnimationView解析并生成绚丽的动画效果。而且它还支持跨平台哟。

    github https://github.com/airbnb/lottie-android

    作者:Airbnb 团队

    12.fresco

    一句话介绍:一款可以管理图片内存的框架

    上榜理由:github上12.8k个star,图片类排行榜第四名,facebook的出身证明了它并非是重复造的轮子,在管理图片内存领域上有着它的一片天地,渐进式加载、加载gif都是它与前三位相比独有的特性

    官网地址: https://www.fresco-cn.org/

    github https://github.com/facebook/fresco

    作者 facebook

    使用:

    1. dependencies {
    2. // 其他依赖
    3. compile 'com.facebook.fresco:fresco:0.12.0'
    4. }
    1. 下面的依赖需要根据需求添加:
    2. dependencies {
    3. // 在 API < 14 上的机器支持 WebP 时,需要添加
    4. compile 'com.facebook.fresco:animated-base-support:0.12.0'
    5. // 支持 GIF 动图,需要添加
    6. compile 'com.facebook.fresco:animated-gif:0.12.0'
    7. // 支持 WebP (静态图+动图),需要添加
    8. compile 'com.facebook.fresco:animated-webp:0.12.0'
    9. compile 'com.facebook.fresco:webpsupport:0.12.0'
    10. // 仅支持 WebP 静态图,需要添加
    11. compile 'com.facebook.fresco:webpsupport:0.12.0'
    12. }


    13.RxAndroid

    一句话介绍:一款Android客户端组件间异步通信的框架

    上榜理由:github上12.7k个 star,位居组件通信框架的第二名,仅在EventBus之后,如果要问两者的区别,Eventbus是用来取代组件间繁琐的 interface,RxAndroid是用来取代AnsyTask的,并不冲突;当然RxAndroid的优点并不仅限于此,更多优雅的实现,可以去官 网查阅!

    github https://github.com/ReactiveX/RxAndroid

    作者 JakeWharton

    使用:

    1. compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
    2. compile 'io.reactivex.rxjava2:rxjava:2.1.0'

    14.SlidingMenu

    一句话介绍:侧滑菜单栏框架

    上榜理由:与Userval-Image- loader 齐名的上古神器框架——为你的app提供侧滑菜单栏的功能;github闪更有10.5k个star,证明了它的经久不衰,即使在Google推出了 NavigationDrawer,仍然没有减少开发者对SildingMenu的拥簇,经典总是经得起考验的,这个上古神兽已经四年没有更新了;有太多 太多的app使用过它,这些都可以在软件的开源许可上看到!

    github https://github.com/jfeinstein10/SlidingMenu

    作者 Jeremy Feinstein

    使用:

    在gihub上fork源码,集成进项目中

    15.PhotoView

    一句话介绍:一款ImageView展示框架,支持缩放,响应手势

    上榜理由:10.3k的star数量,位于图 片类框架排行榜第五位,PhotoView与前四位不同的是这次带来的是图片的展示能力,你一定好奇微信的头像点击放大是如何实现的,很多App的图片显 示响应手势按压是如何实现的,了解PhotoView,你一定会开心的!(笔者也不会告诉你ImageView的点击放大效果在Android的 sample也有)

    github https://github.com/chrisbanes/PhotoView

    作者:chrisbanes

    使用:

    1. 在app根目录的build.gradle中加入:
    2. allprojects {
    3. repositories {
    4. maven { url "https://jitpack.io" }
    5. }
    6. }
    7. 在app的module目录的build.gralde中加入:
    8. dependencies {
    9. compile 'com.github.chrisbanes:PhotoView:latest.release.here'
    10. }

    使用

    1. <com.github.chrisbanes.photoview.PhotoView
    2. android:id="@+id/photo_view"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"/>
    5. PhotoView photoView = (PhotoView) findViewById(R.id.photo_view);
    6. photoView.setImageResource(R.drawable.image);

    16.material-dialogs

    一句话介绍:一款自定义dialog框架

    上榜理由:9.9k个star,也是继PhotoView,SlidingMenu之后第三款自定义View框架,也许你还是自定义View的新人,对Dialog使用的还有点生疏,你可以通过它提升你的Dilaog使用能力

    github https://github.com/afollestad/material-dialogs

    作者:Aidan Follestad

    使用:

    1. dependencies {
    2. // ... other dependencies here
    3. compile 'com.afollestad.material-dialogs:core:0.9.4.5'
    4. }

    17.droid-async-http

    一句话介绍:一款基于Http协议的异步请求的网络框架,

    上榜理由:虽然你有无数个使用retrofit+okhttp的理由,但9.8k个star,证明它仍然值得你深入学习。值得注意的是,它也已经有两年没更新了,你尽管拿去当你懒惰的理由!

    github https://github.com/loopj/android-async-http

    作者:James Smith

    使用:

    1. repositories {
    2. maven {
    3. url 'https://oss.sonatype.org/content/repositories/snapshots/'
    4. }
    5. }
    6. dependencies {
    7. compile 'com.loopj.android:android-async-http:1.5.0-SNAPSHOT'
    8. }

    18.androidannotations

    一句话介绍:一款基于注解的快速开发框架

    上榜理由:与Butterknife一样基于 注解,利用注解快速完成view的初始化,不同的是androidannotations提供了更多的能力:简单的线程模型等;笔者只接触过 Butterknife,无法更进一步叙述androidannotations的优势,如果你志在深入了解注解的妙用,可以尝试探索一下!

    官网地址 http://androidannotations.org/

    github https://github.com/androidannotations/androidannotations

    作者: WonderCsabo

    19.fastjson

    一句话介绍:一款基于json解析、生成的框架

    上榜理由:从它的名字不难看出,快速是它最大的特性,阿里巴巴的出身保证了代码的质量和优越,9.4k的star数量,也是榜单里第一个出现的中国开源框架,涉及网络的app都会用到json,fastjson值得作为你的首选!

    github https://github.com/alibaba/fastjson

    作者:alibaba

    使用:

    compile 'com.alibaba:fastjson:1.1.58.android'

    20.Material-Animations

    一句话介绍:一款提供场景转换过渡能力的动画框架

    上榜理由:Android动画框架排行榜第二 名,9.3k个star数量,与动画框架榜单第一名lottie-android不同的是,Material-Animations提供的是场景切换的动 画效果。Android 官网sample中已经提供了部分Transition (转场动画)的展示,作为初学者很难快速拓展到自己项目中,Material-Animations的示例出现为开发者省去了此类麻烦,直接照搬应用到自 己的App中吧。

    github https://github.com/lgvalle/Material-Animations

    作者:Luis G. Valle

    使用:

    down源码,修改学习

    21.tinker

    一句话介绍:它是微信官网的Android热补丁解决方案

    上榜理由:9.1k个star,微信在用的热补丁方案,心动不如行动

    官网地址 http://www.tinkerpatch.com/Docs/intro

    github https://github.com/Tencent/tinker

    作者:Tencent

    22.ViewPagerIndicator

    一句话介绍:一款基于ViewPager的页面指示器开源框架

    上榜理由:上古神器,尽管已经五年未更新了,但你仍然可以在淘宝等app中看到它的使用场景,8.9K的star量让它不愠不火的在矗立在榜单里

    官网地址 http://viewpagerindicator.com/

    github https://github.com/JakeWharton/ViewPagerIndicator

    作者:JakeWharton

    使用:

    下载 地址 https://github.com/JakeWharton/Android-ViewPagerIndicator/zipball/master

    23.Android-CleanArchitecture

    一句话介绍:一个讲解设计框架的demo

    上榜理由:它不是框架,你可以把它当作一本书,它将教会你如何设计简洁的架构,工程里有一个sample app,配合图文讲解,你将对Android客户端的架构有更深一层的认识。8.8k的star数量,证明了它是一本“好书”哟。

    github https://github.com/android10/Android-CleanArchitecture

    作者:Fernando Cejas

    24..Android-PullToRefresh

    一句话介绍:一款为普通视图提供刷新UI的视图框架

    上榜理由:8.2K的star数量使它位居刷 新类UI框架榜首,强大的兼容能力,该框架支持ListView,GrdiView,WebViewScrollView,ViewPager等众多 View增加刷新的能力,如果你有增加上拉加载,下拉加载的需求,你应该考虑它了!

    github https://github.com/chrisbanes/Android-PullToRefresh

    作者:Chris Banes

    使用:

    github fork源码,集成到项目中

    25.flexbox-layout

    一句话介绍:一款弹性伸缩布局

    上榜理由:8.1k个star,前端H5开发者转Android开发的福音,FlexboxLayout作为LinearLayout和RelativeLayout的替代者,值得各位一试,与其一同推出的还有ConstraintLayout。

    github https://github.com/google/flexbox-layout

    作者:Google

    使用:

    1. dependencies {
    2. compile 'com.google.android:flexbox:0.3.0-alpha3'
    3. }

    26.AndroidSwipeLayout

    一句话介绍:非常强大滑动式布局

    上榜理由:滑动删除是国产app常见需求,商品详情的上下滑动需求作为开发者的我们也经常遇到,AndroidSwipeLayout在github上拥有8K个star,证明它经受住了检验,各位值得一试

    github https://github.com/daimajia/AndroidSwipeLayout

    作者:daimajia

    使用:

    1. dependencies {
    2. compile 'com.android.support:recyclerview-v7:21.0.0'
    3. compile 'com.android.support:support-v4:20.+'
    4. compile "com.daimajia.swipelayout:library:1.2.0@aar"
    5. }

    27.realm-java

    一句话介绍:Realm是一款移动端数据库框架

    上榜理由:核心数据引擎C++打造,比普通的Sqlite型数据库快的多。笔者猜测正是如此,realm以7892个star数让它位于大名鼎鼎的数据库框架GreenDao(7877)之前

    官网地址:https://realm.io/cn/

    github https://github.com/realm/realm-java

    作者:Realm团队

    使用:https://realm.io/docs/java/latest/

    28.greenDAO

    一句话介绍:greenDAO是一款高效、快速的SQLite型数据库

    上榜理由:greenDAO的star数量与 Realm不相上下,且与EventBus师出同门,也是由greenrobot团队开发维护的,质量有所保证,但若拷问笔者Realm与 greenDao两者的优劣性,只能具体到实际使用当中,模拟线上的使用情形,进行高强度测试后才能下判断,故在此不能一言两语说完,深表遗憾

    官网地址:http://greenrobot.org/greendao/

    github https://github.com/greenrobot/greenDAO

    使用: 
    复制代码

    1. buildscript {
    2. repositories {
    3. jcenter()
    4. mavenCentral() // add repository
    5. }
    6. dependencies {
    7. classpath 'com.android.tools.build:gradle:2.3.1'
    8. classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2' // add plugin
    9. }
    10. }
    1. apply plugin: 'com.android.application'
    2. apply plugin: 'org.greenrobot.greendao' // apply plugin
    3. dependencies {
    4. compile 'org.greenrobot:greendao:3.2.2' // add library
    5. }

    29.stetho

    一句话介绍:一款提供在Chrome开发者工具上调试Android app能力的开源框架

    上榜理由:上古时期Android程序员要调 试本地数据库,需要进入Android Device Monitor找到/data/data/com.xxx.xxx/databases里面的db文件,导出到PC端,用PC的数据工具查看,现在使用 stetho省却了如此的麻烦;如今的Android程序员如果想调试网络请求响应过程中的报文段,需要在请求中加入Log语句,一个信息一个信息打印出 来,相当繁琐,现在请使用stetho,省却诸如此类的麻烦把!7.8K个star数,广大Android开发者调试的福音,你值得拥有!

    作者:FaceBook

    官网地址: http://facebook.github.io/stetho/

    github https://github.com/facebook/stetho

    使用:

    compile 'com.facebook.stetho:stetho:1.5.0'

    30.BaseRecyclerViewAdapterHelper

    一句话介绍:强大、流畅的Recyvlerview通用适配器

    上榜理由:如果你是RecyclerView的拥簇者,你一定要体验这款专门服务该view的适配器,7.7K个star,让这个家伙位于github上Android 适配器排行榜第一,还有很多惊喜等你去探寻!

    官网地址:http://www.recyclerview.org/

    作者:陈宇明以及他的小伙伴

    使用:

    1. allprojects {
    2. repositories {
    3. ...
    4. maven { url "https://jitpack.io" }
    5. }
    6. }
    7. dependencies {
    8. compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:VERSION_CODE'
    9. }

    31.AndroidViewAnimations

    一句话介绍:一款提供可爱动画集合的框架

    上榜理由:正如作者所说,它囊括了开发需求过 程中所有的动画效果,集成进了这个简洁可爱的动画框架。7.6K的star数,证明了它在动画框架领域的战斗力,让它仅仅位列lottie- android和Material-Animations两个动画框架霸主之后,屈居第三名

    github https://github.com/daimajia/AndroidViewAnimations

    作者:daimajia

    使用:

    1. dependencies {
    2. compile 'com.android.support:support-compat:25.1.1'
    3. compile 'com.daimajia.easing:library:2.0@aar'
    4. compile 'com.daimajia.androidanimations:library:2.2@aar'
    5. }
    6. sample:
    7. YoYo.with(Techniques.Tada)
    8. .duration(700)
    9. .repeat(5)
    10. .playOn(findViewById(R.id.edit_area));

    32. MaterialDrawer

    一句话介绍:强大的塑料风格的抽屉框架

    上榜理由:7.6K的star数量,作者的持续更新状态,如果你还在犹豫上手SlidingMenu遇到bug没人管的困境,那么你可以入手它作为你的抽屉布局

    github https://github.com/mikepenz/MaterialDrawer

    作者:Mike Penz

    使用:

    1. compile('com.mikepenz:materialdrawer:5.9.2@aar') {
    2. transitive = true
    3. }
    4. new DrawerBuilder().withActivity(this).build();

    33.Android-ObservableScrollView

    一句话介绍:一款让视图滑动更具有视觉效果的滑动式框架

    上榜理由:7.5K的star数量,证明了它曾经的价值,github上提供了12种滑动效果,你可以用它弥补其他框架的不足,提升你的App体验!

    github https://github.com/ksoichiro/Android-ObservableScrollView

    作者:Soichiro Kashima

    使用:

    compile com.github.ksoichiro:android-observablescrollview

    34.CircleImageView

    一句话介绍:圆角ImageView

    上榜理由:也许你已经听说过无数种展示圆角图片的方法,但如果你不尝试尝试CircleImageView,那么你的知识库会因为少了它黯然失色,有的时候完成需求是开发者优先考虑的,不同实现方法牵扯到的性能差异更值得让人深思,如果你有心在图片性能上有所涉猎,那么CircleImageView绝对不会让你败兴而归。最后别忘了记得去看Romain Guy的建议哟。

    github https://github.com/hdodenhof/CircleImageView

    作者:Henning Dodenhof

    使用:

    1. dependencies {
    2. ...
    3. compile 'de.hdodenhof:circleimageview:2.1.0'
    4. }

    1. <de.hdodenhof.circleimageview.CircleImageView
    2. xmlns:app="http://schemas.android.com/apk/res-auto"
    3. android:id="@+id/profile_image"
    4. android:layout_width="96dp"
    5. android:layout_height="96dp"
    6. android:src="@drawable/profile"
    7. app:civ_border_width="2dp"
    8. app:civ_border_color="#FF000000"/>

    35.logger

    一句话介绍:一款让log日志优雅显示的框架

    上榜理由:logger作为调试框架,并未给 出很强大的能力,它最大的亮点是优雅的输出log信息,并且支持多种格式:线程、Json、Xml、List、Map等,如果你整日沉迷于汪洋大海般的 log信息不能自拔,logger就是你的指路明灯!6.6k个star让他位列调试框架第二名,屈居facebook的stetho之后

    github https://github.com/orhanobut/logger

    作者:Orhan Obut

    使用:

    compile 'com.orhanobut:logger:2.1.1'

    1. Logger.d(MAP);
    2. Logger.d(SET);
    3. Logger.d(LIST);
    4. Logger.d(ARRAY);
    5. Logger.json(JSON_CONTENT);
    6. Logger.xml(XML_CONTENT);

    36.agera

    一句话介绍:一款服务于Android平台的响应式编程框架

    上榜理由:google专门推出一套响应式编 程框架服务于Android开发者,相比于之响应式编程框架榜首的 RxJava RxAndroid,它更轻量,两者最大的不同点在于agera基于push event、pull data (VS Rx系列 push data)。

    github https://github.com/google/agera

    作者:Google

    使用:

    1. compile 'com.google.android.agera:agera:1.3.0'
    2. 扩展能力
    3. compile 'com.google.android.agera:content:1.3.0'
    4. compile 'com.google.android.agera:database:1.3.0'
    5. compile 'com.google.android.agera:net:1.3.0'
    6. compile 'com.google.android.agera:rvadapter:1.3.0'
    7. compile 'com.google.android.agera:rvdatabinding:1.3.0'

    37.BottmBar

    一句话介绍:一款底部导航栏视图框架

    上榜理由:底部栏里的王者框架,6.3K的 star数量,证明了它的优秀,完全遵循材料设计规范,上手非常方便。如果说缺点,无法设置icon与titile的间距,无法自定义视图的大小等,但这 些都可以通过修改源代码解决,笔者献丑也修改了一套符合国内开发者的底部导航框架,即将开源。

    github https://github.com/roughike/BottomBar

    作者:Iiro Krankka

    使用:

    compile 'com.roughike:bottom-bar:2.3.1'

    38.Calligraphy

    一句话介绍:一款自定义字体框架

    上榜理由:如果你还在为一键修改App内所有字体样式而烦恼,6.3K个star的Calligraphy就值得你拥有,它可以同时修改整个整个项目的Textview字体,也可以单独 设置某个Textview的字体,还在等什么,快来试试吧!

    github https://github.com/chrisjenx/Calligraphy

    作者:Christopher Jenkins

    使用:

    1. dependencies {
    2. compile 'uk.co.chrisjenx:calligraphy:2.3.0'
    3. }

    39.AndroidSlidingUpPanel

    一句话介绍:可拖动的滑动面板视图框架

    上榜理由:如果你的项目需要一个可拖拽的滑动式面板(展示某些详情信息,播放音乐,地图信息等),那么推荐你使用它,6.3k个star,来自创业公司umano的作品,证明它是用心推出的杰作

    github https://github.com/umano/AndroidSlidingUpPanel

    作者:umano

    使用:

    1. dependencies {
    2. repositories {
    3. mavenCentral()
    4. }
    5. compile 'com.sothree.slidinguppanel:library:3.3.1'
    6. }

    40.AppIntro

    一句话介绍:一款提供快速制作欢迎页的框架

    上榜理由:笔者从未把打算把欢迎页框架纳入排 行榜当中,作为国内开发者,ViewPager开发App的欢迎页已经是手到擒来的需求,为何一个开源的欢迎页框架会在github上拥有6.3k个 star?也许你会不屑一顾,是的,往往就在不屑一顾的瞬间,机遇就悄悄溜走了。

    github https://github.com/apl-devs/AppIntro

    作者:Paolo Rotolo

    1. allprojects {
    2. repositories {
    3. ...
    4. maven { url 'https://jitpack.io' }
    5. }
    6. }
    7. dependencies {
    8. compile 'com.github.apl-devs:appintro:v4.2.0'
    9. }

    41.recyclerview-animators

    一句话介绍:一款为Recyclerview提供扩展动画能力的框架

    上榜理由:有一句老话:如果有天你失去对新事 物的兴趣,那就说明你老了。recyclerview已经推出快三年了,还在用listview的人们,是否已经发掘自己渐渐变老;不要灰心,快为你的项 目加入recyclerview-animators框架吧,为“自己”加入新鲜的血液和能量!(笔者备注:6.2K个star)

    github https://github.com/wasabeef/recyclerview-animators

    作者;https://github.com/wasabeef

    使用:

    1. dependencies {
    2. // jCenter
    3. compile 'jp.wasabeef:recyclerview-animators:2.2.6'
    4. }

    42.dagger

    一句话介绍:一款通过依赖注入降低程序间耦合的开发框架

    上榜理由:github 上dagger1版本 有6.2k个star , dagger2版本有7.3k个;由square完成的dagger1版本,到如今google团队接手的dagger2版本,强力开发团队保证了代码在 设计上的优越性;如果你想探究Android 领域的设计模式,这也是不错的选择。

    官网地址:https://google.github.io/dagger/

    github :https://github.com/google/dagger

    作者:google

    使用:

    1. dependencies {
    2. compile 'com.google.dagger:dagger:2.x'
    3. annotationProcessor 'com.google.dagger:dagger-compiler:2.x'
    4. }
    5. If you're using classes in dagger.android you'll also want to include:
    6. compile 'com.google.dagger:dagger-android:2.x'
    7. compile 'com.google.dagger:dagger-android-support:2.x'
    8. annotationProcessor 'com.google.dagger:dagger-android-processor:2.x'

    43.Android-Bootstarp

    一句话介绍:一款提供在Android应用上实现Bootstrap(web框架)所作出效果的框架

    上榜理由:榜单上第二款响应web技术的Android 端框架,还记得第一名是谁吗——flexbox-layout,作为Android开发者,你有必要去了解Web技术了。5.9k个star,证明它不容小觑

    github https://github.com/Bearded-Hen/Android-Bootstrap

    作者:Bearded-Hen团队

    使用:

    1. dependencies {
    2. compile 'com.beardedhen:androidbootstrap:{X.X.X}'
    3. }

    44.RxBinding

    一句话介绍:一款提供UI组件事件响应能力的框架

    上榜理由:如果你还未开始RxAndroid 之旅,RxBinding可以作为你的第一站,通过RXBinding,你将理解响应式编程的快乐,让项目里的事件流程更清晰。5.6K个star,RxAndroid作者亲自操刀,快来试用吧!

    github https://github.com/JakeWharton/RxBinding

    作者:JakeWharton

    1. Platform bindings:
    2. compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
    3. 'support-v4' library bindings:
    4. compile 'com.jakewharton.rxbinding2:rxbinding-support-v4:2.0.0'
    5. 'appcompat-v7' library bindings:
    6. compile 'com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.0.0'
    7. 'design' library bindings:
    8. compile 'com.jakewharton.rxbinding2:rxbinding-design:2.0.0'
    9. 'recyclerview-v7' library bindings:
    10. compile 'com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.0.0'
    11. 'leanback-v17' library bindings:
    12. compile 'com.jakewharton.rxbinding2:rxbinding-leanback-v17:2.0.0'

    45.ListViewAnimations

    一句话介绍:一款为ListView提供动展示画效果能力的框架

    上榜理由:如果有一天我承认自己老了,我还会 排排我的兄弟——ListView,证明我和它一起战斗过。ListViewAnimations的存在就是证明我们这些“老年人”仍有用武之地,也许你 有说不出口的难处,无法体会到RecyclerView里动画的快乐,拥有ListViewAnimations,你一样可以骄傲的说,我的孩子(每个 item)也有自己的动效啦。(笔者备注 5.6K个star)

    github https://github.com/nhaarman/ListViewAnimations

    作者:nhaarman

    使用:

    1. repositories {
    2. mavenCentral()
    3. }
    4. dependencies {
    5. compile 'com.nhaarman.listviewanimations:lib-core:3.1.0@aar'
    6. compile 'com.nhaarman.listviewanimations:lib-manipulation:3.1.0@aar'
    7. compile 'com.nhaarman.listviewanimations:lib-core-slh:3.1.0@aar'
    8. }

    46.UItimateRecyclerView

    一句话介绍:一款提供刷新、加载更多、动画特效等额外能力的RecyclerView框架

    上榜理由:榜单上第三次出现 RecyclerView的身影,足以证明RecyclerView的优异性,5.5K个star,框架里所提供众多的能力,如果你是个功利开发者,那么 此框架会为你节省很多学习时间,它可以完成多item式布局的大多数需求,值得注意的是,这个项目也是在其他项目的思路上二次开发的。

    github https://github.com/cymcsg/UltimateRecyclerView

    作者:MarshalChen

    使用:

    1. repositories {
    2. jcenter()
    3. }
    4. dependencies {
    5. ...
    6. compile 'com.marshalchen.ultimaterecyclerview:library:0.7.2'
    7. }

    47.uCrop

    一句话介绍:一款优雅的图片裁剪框架

    上榜理由:5.3K个star,图片编辑模块单独拎出来也是一款优雅的App。

    github https://github.com/Yalantis/uCrop

    作者:Yalantis

    使用:

    1. allprojects {
    2. repositories {
    3. jcenter()
    4. maven { url "https://jitpack.io" }
    5. }
    6. }
    7. compile 'com.github.yalantis:ucrop:2.2.1'

    48.RxJava-Android-Samples

    一句话介绍:一款介绍RxJava使用场景的app

    上榜理由:榜单出现的第一个“仅仅为告诉你如何使用另一个项目”的开源项目,它可以说是RxJava的用例,你想得到的想不到的RxJava用法这里都有,这就是为什么它以5.2k个star矗立在这份榜单里的原因。遗憾自己没有创作这么一个受人追捧的demo?赶快动手写个其他的“XX项目用例吧”

    github https://github.com/kaushikgopal/RxJava-Android-Samples

    作者:kaushikgopal

    使用:

    clone到本地慢慢探索吧

    49.AndroidAutoLayout

    一句话介绍:一个提供适配能力的框架

    上榜理由:5.2K个star,鸿洋老弟的作 品,适合小项目的开发团队,拿到设计MM的px像素设计稿是不是很头疼捏?这个框架一键式搞定你的问题,它有很多的不足,但在追求完美适配的路上,你值得 探索和了解它!笔者并不推荐把它应用到已经成熟运行的项目中,毕竟市面上已经有太多的适配解决方案了,适配问题就像是个大杂烩,想炒一盘好菜,就得备好各 种佐料(适配小方案),当你把各种小佐料用的炉火纯青的时候,你离美食大厨就不远了。

    github https://github.com/hongyangAndroid/AndroidAutoLayout

    作者:张鸿洋

    使用:

    1. dependencies {
    2. compile 'com.zhy:autolayout:1.4.5'
    3. }

    50.EffectiveAndroidUI

    一句话介绍:一款讲解高效展示UI的教学型App

    上榜理由:编程新手很难对MVC MVP,MVVM等模式有深刻的理解,如果有一个示例型app,那对初学者会有很大裨益,笔者在遇到它时也是相见恨晚。4.8K个star,证明了它经受 了广大开发者的考验与审视,其中Effective UI的编程思想更是与Android官方课程里的Effective UI课程不谋而合,并且,此项目还包含了fragment、dagger、主题样式、Butterknife等众多小知识点,作为编程初学者的学习用例再 适合不过了

    github https://github.com/pedrovgs/EffectiveAndroidUI

    作者:Pedro Vicente

    使用:

    clone项目到本地

    51.Luban

    一句话介绍:最接近微信的图片压缩框架

    上榜理由:好的思路总是可以让你大放异彩,Luban仅以图片压缩单一功能,俘获了4.8K个star,证明了它在图片压缩上的造诣,它可能不是最优秀的,但它是让你我最接近伟大的项目

    github https://github.com/Curzibn/Luban

    作者:Curzibn

    使用:

    compile 'top.zibin:Luban:1.1.1'

    52.DroidPlugin

    一句话介绍:一款热门的插件化开发框架 
    上榜理由:4.8K个star,插件化框架榜单第一名,,360团队出品,框架质量有保证,有成功案例——360手机助手,并且持续维护着 
    github https://github.com/DroidPluginTeam/DroidPlugin/blob/master/readme_cn.md 
    作者:Andy Zhang 
    使用: 
    clone项目到本地

    53. otto

    一句话介绍:一款老旧且强大的事件总线框架 
    上榜理由:4.8K个star,是 square团队早先推出的事件响应型框架,淘宝app的事件驱动也是基于此框架封装的,如今square已经建议开发者采用RxJava RxAndroid来代替otto了。但otto仍有与EventBus横向对比的价值,纵向来说,otto与square自家开发的Rx系列框架的差异 同样值得开发者们去探究。 
    github https://github.com/square/otto 
    作者:square 
    使用:

    1. repositories {
    2. mavenCentral()
    3. maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    4. }
    5. compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT'

    54.u2020

    一句话介绍:一款提供Dagger的高级教学示例的app(额,名字是有点绕) 
    上榜理由:4.7K个 star,JakeWharton牵头开发的教学类app,教你使用Dagger在其他高级框架的用法,它展示了Dagger与ButterKnife、 Retrofit、Moshi、Picasso、Okhttp、RxJava、Timber、Madge、LeakCanar等众多优秀框架结合起来的高 级用法,你也可以借鉴到自己的项目当中 
    github https://github.com/JakeWharton/u2020 
    作者:JakeWharton

    55.buck

    一句话介绍:buck是一个快速构建系统 
    上榜理由:facebook+google出 身的作者,对构建代码的出色理解,加上大型团队的维护,以及增量更新时的快速高效,让buck成为了微信Android团队构建项目的首选,构建大型项目 时,它比gradle更快,然而中小公司并不适合此框架,但作为立志在框架设计领域有一番作为的人们,欢迎来一探究竟 
    官网地址:https://buckbuild.com/ 
    github https://github.com/facebook/buck 
    作者:facebook 
    使用:

    linux or mac system  +docs

    56.PermissionsDispatcher

    一句话介绍:一款基于注解的提供解决运行时危险权限方案的框架 
    上榜理由:自Android6.0 Google提出危险权限一词起,用户安全性被提到一定的高度,一些运行时对用户较为危险的权限将不再自动被开发者获取,需要经过用户批准,开发者才可以 继续使用该权限,如果你曾经被权限问题搞的抓耳挠腮,建议你试试这个框架,它足够解决你的问题 
    官网地址:https://hotchemi.github.io/PermissionsDispatcher/ 
    github https://github.com/hotchemi/PermissionsDispatcher 
    作者:Shintaro Katafuchi 
    使用:

    1. dependencies {
    2. compile('com.github.hotchemi:permissionsdispatcher:${latest.version}'</span></span>) {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> exclude <span class="hljs-class"><span class="hljs-keyword"><span class="hljs-class"><span class="hljs-keyword">module</span></span></span><span class="hljs-class">: "</span><span class="hljs-title"><span class="hljs-class"><span class="hljs-title">support</span></span></span><span class="hljs-class">-</span><span class="hljs-title"><span class="hljs-class"><span class="hljs-title">v13</span></span></span><span class="hljs-class">"</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> }</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> annotationProcessor <span class="hljs-string"><span class="hljs-string">'com.github.hotchemi:permissionsdispatcher-processor:${latest.version}'
    3. }

    1. repositories {
    2. jcenter()
    3. maven { url 'http://oss.jfrog.org/artifactory/oss-snapshot-local/' }
    4. }

    57.android-gif-drawable

    一句话介绍:一款提供展示GIF动画能力的视图框架

    上榜理由:据我所查国内著名App——知乎使 用了android-gif-drawable,因此证明了它的存在价值,尽管在榜单第十一位介绍了lottie-android直接应用AE动画的示 例,但AE设计师不是每个公司都配备的,GIF的存在,就必然存在了展示GIF的需要,它值得你拥有!

    github https://github.com/koral–/android-gif-drawable

    作者:Karol Wrótniak

    使用:

    1. repositories {
    2. mavenCentral()
    3. maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    4. }
    5. dependencies {
    6. compile 'pl.droidsonroids.gif:android-gif-drawable:1.2.+'
    7. }

    58.Apktool

    一句话介绍:一款反编译apk的工具

    上榜理由:开源的反编译工具,对于志在了解apk逆向破解的诸位,值得拥有,4.5k个star,逆向破解apk神器!

    github https://github.com/iBotPeaches/Apktool

    官网地址:https://ibotpeaches.github.io/Apktool/

    作者:Connor Tumbleson

    59.dynamic-load-apk

    一句话介绍:插件化开发框架

    上榜理由:4.5k个star,位于插件化开发框架第二名(第一名来自360团队),全面的文档介绍让你很快就能上手插件化开发,如果你喜欢大段文字讲解,那么这个项目一定适合你

    github:https://github.com/singwhatiwanna/dynamic-load-apk

    作者:singwhatiwanna

    使用:

    github上的文档配合作者博客更配哟

    60.atlas

    一句话介绍:淘宝推出的组件化开发框架

    上榜理由:淘宝团队所出的精品,atlas框架提供了解耦、组件、动态的开发能力,4.5k个star让他位列组件化开发框架第一名

    github https://github.com/alibaba/atlas

    作者:alibaba

    61.volley

    一句话介绍:google推荐使用的Android端网络请求框架

    上榜理由:4.4k个star,并不是他不够优秀,而是使用volley已经渐渐成为广大开发者的习惯

    github https://github.com/google/volley(新版volley地址)

    作者:google

    使用:

    clone源码到本地

    62.androidmvp

    一句话介绍:一款展示Android端Mvp设计的demo 
    上榜理由:榜单里为数不多、仅凭展示某种设计模式就获得4.2K个star的项目,如果你有尝试mvp的打算,androidmvp可以作为你的前哨站 
    github https://github.com/antoniolg/androidmvp 
    作者:Antonio Leiva 
    使用: 
    clone到本地

    63.SwipeBackLayout

    一句话介绍:一款可以让你通过滑动手势关闭页面的的框架 
    上榜理由:仿微信滑动退出当前聊天界面的效果,提供了activity的滑动关闭能力,通过这种思路,实现fragment的滑动关闭轻而易举;笔者坚持建议诸位clone源码到本地探索一番;4.2k个star证明很多人都喜爱它 
    github https://github.com/ikew0ng/SwipeBackLayout 
    作者:ike_w0ng 
    使用:

    compile 'me.imid.swipebacklayout.lib:library:1.0.0'

    64.FlycoTabLayout

    一句话介绍:一款可以让作出多种多样指示器效果的框架

    上榜理由:尽管我们没有理由为了给app加入 页面指示器功能就集成2.5M的依赖库,但是作为了解viewpager或swip views的指示器设计原理的优秀框架,你值得打开它试试,笔者建议单独拆分所需源码,加入到自己的项目中去。4.1K个star,二次开发的作品,仍然 推荐!

    github https://github.com/H07000223/FlycoTabLayout

    作者:Flyco

    65.android-testing

    一句话介绍:一款展示四大自动化测试框架用例的demo(Espresso,UiAutomator,AndroidJunitRunner,JUnit4)

    上榜理由:学习者经常会陷入似懂非懂的境地,如果你有幸学习过Android Testing Support Library site的课程,那么你一定对android的四大测试框架迫不及待,这款demo非常适合你,快来学习这个4.1k个star的明星项目吧

    github https://github.com/googlesamples/android-testing

    作者:googlesampes团队

    66.FileDownloader

    一句话介绍:一款高效、稳定、灵活、易用的文件下载引擎

    上榜理由:4.1k证明了它有多受人喜爱,文件下载看似简单的背后暗藏了多少的坑坑点点,我知道你有能力自己实现文件下载功能,但优秀的框架可以提升你的设计编码能力,这款框架可以提升你的实力!

    github https://github.com/lingochamp/FileDownloader

    作者:LingoChamp团队

    使用:

    1. dependencies {
    2. compile 'com.liulishuo.filedownloader:library:1.5.5'
    3. }

    67.JieCaoVideoPlayer

    一句话介绍:基于MediaPlayer api——VideoView 的多媒体播放框架

    上榜理由:榜单里第三款多媒体播放框架,它以灵巧的身姿挤入本榜单,精巧是它最大的优点,不到100k,拥有它,你就可以快速开发类似今日头条那样的视频播放效果,4k个star,证明它值得一试

    github https://github.com/lipangit/JieCaoVideoPlayer

    作者:Nathen 
    使用:

    compile 'fm.jiecao:jiecaovideoplayer:5.5.4'

    68.glide-transformations

    一句话介绍:为众多著名图片加载框架提供图片形状变幻能力的框架 
    上榜理由:在榜单靠前的部分已经介绍过glide,Picasso,Fresco等图片加载框架,glide-transformations就是一款为他们提供图片变形能力的框架,使用起来非常简单,因此受到了大家的喜爱,github上有3.8K个star 
    github https://github.com/wasabeef/glide-transformations 
    作者:Daichi Furiya 
    使用:

    1. repositories {
    2. jcenter()
    3. }
    4. dependencies {
    5. compile 'jp.wasabeef:glide-transformations:2.0.2'
    6. // If you want to use the GPU Filters
    7. compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
    8. }


    1. Glide里设置变幻效果
    2. Set Glide Transform.
    3. Glide.with(this).load(R.drawable.demo)
    4. .bitmapTransform(new BlurTransformation(context))
    5. .into((ImageView) findViewById(R.id.image));

    69.android-gpuimage

    一句话介绍:一款基于OpenGL的图片渲染引擎 
    上榜理由:放下GpuImage在IOS平台 的荣誉不谈,Android版的android-gpuimage就提供多达70多种图片渲染效果,你还在好奇美图秀秀是如何实现图片变幻的?有了它,一 切都不是问题。如果你是美图工具类的工程师,此框架的建设思路也会对你大有裨益。笔者也是通过android-gpuimage仿造了美图App并俘获女 友芳心的,再次为它的实力点赞。ios版+android版一共19k个star,已经证明了它的实力,还在等什么呢? 
    github:https://github.com/CyberAgent/android-gpuimage 
    作者:CyberAgent 团队 
    使用:

    1. repositories {
    2. jcenter()
    3. }
    4. dependencies {
    5. compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
    6. }

    更多的改造方法,还需要阅读Ios的编程文档,对于有毅力的小伙伴强力推荐!

    70.RxPermissions

    一句话介绍:一款基于RxJava完成权限申请的框架 
    上榜理由:榜单里第二款提供权服务的框架,基于RxJava的设计,让你可以专心写业务,3.7K个star已经证明了它的实用价值 
    github https://github.com/tbruyelle/RxPermissions 
    作者:Thomas Bruyelle

    使用:

    1. repositories {
    2. jcenter() // If not already there
    3. }
    4. dependencies {
    5. compile 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar'
    6. }

    优雅的使用:

    1. RxPermissions rxPermissions = new RxPermissions(this);
    2. rxPermissions
    3. .request(Manifest.permission.CAMERA)
    4. .subscribe(granted -> {
    5. if (granted) { // I can control the camera now
    6. } else {
    7. // Oups permission denied
    8. }
    9. });

    71.freeline

    一句话介绍:一款动态替换的编译构建框架

    上榜理由:继Facebook的Buck,Androdi官方的InstRun之后,蚂蚁金服推出了Freeline编译框架,官网宣称Freeline与业内主流构建方式相比仍然有数倍的速度领先;排行有先后,编译速度并不在本榜单排序的考据因素中,因此freeline以3.7个star,暂列编译框架第二名

    官网地址:https://www.freelinebuild.com/

    github:https://github.com/alibaba/freeline

    作者:alibaba

    使用:

    1. buildscript {
    2. repositories {
    3. jcenter()
    4. }
    5. dependencies {
    6. classpath 'com.antfortune.freeline:gradle:0.8.7'
    7. }
    8. }
    9. apply plugin: 'com.antfortune.freeline'
    10. android {
    11. ...
    12. }
    13. File → Settings... → Plugins → Browse repositories →freeline.

    72.RxLifecycle

    一句话介绍:一款提供在使用RxJava过程中管理Activity和Fragment生命周期能力的框架

    上榜理由:在榜单靠前的部分,你已经了解 RxJava和RxAndroid的强大之处,但部分粗心的开发者因为没有及时取消订阅而产生严重的内存泄漏,不要担心,RxLifecycle可以为你 解决难题,在gtihub上拥有3.7K个star,国内知名软件——知乎和淘宝也都在使用它

    github https://github.com/trello/RxLifecycle

    作者:trello团队

    使用:

    clone源码到本地

    73.classyshark

    一句话介绍:一款可执行文件浏览器

    上榜理由:榜单里继Apktool之后第二款apk逆向工具,如果你喜欢优雅的图形数据展示,那么你一定不能错过他,classyshark可以将破解的结果以图形化展示用户,方便分析,3.7K个star,让它暂列apk逆向工具第二位!

    github https://github.com/google/android-classyshark

    作者:google

    使用:

    下载 JAR

    74.acra

    一句话介绍:一款提供记录APP崩溃日志能力的框架

    上榜理由:如果你面临着收集APP崩溃日志的需求,那么acra是个不错的选择。3.7K个star,让acra位列崩溃日志框架排行榜第一名,acra有足够的能力记录线上APP,并且发回服务端,acra也提供了相当棒的崩溃日志统计服务端框架Acralyzer,cralyzer工作在Apache CouchDB之上,所以除了CouchDB之外,没有必要安装任何额外的软件,移动端开发者也可以借此学习服务端的建设,一举两得!

    github https://github.com/ACRA/acra

    服务端github https://github.com/ACRA/acralyzer

    作者:acra团队

    使用:

    没有什么方法比clone源码到本地更方便了

    75.DiskLruCache

    一句话介绍:一款提供磁盘文件缓存管理能力的框架

    上榜理由:3.7k个star并不足以说明 DiskLruCache的优秀,仅仅以管理磁盘文件能力单独拎出来成为一个框架,作者需要很大的勇气,很幸运,作者做到了,并且也成为Google官网 提倡的缓存 ;如还记得上次做“一键清除缓存”、“查看缓存文件大小”功能是什么时候吗?DiskLruCache一句话就可以搞定!

    github https://github.com/JakeWharton/DiskLruCache

    作者:JakeWharton

    使用:

    compile 'com.jakewharton:disklrucache:2.0.2'
    • 1

    76.dexposed

    一句话介绍:一款支撑阿里大部分App客户端热修复、线上调试能力的框架

    上榜理由:榜单上再次出现热修复框架的身影, 证明App热修复技术的火热,dexposed提供图形化的性能监控、在线热修复bug漏洞、支持AOP编程思想等,不论你是企业热修复技术的设计者还是 打算在热修复领域一探究竟的新人,这款框架很适合你。3.5k个star,证明它作为一门技术框架的存在,是多么令人喜爱!

    github https://github.com/alibaba/dexposed

    作者:alibaba

    使用:

    1. dependencies {
    2. compile 'com.taobao.android:dexposed:0.1.1@aar'
    3. }

    77.Litho

    一句话介绍:一款提供高效构建UI能力的框架

    上榜理由:作为一款专门构建UI的框架,Litho高效的地方在于:单独开辟了用于渲染和布局的线程,然后将创建好的组件传递给UI线程去完成最终的渲染,使用更少的视图层级,来提升界面的滚动速度,值得注意的是,它仅支持开发者作出不可改变的UI组件 ,3.5K个star,证明了它在构建UI领域的价值,更多的妙处,期待你亲自去发掘!

    github https://github.com/facebook/litho

    作者:facebook

    使用:

    1. ependencies {
    2. // ...
    3. // Litho
    4. compile 'com.facebook.litho:litho-core:0.3.1'
    5. compile 'com.facebook.litho:litho-widget:0.3.1'
    6. provided 'com.facebook.litho:litho-annotations:0.3.1'
    7. annotationProcessor 'com.facebook.litho:litho-processor:0.3.1'
    8. // SoLoader
    9. compile 'com.facebook.soloader:soloader:0.2.0'
    10. // Optional
    11. // For debugging
    12. debugCompile 'com.facebook.litho:litho-stetho:0.3.1'
    13. // For integration with Fresco
    14. compile 'com.facebook.litho:litho-fresco:0.3.1'
    15. // For testing
    16. testCompile 'com.facebook.litho:litho-testing:0.3.1'
    17. }

    78.mosby

    一句话介绍:一款提供构建MVP项目能力的框架

    上榜理由:榜单靠前的部分已经介绍了 MVC,MVVM,MVP的框架项目,想必此时你在构建企业项目架构上,选择或者开发一款合适的MVP框架迫在眉睫,mosby可以作为你的第一步参考, 你可以封装它,也可以照抄它,无论如何,3.4K个star,证明了它在框架设计上有多受开发者的喜爱

    github https://github.com/sockeqwe/mosby

    作者:Hannes Dorfmann

    使用:

    1. dependencies {
    2. compile 'com.hannesdorfmann.mosby3:mvi:3.0.4' // Model-View-Intent
    3. // or
    4. compile 'com.hannesdorfmann.mosby3:mvp:3.0.4' // Plain MVP
    5. // or
    6. compile 'com.hannesdorfmann.mosby3:viewstate:3.0.4' // MVP + ViewState support
    7. }

    1. allprojects {
    2. repositories {
    3. ...
    4. maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    5. }

    79.AndResGuard

    一句话介绍:一款提供资源文件路径混淆 的工具

    上榜理由:如果你是个对APK大小很敏感的人,那么AndResGuard一定适合你,它的原理类似Java Proguard,但是只针对资源。他会将原本冗长的资源路径变短,例如将res/drawable/wechat变为r/d/a,3.4K个star,证明了在优化APK道路上,你不是一个人在战斗!

    github https://github.com/shwenzhang/AndResGuard

    作者:wechat team

    使用:

    clone项目到本地,其实也就是个三两句话的文档

    80.StatusBarUtil

    一句话介绍:一款提供设置沉浸式状态栏样式能力的框架

    上榜理由:设计师MM总是抱怨系统状态栏不优雅?那就给她一个完美的沉浸式状态栏。StatusBarUtil可以随心所欲的设置状态栏样式,3.3K个star,足以说明它有多受设计MM的喜爱

    github https://github.com/laobie/StatusBarUtil

    作者:Jaeger

    使用:

    compile 'com.jaeger.statusbarutil:library:1.4.0'
    • 1

    81.robolectric

    一句话介绍:一款不依赖于Android设备的单元测试框架,

    上榜理由:sample中列举了如何对Android四大组件和常见功能测试的用例,3.2K个star,值得充满好奇心的人尝试

    官网地址:http://robolectric.org/

    github https://github.com/robolectric/robolectric

    作者:robolectric

    使用:

    testCompile "org.robolectric:robolectric:3.3.2"
    • 1

    82.Fragmentation

    一句话介绍:一款提供管理Fragmen嵌套t能力的框架

    上榜理由:对于Activity和 Fragment使用,你一定得心应手,但如果要做一套通用的Activity&Fragment嵌套设计,想必你有点手足无措 了,Fragmentation可以作为你设计Fragment管理上的第一步,3.2K个star,笔者认为有点名副其实了,项目介绍里说的是 Fragment的管理能力,但并未提供Fragment&Activity生命周期、任务栈的管理能力,因此很难直接应用到企业项目当中,但源 码当中的设计思路,值得笔者与诸位借鉴,拾人牙慧留有余香!

    github:https://github.com/YoKeyword/Fragmentation

    作者:YoKey

    使用:

    1. // appcompat v7包是必须的
    2. compile 'me.yokeyword:fragmentation:0.10.7'
    3. // 如果想使用SwipeBack 滑动边缘退出Fragment/Activity功能,请再添加下面的库
    4. // compile 'me.yokeyword:fragmentation-swipeback:0.10.4'

    83.Small

    一句话介绍:轻巧的插件化框架

    上榜理由:作为插件框架榜单的新成员,Small的优点是轻巧,适合作为小团队的插件开发方案,3.1K个star,让它获得了酷狗音乐等著名开发团队的青睐,如果你们的团队想逐步实施插件化开发,Small是个不错的选择!

    官网地址:http://code.wequick.net/Small/cn/cases

    github https://github.com/wequick/Small

    作者:wequick 团队

    使用:

    1. buildscript {
    2. dependencies {
    3. classpath 'net.wequick.tools.build:gradle-small:1.2.0-alpha6'
    4. }
    5. }
    6. apply plugin: 'net.wequick.small'
    7. small {
    8. aarVersion = '1.2.0-alpha6'
    9. }

    84.JsBridge

    一句话介绍:一款提供WebView和Javascript通信能力的框架

    上榜理由:该框架提供给了允许H5页面调用通过JS调用App方法的能力;3.1K个star,简洁的通讯方式,值得每一个Web\Hybrid App开发者尝试

    gtihub https://github.com/lzyzsd/JsBridge

    作者:hi大头鬼hi

    使用:

    1. repositories {
    2. // ...
    3. maven { url "https://jitpack.io" }
    4. }
    5. dependencies {
    6. compile 'com.github.lzyzsd:jsbridge:1.0.4'
    7. }

    85.richeditor-android

    一句话介绍:一款强大的富文本编辑框架

    上榜理由:2.8k个star,榜单里第一个为TextView提供扩展能力的框架,你暂时不需要它,但不能不知道它

    github https://github.com/wasabeef/richeditor-android

    作者:Daichi Furiya

    使用:

    1. repositories {
    2. jcenter()
    3. }
    4. dependencies {
    5. compile 'jp.wasabeef:richeditor-android:1.2.2'
    6. }

    86.Transitions-Everywhere

    一句话介绍:一款教你正确使用Transitions API(Android 转场动画API)的教学型项目

    上榜理由:你可能还未尝试过Android API的Transitions 框架,可能听过,但却无法做出优雅奇妙的动效——别担心,Transitions-Everywhere正如它的名字一样,它将带你全面体验Transitions 的强大之处

    github https://github.com/andkulikov/Transitions-Everywhere

    作者:Andrey Kulikov

    使用:

    1. dependencies {
    2. compile "com.andkulikov:transitionseverywhere:1.7.4"
    3. }

    87.android-viewbadger

    一句话介绍:能够快速的为Android 视图加入“勋章”能力的框架

    上榜理由:如果说勋章一词听起来陌生,那么显 示已读未读个数、小红点标记信息这一类词语你一定不太陌生,笔者相信在诸位实际开发中经常遇到为某些item加入小红点标记的需求,聪明的各位一定有着各 种实现方案,为什么不能快速优雅的完成呢?android-viewbadger可以帮你实现,当然,在某些情况下,你需要具备修改源码的能力,以符合设 计MM的需求!值得注意的是,这宽项目已经五年没有更新了!

    github https://github.com/jgilfelt/android-viewbadger

    作者:Jeff Gilfelt

    使用:

    1. clone源码到本地
    2. View target = findViewById(R.id.target_view);
    3. BadgeView badge = new BadgeView(this, target);
    4. badge.setText("1");
    5. badge.show();

    88.AndroidWiFiADB

    一句话介绍:一款不用数据线也可以让你调试手机设备APP的插件项目

    上榜理由:你是否还在担心测试过程中高强度的拔插数据线对手机电池和USB端口造成终生难以弥补的损害?别担心,有wifi有AndroidWiFiADB,无须数据线也可以调试应用了,更有趣的是,在测试工程师一边拿着手机一边找你聊bug的时候,你已经偷偷在它的手机上修复了bug,深藏功与名!

    github https://github.com/pedrovgs/AndroidWiFiADB

    作者:Pedro Vicente Gómez Sánchez

    使用:

    Preferences/Settings->Plugins->Browse Repositories->serch AndroidWiFiADB

    89.emojicon

    一句话介绍:一款提供在TextView、EdiText展示表情包能力的框架

    上榜理由:2.7k个star,,榜单第二款增强TextView显示能力的框架,这款专为表情包设计,如果你曾经好奇微信、QQ的表情显示是如何做到的?这款框架一定能满足你的求知欲。

    90.packer-ng-plugin

    一句话介绍:一款打爆工具插件

    上榜利用:笔者尽力维护榜单涉及范围的全面性,因此引入此插件项目——项目号称完成100个渠道包只需要10秒钟,在市面上各种各样多渠道打包方案的今天,选择一款适合自己团队的,才是上上选择

    github https://github.com/mcxiaoke/packer-ng-plugin

    作者:Xiaoke Zhang

    使用:

    1. buildscript {
    2. ......
    3. dependencies{
    4. // add packer-ng
    5. classpath 'com.mcxiaoke.gradle:packer-ng:1.0.9'
    6. }
    7. }

    1. apply plugin: 'packer'
    2. dependencies {
    3. compile 'com.mcxiaoke.gradle:packer-helper:1.0.9'
    4. }
    5. android {
    6. //...
    7. signingConfigs {
    8. release {
    9. // 满足下面两个条件时需要此配置
    10. // 1. Gradle版本 >= 2.14.1
    11. // 2. Android Gradle Plugin 版本 >= 2.2.0
    12. // 作用是只使用旧版签名,禁用V2版签名模式
    13. v2SigningEnabled false
    14. }
    15. }
    16. }


    91.android-priority-jobqueue

    一句话介绍:一款提供后台任务管理能力的框架

    上榜理由:如果你是个志在深入研究多线程操作 的开发者,这个项目一定不要错过,不论是Activity重新加载、Service使用线程池时的任务优先级和并发问题,都不要担心,Job Manage会照顾优先级,持久性,负载平衡,延迟,网络控制,分组,2.4K个star,优秀的多线程管理能力,况且它依赖的第三方框架很少,值得你一 试

    github https://github.com/yigit/android-priority-jobqueue

    作者:Yigit Boyar

    92.Android-Debug-Database

    一句话介绍:一款提供测试App内部数据库能力的框架

    上榜理由:榜单里第二款针对调试数据库的框架,一行代码集成,直接在浏览器增删改查App的数据库,2.3k个star,心动不如行动!

    github https://github.com/amitshekhariitbhu/Android-Debug-Database

    作者:AMIT SHEKHAR

    使用:

    debugCompile 'com.amitshekhar.android:debug-db:1.0.0'
    • 1

    浏览器键入

     http://XXX.XXX.X.XXX:8080
    • 1

    93.conceal

    一句话介绍:一款facebook提供的加密本地大文件的框架

    上榜理由:如果还在担心App内的图片的隐私问题,这款facebook提供的文件加密框架足以解决你的问题,facebook客户端的图片和数据都是使用conceal加密的

    官网地址:http://facebook.github.io/conceal/

    github https://github.com/facebook/conceal

    作者;facebook

    使用:

    clone项目到本地/官网下载jar

    94.ARouter

    一句话介绍:一款提供服务、页面跳转路由的框架

    上榜理由:正如作者宣称的那样,该框架提供:从外部URL映射到内部页面、跨模块的页面跳转(页面解耦)、拦截跳转过程等能力,还有更多功能等你去发掘,2.1K个star,值得为企业级的框架喝彩

    github https://github.com/alibaba/ARouter

    作者:alibaba

    使用:

    1. ndroid {
    2. defaultConfig {
    3. ...
    4. javaCompileOptions {
    5. annotationProcessorOptions {
    6. arguments = [ moduleName : project.getName() ]
    7. }
    8. }
    9. }
    10. }
    11. dependencies {
    12. // 替换成最新版本, 需要注意的是api
    13. // 要与compiler匹配使用,均使用最新版可以保证兼容
    14. compile 'com.alibaba:arouter-api:x.x.x'
    15. annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
    16. ...
    17. }
    18. // 旧版本gradle插件(< 2.2),可以使用apt插件,配置方法见文末'其他#4'
    19. // Kotlin配置参考文末'其他#5'

    95.MagicaSakura

    一句话介绍:一款提供多主题切换能力的框架

    上榜理由:框架所提供的能力,一直是本榜单所看重的,这款由bilibili提供的多主题框架,作为榜单所涉及范围能补充,1.9个star,感谢bilibili团队所作出的贡献!

    github https://github.com/Bilibili/MagicaSakura

    作者:Bilibili

    使用:

    compile 'com.bilibili:magicasakura:0.1.6@aar'

    96.CustomActivityOnCrash

    一句话介绍:一款当APP crash的时候自动载入某个Activity的框架(而不是显示Unfortunately, X has stopped)

    上榜理由:新奇的创意是榜单所需要的,所以它 赢得了1.8K个star;作为开发者应该拥有考虑到各种潜伏的bug的能力,但我们不能总是面面俱到,其他系统端的同事也可能造成程序的意外 crash,因此,如何让程序优雅的crash->重启值得我们思考,这款框架就提供了这种能力

    github https://github.com/Ereza/CustomActivityOnCrash

    作者:Eduard Ereza Martínez

    使用:

    1. dependencies {
    2. compile 'cat.ereza:customactivityoncrash:2.1.0'
    3. }
    4. 添加到 Application class:

    1. @Override
    2. public void onCreate() {
    3. super.onCreate();
    4. CaocConfig.Builder.create()
    5. .backgroundMode(CaocConfig.BACKGROUND_MODE_SILENT)
    6. .enabled(false) //default: true
    7. .showErrorDetails(false) //default: true
    8. .showRestartButton(false) //default: true
    9. .trackActivities(true) //default: false
    10. .minTimeBetweenCrashesMs(2000) //default: 3000
    11. .errorDrawable(R.drawable.ic_custom_drawable) //default: bug image
    12. .restartActivity(YourCustomActivity.class) //default: null (your app's launch activity)
    13. .errorActivity(YourCustomErrorActivity.class) //default: null (default error activity)
    14. .eventListener(new YourCustomEventListener()) //default: null
    15. .apply();
    16. }


    97.XhsEmoticonsKeyboard

    一句话介绍:最开心的开源表情解决方案

    上榜理由:如果你还在发愁如何为你的APP自制键盘,那么此框架非常适合你,而且还提供表情包展示能力,1.7个star证明了它的独特。此外作者还附赠了高仿微信键盘,QQ键盘的demo,分享给诸位

    github https://github.com/w446108264/XhsEmoticonsKeyboard

    作者:zhongdaxia

    使用:

    1. allprojects {
    2. repositories {
    3. jcenter()
    4. maven { url "https://jitpack.io" }
    5. }
    6. }
    7. dependencies {
    8. compile 'com.github.w446108264:XhsEmoticonsKeyboard:2.0.4'
    9. }

    98. Android-ObservableScrollView

    一款让视图滑动更具有视觉效果的滑动式框架,在 GitHub 上提供了 12 种滑动效果,可以用来提升 App 的滑动体验

    GitHub 地址:https://github.com/ksoichiro/Android-ObservableScrollView

    本文转载地址:http://blog.csdn.net/angle0306/article/details/78900051

    展开全文
  • Android常用框架

    万次阅读 2019-05-06 17:10:14
    1.缓存框架     1.1DiskLruCache:Java实现基于LRU的磁盘缓存,DiskLruCache不是google官方所写,但是得到了官方推荐,DiskLruCache没有编写到SDK中去,如需使用可直接copy这个类到项目中去。...

    常用框架
    1.缓存框架
        1.1DiskLruCache:Java实现基于LRU的磁盘缓存,DiskLruCache不是google官方所写,但是得到了官方推荐,DiskLruCache没有编写到SDK中去,如需使用可直接copy这个类到项目中去。使用场景:如“清除缓存”,DiskLruCache一句话就可以搞定!
    github https://github.com/JakeWharton/DiskLruCache
    作者:JakeWharton
    使用:implementation ‘com.jakewharton:disklrucache:2.0.2’
        1.2LruCache:Android 3.1的时候出现的,一般我们为了兼容低版本会使用v4包下的。LruCache是一种缓存策略,持有的是强引用,但是会控制在一个峰值下。它内部维护了一个队列,每当从中取出一个值时,该值就移动到队列的头部。当缓存已满而继续添加时,会将队列尾部的值移除,方便GC。LruCache用于内存缓存,在避免程序发生OOM和提高执行效率有着良好表现。
    2.图片加载
        2.1Android Universal Image Loader:UIL曾经的图片加载框架王者,android开发老手都用过它。提供了大量配置方式,图片加载状态的回调(成功,失败,进行中),加载动画等;以及提供了移动端图片加载框架的缓存思路:三级缓存策略 sd卡-内存-网络;
    github https://github.com/nostra13/Android-Universal-Image-Loader
    作者 nostra13
    使用:
    implementation ‘com.nostra13.universalimageloader:universal-image-loader:1.9.5’
        2.2Picasso: 强力的图片下载、缓存框架。
    更强调图片下载,你可以将picasso集成进你的项目中,你也可以结合gilde和UIL与picasso,三者一齐封装至你的项目中,按需所用。
    github https://github.com/square/picasso
    作者 square团队
    使用:
    implementation ‘com.squareup.picasso:picasso:2.5.2’
        2.3Fresco: 可以管理图片内存的框架
    在管理图片内存领域上有着它的一片天地,渐进式加载、加载gif。
    官网地址: https://www.fresco-cn.org/
    github https://github.com/facebook/fresco
    作者 facebook
    使用:
    implementation ‘com.facebook.fresco:fresco:0.12.0’
    下面的依赖需要根据需求添加:
    // 在 API < 14 上的机器支持 WebP 时,需要添加
    implementation 'com.facebook.fresco:animated-base-supp
        2.4Glide: 是一款专注于提供流畅划动能力的“图片加载和缓存框架”
    图片加载类框架排名第一的框架,google 在2014开发者大会上演示的camera app就是基于gilde框架开发的
    地址:
    github https://github.com/bumptech/glide
    作者 Bump Technologies团队
    使用:
    implementation ‘com.github.bumptech.glide:glide:4.5.0’
    3.图片处理
        3.1 Picasso-transformations: Picasso提供多种图片变换的库。
    地址:github https://github.com/wasabeef/picasso-transformations
    作者 square团队
    使用:
    implementation ‘jp.wasabeef:picasso-transformations:2.1.0’
    // If you want to use the GPU Filters
    implementation ‘jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1’
         3.2Glide-transformations: 为众多著名图片加载框架(glide,Picasso,Fresco等)提供图片形状变幻能力的框架 。
    github https://github.com/wasabeef/glide-transformations
    作者:Daichi Furiya
    使用:
    implementation ‘jp.wasabeef:glide-transformations:2.0.2’
    // If you want to use the GPU Filters
    implementation ‘jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1’
        3.3Android-gpuimage: 一款基于OpenGL的图片渲染引擎,Android版的android-gpuimage就提供多达70多种图片渲染效果,你还在好奇美图秀秀是如何实现图片变幻的?有了它,一 切都不是问题。如果你是美图工具类的工程师,此框架的建设思路也会对你大有裨益。
    github:https://github.com/CyberAgent/android-gpuimage
    作者:CyberAgent 团队
    使用:
    implementation ‘jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1’
    4.网络请求
         4.1Android Async HTTP: 一款基于Http协议的异步请求的网络框架。
    github https://github.com/loopj/android-async-http

    作者:James Smith

    使用:
    implementation ‘com.loopj.android:android-async-http:1.5.0-SNAPSHOT’
         4.2AndroidAsync: 异步Socket,HTTP(客户端+服务器),WebSocket,和socket.io库。基于NIO而不是线程。
    地址:https://github.com/koush/AndroidAsync/tree/master/AndroidAsync/src/com/koushikdutta/async
    使用:
    implementation ‘com.koushikdutta.async:androidasync:2.+’
        4.3OkHttp : okhttp是一款基于HTTP和HTTP2.0协议的网络框架,服务于java和android客户端,专注网络请求的安全高效。
    地址 http://square.github.io/okhttp/
    github https://github.com/square/okhttp
    作者:square团队
    使用:
    implementation ‘com.squareup.okhttp3:okhttp:3.8.0’
        4.4Retrofit:
    一款类型安全的网络框架,基于HTTP协议,服务于Android和java语言。
    Retrofit2.0开始内置okhttp框 架,Retrofit专注封装接口完成业务需求,okhttp专注网络请求的安全高效
    地址
    github https://github.com/square/retrofit
    作者:square团队
    使用:
    implementation ‘com.squareup.retrofit2:retrofit:2.3.0’
        4.5Volley: google推荐使用的Android端网络请求框架
    github https://github.com/google/volley
    作者:google
    5.数据解析:
        5.1Gson:Gson是谷歌官方推出的支持 JSON – Java Object 相互转换的 Java序列化/反序列化 库。
    地址:
    github https://github.com/google/gson
    作者:google
    使用:
    implementation ‘com.google.code.gson:gson:2.8.4’
        5.2Jackson: 相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换。
    地址:
    github https://github.com/codehaus/jackson
    使用:
    compile ‘org.codehaus.jackson:jackson-mapper-asl:1+’
    compile ‘org.codehaus.jackson:jackson-core-asl:1+’
        **5.3Fastjson:**一款基于json解析、生成的框架,快速是它最大的特性,阿里巴巴的出身保证了代码的质量和优越。
    github https://github.com/alibaba/fastjson
    作者:alibaba
    使用:
    compile ‘com.alibaba:fastjson:1.1.58.android’
        5.4:HtmlPaser 一个用来解析 HTML 文档的开放源码项目,提供了强大的 API 实现对 Html 网页进行信息转换 (Transformation) 以及从 HTML 文档里提取 (Extraction) 感兴趣的信息。它具有小巧、快速、使用简单的特点,并且经过严格的测试。
        5.5Jsoup: 方便的增删查改HTML中的元素
    地址:
    https://github.com/jhy/jsoup
    使用:
    compile ‘org.jsoup:jsoup:1.9.2’

    6.数据库
        6.1OrmLite: JDBC和Android的轻量级ORM java包
    地址:
    https://github.com/j256/ormlite-core
    https://github.com/j256/ormlite-android
    使用:
    compile ‘com.j256.ormlite:ormlite-android:5.0’
    compile ‘com.j256.ormlite:ormlite-core:5.0’
         6.2Sugar : 用超级简单的方法处理Android数据库,不用写复杂的sql语句,而用简单的API即可完成创建和操纵数据
    地址:
    https://github.com/chennaione/sugar
    使用:
    compile ‘com.github.satyan:sugar:1.3’
        6.3GreenDAO: 是一款高效、快速的SQLite型数据库
    ,号称Android最快的关系型数据库支持数据库加密 greendao支持SQLCipher进行数据库加密
    github https://github.com/greenrobot/greenDAO
    使用:
    classpath ‘com.android.tools.build:gradle:2.3.1’
    classpath ‘org.greenrobot:greendao-gradle-plugin:3.2.2’ // add plugin
         6.4ActiveAndroid: 极大的简化数据库的使用,使用面向对象的方式管理数据库,告别手写SQL历史。每一个数据库表都可以映射为一个类。
    地址:
    https://github.com/pardom-zz/ActiveAndroid
    使用:
    compile ‘com.michaelpardo:activeandroid:3.1.0-SNAPSHOT’
         6.5SQLBrite: 响应式数据库框架,对 Android 系统的SQLiteOpenHelper和 ContentResolver 的轻量级封装,配合Rxjava使用。
    https://github.com/square/sqlbrite
    使用:
    compile ‘com.squareup.sqlbrite:sqlbrite:0.7.0’
    在处理线程问题时,由于要使用到RxAndorid中相关的类,所以我们还要引入
    compile ‘io.reactivex:rxandroid:1.1.0’
        6.6Realm: 是一款移动端数据库框架,核心数据引擎C++打造,比普通的Sqlite型数据库快的多。
    地址:github https://github.com/realm/realm-java
    作者:Realm团队
    使用:
    compile ‘org.jsoup:jsoup:1.11.3’
    7.依赖注入
        7.1ButterKnife: 提供了一种能力——使用注解生成模板代码,将view与方法和参数绑定。帮助开发者省却了频繁findviewbyid的烦恼,最新的Butter Knife还提供了onclick绑定以及字符串的初始化。
    github:https://github.com/JakeWharton/butterknife
    作者:JakeWharton ,也是square团队成员之一
    使用:
    compile ‘com.jakewharton:butterknife:8.6.0’
    annotationProcessor ‘com.jakewharton:butterknife-compiler:8.6.0’
         7.2Dagger2 : 一款通过依赖注入降低程序间耦合的开发框架,如今google团队接手的dagger2版本,强力开发团队保证了代码在 设计上的优越性
    github :https://github.com/google/dagger

    作者:google
    使用:
    dependencies {
    compile ‘com.google.dagger?2.x’
    annotationProcessor ‘com.google.dagger:dagger-compiler:2.x’
    }
    //If you’re using classes in dagger.android you’ll also want to include:
    compile ‘com.google.dagger:dagger-android:2.x’
    compile ‘com.google.dagger:dagger-android-support:2.x’
    annotationProcessor ‘com.google.dagger:dagger-android-processor:2.x’
        7.3AndroidAnotations : 可以加速Android的开发。它负责管道,让你专注于真正重要的事情。通过简化代码,它简化了代码的维护。
    https://github.com/androidannotations/androidannotations
    使用:
    dependencies {
    annotationProcessor “org.androidannotations:androidannotations:2.7”
    compile “org.androidannotations:androidannotations-api:2.7”
    }
    8.图表
        8.1WilliamChart: Android图表库,已支持的功能,折线图
    ,条形图,横向条形图,堆叠柱形图,横向堆叠柱形图
    https://github.com/diogobernardino/WilliamChart
    使用:
    compile ‘com.diogobernardino:williamchart:2.2’
        8.2HelloCharts: 一个用来生成统计图表的三方库,目前支持折线图、柱状图和饼状图等常见图表。支持缩放、滑动和动画效果。
    https://github.com/lecho/hellocharts-android
    使用:
    compile ‘com.github.lecho:hellocharts-library:1.5.8@aar’
        8.3MPAndroidChart : 快速、简洁。强大著称的图表框架
    github https://github.com/PhilJay/MPAndroidChart
    作者:PhilJay
    使用:
    compile ‘com.github.PhilJay:MPAndroidChart:v3.0.2’
    9.后台处理
        9.1Tape: Android和Java中使用的与队列类相关的集合类,轻快的、事务性的、基于文件的FIFO(先进先出)

    https://github.com/square/tape
    使用:
    compile ‘com.squareup.tape2:tape:2.0.0-beta1’
        9.2Android Priority Job Queue: 提供后台任务管理能力的框架,不论是Activity重新加载、Service使用线程池时的任务优先级和并发问题,都不要担心,Job Manage会照顾优先级,持久性,负载平衡,延迟,网络控制,分组,优秀的多线程管理能力。
    github https://github.com/yigit/android-priority-jobqueue
    作者:Yigit Boyar
    compile ‘com.birbit:android-priority-jobqueue:2.0.1’
    10. 事件总线
        10.1EventBus: 是一款本地组件间通信框架,在大型项目的Activities,fragments,Threads,Services都可以看到它的使用场景,尽管 EventBus在向未创建的组件传递事件时有些局限,仅适合在“活着的”组件间传递消息,但仍不妨碍它活跃在各个大型项目各个场景里。
    github https://github.com/greenrobot/EventBus
    作者 greenrobot
    使用:
    compile ‘org.greenrobot:eventbus:3.0.0’
        10.2Otto: 一款老旧且强大的事件总线框架。是 square团队早先推出的事件响应型框架,淘宝app的事件驱动也是基于此框架封装的,如今square已经建议开发者采用RxJava RxAndroid来代替otto了。
    github https://github.com/square/otto
    作者:square
    使用:
    compile ‘com.michaelpardo:activeandroid:3.1.0-SNAPSHOT’
    11. 响应式编程
        11.1RxJava: 一款Android客户端组件间异步通信的框架,RxAndroid是用来取代AnsyTask的。
    github https://github.com/ReactiveX/RxAndroid
    作者 JakeWharton
    使用:
    compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’
    compile ‘io.reactivex.rxjava2:rxjava:2.1.0’
        11.2RxJavaJoins: RxJava提供Joins操作(排列组合效果)
    https://github.com/ReactiveX/RxJavaJoins
    使用:
    compile ‘io.reactivex:rxjava-joins:0.22.0’
        11.3RxAndroid: 一款Android客户端组件间异步通信的框架
    https://github.com/ReactiveX/RxAndroid
    使用:
    compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’
    compile ‘io.reactivex.rxjava2:rxjava:2.1.5’
        **11.4RxBinding:**一款提供UI组件事件响应能力的框架,通过RXBinding,你将理解响应式编程的快乐,让项目里的事件流程更清晰。
    github https://github.com/JakeWharton/RxBinding

    作者:JakeWharton
    使用:
    Platform bindings:
    compile ‘com.jakewharton.rxbinding2:rxbinding:2.0.0’
    ‘support-v4’ library bindings:

    compile ‘com.jakewharton.rxbinding2:rxbinding-support-v4:2.0.0’
    ‘appcompat-v7’ library bindings:

    compile ‘com.jakewharton.rxbinding2:rxbinding-appcompat-v7:2.0.0’
    ‘design’ library bindings:

    compile ‘com.jakewharton.rxbinding2:rxbinding-design:2.0.0’
    ‘recyclerview-v7’ library bindings:

    compile ‘com.jakewharton.rxbinding2:rxbinding-recyclerview-v7:2.0.0’
    ‘leanback-v17’ library bindings:

    compile ‘com.jakewharton.rxbinding2:rxbinding-leanback-v17:2.0.0’
        11.5Agera: google专门推出一套响应式编 程框架服务于Android开发者,相比于之响应式编程框架榜首的 RxJava RxAndroid,它更轻量,两者最大的不同点在于agera基于push event、pull data (VS Rx系列 push data)。
    github https://github.com/google/agera
    作者:Google
    使用:
    compile ‘com.google.android.agera:agera:1.3.0’
    扩展能力
    compile ‘com.google.android.agera:content:1.3.0’
    compile ‘com.google.android.agera:database:1.3.0’
    compile ‘com.google.android.agera:net:1.3.0’
    compile ‘com.google.android.agera:rvadapter:1.3.0’
    compile ‘com.google.android.agera:rvdatabinding:1.3.0’
    12. Log框架
         12.1Logger: 一款让log日志优雅显示的框架。它最大的亮点是优雅的输出log信息,并且支持多种格式:线程、Json、Xml、List、Map等
    github https://github.com/orhanobut/logger
    作者:Orhan Obut
    使用:
    compile ‘com.orhanobut:logger:2.1.1’
    13. 测试框架
        **13.1Mockito ?*用简洁的API做测试。而且Mockito简单易学,它可读性强和验证语法简洁。
    API文档:http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html
    https://github.com/mockito/mockito
        **13.2Robotium:**面向Android端的开源自动化测试框架,Robotium结合Android自身提供的测试框架可以对应用程序进行自动化测试。另外,Robotium还支持对WebView的操作。Robotium的核心类是Solo,通过Solo可以对控件进行各种操作。
    https://github.com/RobotiumTech/robotium
        **13.3Robolectric:**一款不依赖于Android设备的单元测试框架。
    github https://github.com/robolectric/robolectric
    作者:robolectric
    使用:
    testCompile “org.robolectric:robolectric:3.3.2”
    14. 调试框架
        **14.1Stetho:**一款提供在Chrome开发者工具上调试Android app能力的开源框架
    ithub https://github.com/facebook/stetho
    使用:
    compile ‘com.facebook.stetho:stetho:1.5.0’
    15. 性能优化
         **15.1LeakCanary :**一款内存检测框架,服务于java和android客户端,最大的特点,只需在应用的apllication中集成,就可以直接使用它;
    github https://github.com/square/leakcanary
    作者 square团队
    使用:
    debugCompile ‘com.squareup.leakcanary:leakcanary-android:1.5.1’
    releaseCompile ‘com.squareup.leakcanary:leakcanary-android-no-op:1.5.1’
    testCompile ‘com.squareup.leakcanary:leakcanary-android-no-op:1.5.1’

        15.2ACRA: 一款提供记录APP崩溃日志能力的框架,acra有足够的能力记录线上APP,并且发回服务端,acra也提供了相当棒的崩溃日志统计服务端框架Acralyzer,cralyzer工作在Apache CouchDB
    github https://github.com/ACRA/acra
    服务端github https://github.com/ACRA/acralyzer
    作者:acra团队

    展开全文
  • Android 框架

    千次阅读 2020-02-16 13:14:21
    MVC MVP MVVM 框架学习

    背景

    我们有一个需求:我们需要查询用户账号信息,用户输入账号,点击按钮可进行查询账号信息,如果查询数据成功,则将数据展示在界面上;如果查询数据失败,则在界面上提升获取数据失败。
    假如说我们不去使用框架来实现这个需求会是什么样子的呢?
    无框架
    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
    
        <EditText
            android:id="@+id/userName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:hint="请输入用户名"
            android:textSize="14sp"/>
    
        <Button
            android:id="@+id/submit"
            android:layout_margin="30dp"
            android:text="提交"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
        <TextView
            android:id="@+id/result"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:textSize="14sp"/>
    </LinearLayout>
    

    用户信息实体类
    这里我们就直接使用了 Kotlin 中的数据类来进行实现

    package com.xjh.queryuser.bean
    
    data class Account(var name:String,var level:Int)
    

    回调接口
    对于数据请求的成功和失败提供相关接口

    package com.xjh.queryuser.callback
    
    import com.xjh.queryuser.bean.Account
    
    interface MCallback {
        fun onSuccess(account:Account)
        fun onFailed()
    }
    

    NormalActivity

    package com.xjh.queryuser
    
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import com.xjh.queryuser.bean.Account
    import com.xjh.queryuser.callback.MCallback
    import kotlinx.android.synthetic.main.activity_normal.*
    import java.util.*
    
    class NormalActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_normal)
            initEvent()
        }
    
        private fun initEvent() {
            submit.setOnClickListener {
                val userInput = getUserInput()
                getAccountData(userInput, object : MCallback{
                    override fun onSuccess(account: Account) {
                        showSuccessPage(account)
                    }
    
                    override fun onFailed() {
                        showFailedPage()
                    }
                })
            }
        }
    
        // 获取用户输入信息
        private fun getUserInput(): String {
            return userName.text.toString()
        }
    
        // 展示获取数据成功的界面
        private fun showSuccessPage(account: Account) {
            result.text = "用户账号:" + account.name + " | " + "用户等级:" + account.level
        }
    
        // 展示获取数据失败的界面
        private fun showFailedPage() {
            result.text = "获取数据失败"
        }
    
        // 模拟查询账号数据
        private fun getAccountData(accountName: String, callback: MCallback) {
            val random = Random()
            val isSuccess = random.nextBoolean()
            if (isSuccess) {
                val account = Account(accountName, 100)
                callback.onSuccess(account)
            } else {
                callback.onFailed()
            }
        }
    }
    
    

    这时候我们就会发现所有的功能都是堆积在一个Activity中的,导致Activity中代码的可复用性降低,Activity过于累赘。
    而Android的框架就是来解决这些问题的,Android中的框架主要是有传统的MVC模式,以及Android中的MVP以及MVVM模式,那他们分别是什么呢?

    MVC

    简介

    MVC的全名是Model View Controller,即模型(model)- 视图(view)- 控制器(controller)。
    MVC
    在 Android 中 Controller 就是 Activity、Fragment 等,而 View 则是 layout, view 等控件,最后 Model 则对应的就是一些数据处理的逻辑,比如:网络请求,数据库,文件查询等
    主要是这个过程,我们对 View 进行点击会传递到 Controller 中,也就是 Activity 上,然后呢,Controller 就会通知给 Model,Model 对数据进行处理以后将结构返回给 View 进行展现。
    比如我们将数据从 Controller 传递到 Model 上,可以让 Controller 持有 Model的引用,而 Model 要向 View 传递数据的话我们一般不会让 Model 持有 View 的引用,而是类似 CallBack 的注册监听的方式进行数据的传递。
    然后我们怎么来使用 MVC 模式优化我们之前的代码呢?
    我们可以将上面的五条按照 MVC 的规则进行分层,其实 MVC 主要是把数据处理这块的逻辑给放到 Model 层中进行处理。
    MVC优化

    代码实现

    然后我们需要怎么做呢?我们需要将数据的获取与界面的展示分离,以及解决 MVC 各层之间的通信问题。对于前一个问题我们只需要将查询账号数据的功能从 Activity 中分离到 Model 中就可以了,而后者就需要想办法让 Activity 通知 Model 获取数据和 Model 通知 Activity 更新界面。
    MVCModel

    package com.xjh.queryuser.mvc
    
    import com.xjh.queryuser.bean.Account
    import com.xjh.queryuser.callback.MCallback
    import java.util.*
    
    class MVCModel {
    
        // 模拟查询账号数据
        fun getAccountData(accountName: String, callback: MCallback) {
            val random = Random()
            val isSuccess = random.nextBoolean()
            if (isSuccess) {
                val account = Account(accountName, 100)
                callback.onSuccess(account)
            } else {
                callback.onFailed()
            }
        }
    }
    

    然后我们在 Activity 中持有 Model 的引用就可以了
    MVCActivity

    package com.xjh.queryuser.mvc
    
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import com.xjh.queryuser.R
    import com.xjh.queryuser.bean.Account
    import com.xjh.queryuser.callback.MCallback
    import kotlinx.android.synthetic.main.activity_normal.*
    
    class MVCActivity : AppCompatActivity() {
    
        private lateinit var mMVCModel: MVCModel
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_normal)
            mMVCModel = MVCModel()
            initEvent()
        }
    
        private fun initEvent() {
            submit.setOnClickListener {
                mMVCModel.getAccountData(getUserInput(), object : MCallback {
                    override fun onSuccess(account: Account) {
                        showSuccessPage(account)
                    }
    
                    override fun onFailed() {
                        showFailedPage()
                    }
                })
            }
        }
    
        // 获取用户输入信息
        private fun getUserInput(): String {
            return userName.text.toString()
        }
    
        // 展示获取数据成功的界面
        private fun showSuccessPage(account: Account) {
            result.text = "用户账号:" + account.name + " | " + "用户等级:" + account.level
        }
    
        // 展示获取数据失败的界面
        private fun showFailedPage() {
            result.text = "获取数据失败"
        }
    }
    
    

    这样我们就将数据请求的部分代码抽离了出去,通过引用进行调用,让代码更加灵活、干净。

    优缺点

    优点

    一定程度上的实现了 Model 与 View 的分离,降低了代码的耦合性。

    缺点

    Controller 与 View 难以完全解耦,并且随着项目复杂度的提升,Controller 将会越来越臃肿,Activity 承担了控制器的功能,又要承担部分视图层的工作。
    其实 MVC 模式的实现也可以这样进行表示:
    MVC
    这样就体现出来了 View 和 Controller 的耦合关系。

    MVP

    简介

    MVP 的全称为 Model - View - Presenter 模型,他是将 Model 和 View 隔离开来,两者之间不相互作用,而是通过 Presenter 作为一个中间件进行通信。
    MVP
    Model 和 MVC 模式中的 Model 的功能是相同的,主要是做一些数据处理的功能,而 View 就是直接对应了 Activity,Fragment 以及 layout 和 view 等控件,Presenter 就是他们俩之间沟通的桥梁。
    这样 Activity 的功能就被简化了,不再充当控制器,主要就是负责 View 层面的工作。
    这样我们就又可以将业务逻辑处理部分代码从 MVC 中的 Controller 中取出,放入 Presenter 中。
    在这里插入图片描述

    代码实现

    这时候我们就要定义相关的接口,让 Presenter 可以调用 Activity 中实现的方法。
    接口定义

    package com.xjh.queryuser.mvp
    
    import com.xjh.queryuser.bean.Account
    
    interface IMVPView {
        fun getUserInput(): String
        fun showSuccessPage(account: Account)
        fun showFailedPage()
    }
    

    我们的 Activity 实现这个接口
    MVPActivity

    package com.xjh.queryuser.mvp
    
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import com.xjh.queryuser.R
    import com.xjh.queryuser.bean.Account
    import kotlinx.android.synthetic.main.activity_normal.*
    
    class MVPActivity : AppCompatActivity(), IMVPView {
    
        private lateinit var mMVPPresenter: MVPPresenter
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_normal)
            mMVPPresenter = MVPPresenter(this)
            initEvent()
        }
    
        private fun initEvent() {
            submit.setOnClickListener {
                mMVPPresenter.getData()
            }
        }
    
        // 获取用户输入信息
        override fun getUserInput(): String {
            return userName.text.toString()
        }
    
        // 展示获取数据成功的界面
        override fun showSuccessPage(account: Account) {
            result.text = "用户账号:" + account.name + " | " + "用户等级:" + account.level
        }
    
        // 展示获取数据失败的界面
        override fun showFailedPage() {
            result.text = "获取数据失败"
        }
    }
    
    

    Model 与 MVC 中的 Model 的作用相同,所以代码可以直接复用过来
    MVPModel

    package com.xjh.queryuser.mvp
    
    import com.xjh.queryuser.bean.Account
    import com.xjh.queryuser.callback.MCallback
    import java.util.*
    
    class MVPModel {
    
        // 模拟查询账号数据
        fun getAccountData(accountName: String, callback: MCallback) {
            val random = Random()
            val isSuccess = random.nextBoolean()
            if (isSuccess) {
                val account = Account(accountName, 100)
                callback.onSuccess(account)
            } else {
                callback.onFailed()
            }
        }
    }
    

    Presenter 持有 View 和 Model 的引用,通过 Presenter 我们向 Model 请求相关数据,并根据判断将结果返回 View 上面显示出来
    MVPPresenter

    package com.xjh.queryuser.mvp
    
    import com.xjh.queryuser.bean.Account
    import com.xjh.queryuser.callback.MCallback
    
    class MVPPresenter {
    
        private val mView: IMVPView
        private val mModel: MVPModel
    
        constructor(mView: IMVPView) {
            this.mView = mView
            mModel = MVPModel()
        }
    
        fun getData() {
            mModel.getAccountData(mView.getUserInput(), object : MCallback {
                override fun onSuccess(account: Account) {
                    mView.showSuccessPage(account)
                }
    
                override fun onFailed() {
                    mView.showFailedPage()
                }
            })
        }
    }
    

    优缺点

    优点

    解决了 MVC 中 Controller 与 View 过度耦合的缺点,职责划分明显,更加易于维护。

    缺点

    接口数量过多,项目复杂的升高。随着项目的复杂度升高, Presenter 层将会越来越臃肿
    结合上面所说的优缺点,有几条关于 MVP 的使用建议:

    1. 接口规范化(封装父类接口以减少接口的使用量)
    2. 使用第三方插件自动生成 MVP 代码
    3. 对于一些简单的页面,可以选择不使用框架
    4. 根据项目的复杂程度,部分模块可以选择不使用接口

    其实这些操作都是为了一个目的:减少接口的数量

    MVVM

    简介

    MVVM 的全称是 Model - View - ViewModel 模型,他的模型结构和 MVP 很相像,但是在代码逻辑上 MVVM 会显得更加简洁,其实他就是将 Presenter 换为了 ViewModel。
    MVVM
    MVVM 在 MVP 的基础上实现了数据视图的绑定(DataBinding),这样的话就不用使用接口进行传递了,而是当数据变化的时候,视图会自动更新;反之,当视图发生改变的时候,数据也会进行自动更新。这样做有什么好处呢?

    1. 减少了接口数量
    2. 不用使用 findViewById 去操控 View

    DataBinding

    DataBinding 是谷歌官方发布的一个实现数据绑定的框架(实现数据与视图的双向绑定),DataBinding 可以帮助我们在 Android 中更好的实现 MVVM 模式。那我们如何使用 DataBinding 呢?

    1. 在代码中启用 DataBinding
    2. 修改布局文件为 DataBinding 布局
    3. 数据绑定

    详细的 DataBinding 用法可以看我另一篇博客:传送门

    代码实现

    其实这里的流程图和 MVP 的形式是一样的,只不过通讯手段从接口的形式变为了 DataBinding 的形式
    MVVM
    首先我们需要在 build.gradle 中声明使用 DataBinding
    build.gradle( app )
    在 android 中添加下面代码

    android {
        dataBinding {
            enabled = true
        }
    }
    

    如果使用的是 Kotlin 的话还需要添加下面代码

    apply plugin: 'kotlin-kapt'
    
    kapt {
        generateStubs = true
    }
    

    然后我们的 Model 和 MVP 中的是一样的
    MVVMModel

    package com.xjh.queryuser.mvvm
    
    import com.xjh.queryuser.bean.Account
    import com.xjh.queryuser.callback.MCallback
    import java.util.*
    
    class MVVMModel {
    
        // 模拟查询账号数据
        fun getAccountData(accountName: String, callback: MCallback) {
            val random = Random()
            val isSuccess = random.nextBoolean()
            if (isSuccess) {
                val account = Account(accountName, 100)
                callback.onSuccess(account)
            } else {
                callback.onFailed()
            }
        }
    }
    

    之后我们就要分析在 ViewModel 中我们需要哪些变量以及方法,比如:getData(),我们需要调用 Model 中的 getAccountData 方法去获取数据,因为我们是使用 DataBinding 方法,所以在 ViewModel 中还需要记录对应的返回值用于展现,因为我们希望和数据变更进行绑定,防止每次都要更新所有的数据,所以我们的类需要继承 BaseObservable。然后在元素的 get 和 set 方法做出修改,get 方法需要添加注解 @Bindable 而 set 方法中需要加入更新该元素显示的代码 notifyPropertyChanged(BR.XXX); ,BR 是什么呢,其实就是相当于我们的 R 文件,用来确定是那个控件需要更新,只不过这里可以直接用变量名。
    MVVMViewModel

    package com.xjh.queryuser.mvvm
    
    import android.databinding.BaseObservable
    import android.databinding.Bindable
    import android.view.View
    
    import com.xjh.queryuser.bean.Account
    import com.xjh.queryuser.callback.MCallback
    
    import com.xjh.queryuser.BR
    
    class MVVMViewModel : BaseObservable() {
    
        private val mvvmModel: MVVMModel = MVVMModel()
        @get:Bindable
        var userInput: String? = null
            set(userInput) {
                field = userInput
                notifyPropertyChanged(BR.userInput)
            }
        @get:Bindable
        var result: String? = null
            set(result) {
                field = result
                notifyPropertyChanged(BR.result)
            }
    
        fun getData(view: View) {
            this.userInput?.let {
                mvvmModel.getAccountData(it, object : MCallback {
                    override fun onSuccess(account: Account) {
                        result = "用户账号:" + account.name + " | " + "用户等级:" + account.level
                    }
    
                    override fun onFailed() {
                        result = "获取数据失败"
                    }
                })
            }
        }
    }
    
    

    然后我们就要进入使用 DataBinding 的第二步:修改布局文件,我们需要将 ViewModel 作为布局文件的参数,然后在布局文件中进行调用。
    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
    
        <data>
    
            <variable
                name="viewModel"
                type="com.xjh.queryuser.mvvm.MVVMViewModel" />
        </data>
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <EditText
                android:id="@+id/userName"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:hint="请输入用户名"
                android:text="@={viewModel.userInput}"
                android:textSize="14sp" />
    
            <Button
                android:id="@+id/submit"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="30dp"
                android:onClick="@{viewModel.getData}"
                android:text="提交" />
    
            <TextView
                android:id="@+id/result"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="10dp"
                android:text="@{viewModel.result}"
                android:textSize="14sp" />
        </LinearLayout>
    </layout>
    

    这样的话我们就可以直接在布局文件中调用 ViewModel 的方法了。
    最后我们就要进行使用 DataBinding 的最后一步操作了,绑定数据,这时候我们就要修改原有的 setContentView 方法,改为使用 DataBindingUtil.setContentView 方法进行绑定,然后我们将我们需要的 ViewModel 传入进去。
    DataBinding 有单向绑定和双向绑定的区别,如果是单向绑定的话就是直接用 @{XXX} 的形式,如果是需要双向绑定的话就是需要改为 @={XXX} 的形式。
    双向绑定的好处就是不仅在数据变化的时候进行刷新 View,也会在 View 主动修改数据的时候对数据进行更新,多用于编辑框等控件。
    MVVMActivity

    package com.xjh.queryuser.mvvm
    
    import android.databinding.DataBindingUtil
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import com.xjh.queryuser.R
    import com.xjh.queryuser.databinding.ActivityMvvmBinding
    
    class MVVMActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            var binding = DataBindingUtil.setContentView<ActivityMvvmBinding>(this, R.layout.activity_mvvm)
            var mvvmViewModel = MVVMViewModel()
            binding.viewModel = mvvmViewModel
        }
    }
    
    

    优缺点

    优点

    实现了数据和视图的双向绑定,极大的简化代码

    缺点

    Bug 难以调试,学习成本较大。

    总结

    框架名 总结
    MVC 学习简单,但是解耦不够彻底
    MVP 解耦更加彻底,学习起来较为简单,但是代码相对较为繁琐
    MVVM 代码逻辑简洁欸,但是学习成本较大

    项目GitHub地址:传送门

    展开全文
  • 各种Android UI开源框架

    万次阅读 2018-01-25 11:23:42
    自己总结的Android开源项目及库。 github排名 https://github.com/trending,github搜索:https://github.com/search Android库学习收集QQ群: 339129051 欢迎入群。 目录 UI UI卫星菜单节选器下拉刷新模糊效果HUD与...
  • android 优秀框架整理

    万次阅读 多人点赞 2018-01-11 11:28:29
    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 1. Retrofit...
  • Android项目框架搭建(一)

    千次阅读 2019-05-22 14:23:57
    你能
  • Android开发常用开源框架

    万次阅读 2018-08-22 11:37:41
    Android开源框架系列 Android开源项目 Android开发常用开源框架2 Android开发常用开源框架3 GitHub上最火的Android开源项目,所有开源项目都有详细资料和配套视频 2017年伊始,你需要尝试的25...
  • Android框架揭秘.pdf

    千次下载 热门讨论 2020-07-30 23:33:35
    Android框架揭秘.pdf 老外写的,看看那
  • 图解Google官方示例的各种android框架

    千次阅读 2017-04-05 19:03:25
    Goolge官方的Android框架源码见:GitHub工程; 毋庸置疑,官方给出的框架示例应该是最标准也最具有普适性的。本文根据工程中的示例,画出了各个框架的架构图,以方便快速学习和了解。 1。常见的MVC框架如下图所示...
  • QMUI_Android框架使用教程

    千次阅读 2018-02-28 15:04:58
    QMUI_Android框架 github地址:点击打开链接功能特性全局 UI 配置只需要修改一份配置表就可以调整 App 的全局样式,包括组件颜色、导航栏、对话框、列表等。一处修改,全局生效。丰富的 UI 控件提供丰富常用的 UI ...
  • Android框架揭秘下载链接: https://pan.baidu.com/s/1W1xrsC2-w5MgsrY-6i_cFg 提取码获取方式:关注下面微信公众号,回复关键字: 1119
  • [0]Android框架揭秘-概论

    千次阅读 2013-08-11 09:19:15
    Android框架揭秘》其实是韩国-金泰延写的一本书,个人觉得很赞。以前对Android的了解非常零散,但这本书系统讲述了Android的框架和实现原理,对系统的整体把握和原理了解非常有帮助。个人认为阅读任何代码,无论...
  • 2018年60个实用Android框架排行榜

    万次阅读 多人点赞 2018-04-16 00:33:40
    qq交流群:6685241181.Retrofit一句话介绍:Retrofit是一款类型安全的网络框架,基于HTTP协议,服务于Android和java语言上榜理由:Retrofit以21.8k的stars量雄踞github中android子标题榜首,第一当之无愧。...
  • Android框架之MVC模式(以登录为例)

    千次阅读 2019-04-03 15:26:23
    Android框架现在常见的有MVC模式、MVP模式、MVVM模式。我们首先先明确一个概念:模式是指组织代码的结构方式,模式并不能提高代码的执行效率。模式是为了后续功能的扩展方便和代码的结构清晰而使用的。 刚开始做...
  • Android 框架炼成 教你如何写组件间通信框架EventBus

    万次阅读 多人点赞 2016-08-10 19:51:23
    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/41096639 ,本文出自:【张鸿洋的博客】1、概述关于Eventbus的介绍,前面已经有两篇:Android EventBus实战 没听过你就out了和Android ...
  • 第四章 Android 框架层安全 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 如我们在第1.2节中所描述的那样,应用程序框架级别上的安全性由 IPC 引用监视器实现。 在 4.1 节中,...
  • Android最火的框架系列(一)前言

    万次阅读 2018-11-27 19:45:08
    前言 工作前两年,在一家手机公司做Android原生开发,做的是手机系统应用开发,很少使用框架进行开发。请原谅我这个原生开发者,从没用过Android的...没办法,被逼无奈,也开始去学习“神秘莫测”的Android框架。...
  • Android框架知识合集

    千次阅读 2016-11-25 14:42:56
    我眼中的Android架构 http://www.jianshu.com/p/22ee3b8ae3b0
  • Android框架之路——聊天Demo实现

    万次阅读 2017-05-30 21:13:11
    一、所用技术 GreenDao存储聊天数据;...Android框架之路——GreenDao3.2.2的使用 Android框架之路——RecyclerView的使用 Android框架之路——ButterKnife的使用 二、实现效果后台每5s发送数据过
1 2 3 4 5 ... 20
收藏数 266,869
精华内容 106,747
关键字:

android 框架