企业级Android应用架构设计与开发
《企业级Android应用架构设计与开发》是一套面向Android开发者的进阶实战课程,主要围绕企业级移动应用的架构设计、代码组织、模块化开发及工程实践展开,帮助学习者从基础的页面开发逐步提升到完整应用的架构设计与项目管理能力。课程结合实际开发需求,深入讲解Android应用从需求分析、技术选型、架构搭建到功能实现和后期维护的完整流程,适合具备一定Android开发基础、希望提升技术水平的开发人员学习。
课程重点围绕Android应用的整体架构设计展开,帮助学员理解不同架构模式的特点与适用场景,掌握合理划分业务模块、降低代码耦合度以及提升项目可维护性的方法。通过学习分层架构、组件化设计、模块间通信和依赖管理等内容,学员能够更好地组织复杂业务代码,改善项目结构,为大型应用的持续迭代和团队协作奠定基础。
在具体技术实践方面,课程将结合Android开发中的常见需求,讲解界面层与业务逻辑的分离、数据层设计、网络请求封装、本地数据存储、异步任务处理以及统一异常管理等知识。同时,课程还涉及生命周期管理、状态处理、代码复用和资源管理等重要内容,帮助开发者减少常见开发问题,提高应用的稳定性与开发效率。根据项目实践内容,还可以进一步了解依赖注入、响应式编程、单元测试及自动化构建等现代Android工程化技术。
对于企业级项目而言,良好的架构不仅影响开发效率,也关系到后期维护、功能扩展和团队协作。通过系统学习,学员能够逐步建立规范化的开发思维,理解如何根据业务规模和团队需求选择合适的架构方案,并在实际项目中兼顾代码质量、性能表现与可扩展性。
总体来说,本课程注重理论与实践相结合,适合Android初中级开发者、移动应用工程师以及希望向高级Android开发方向发展的学习者。通过学习企业级应用架构设计与开发方法,能够积累更系统的项目经验,为参与复杂移动应用开发、架构优化和工程化建设打下坚实基础。
课程截图:

课程目录:
└── 364 – 企业级Android应用架构设计与开发/
├── 第1章 课程导学与准备工作/
│ ├── 1-1 学前必读(不看错过一个亿).jpg
│ ├── 1-2 课程导学[2].mp4
│ └── 播放前必看.txt
├── 第2章 企业级工程架构分析/
│ ├── 2-1 企业级工程架构概述[2].mp4
│ ├── 2-2 传统架构分析[2].mp4
│ ├── 2-3 模块化架构分析[2].mp4
│ ├── 2-4 组件化工程架构分析[2].mp4
│ └── 播放前必看.txt
├── 第3章 实战项目需求分析/
│ ├── 3-1 本章概述[2].mp4
│ ├── 3-2 项目需求分析[2].mp4
│ ├── 3-3 项目功能模块划分[2].mp4
│ ├── 3-4 工程创建[2].mp4
│ └── 播放前必看.txt
├── 第4章 maven私服搭建/
│ ├── 4-1 本章概述[2].mp4
│ ├── 4-2 maven仓库及maven私服介绍[2].mp4
│ ├── 4-3 maven私服搭建[2].mp4
│ ├── 4-4 maven私服接入[2].mp4
│ ├── 4-5 工程结构优化[2].mp4
│ └── 4-6 本章小结[2].mp4
├── 第5章 首页框架搭建/
│ ├── 5-1 本章概述[2].mp4
│ ├── 5-2 首页需求分析[2].mp4
│ ├── 5-3 首页搭建思路[2].mp4
│ ├── 5-4 布局编写[2].mp4
│ ├── 5-5 指示器初始化[2].mp4
│ ├── 5-6 viewpager初始化[2].mp4
│ ├── 5-7 沉浸式效果开发[2].mp4
│ └── 5-8 本章小结[2].mp4
├── 第6章 网络请求组件开发/
│ ├── 6-1 本章概述[2].mp4
│ ├── 6-2 技术选型分析[2].mp4
│ ├── 6-3 封装思路讲解[2].mp4
│ ├── 6-4 post请求构造[2].mp4
│ ├── 6-5 get请求构造[2].mp4
│ ├── 6-6 文件上传请求构造[2].mp4
│ ├── 6-7 json类型响应处理[2].mp4
│ ├── 6-8 文件类型响应处理[2].mp4
│ ├── 6-9 okhttpclient封装[2].mp4
│ ├── 6-10 请求组件试用[2].mp4
│ └── 6-11 本章小结[2].mp4
├── 第7章 图片加载组件开发/
│ ├── 7-1 本章概述[2].mp4
│ ├── 7-2 技术选型分析[2].mp4
│ ├── 7-3 思路分析[2].mp4
│ ├── 7-4 准备工作[2].mp4
│ ├── 7-5 ImgaeLoaderManager初始化[2].mp4
│ ├── 7-6 为view加载图片方法封装[2].mp4
│ ├── 7-7 加载圆形图片方法封装[2].mp4
│ ├── 7-8 viewgroup加载图片方法封装[2].mp4
│ ├── 7-9 notification图片加载组件封装[2].mp4
│ └── 7-10 本章小结[2].mp4
├── 第8章 登录功能实现/
│ ├── 8-1 本章概述[2].mp4
│ ├── 8-2 需求分析[2].mp4
│ ├── 8-3 登录功能实现思路[2].mp4
│ ├── 8-4 准备工作[2].mp4
│ ├── 8-5 UserManager管理类实现[2].mp4
│ ├── 8-6 LoginActivity功能实现[2].mp4
│ ├── 8-7 HomeActivity登录事件处理[2].mp4
│ ├── 8-8 功能测试[2].mp4
│ ├── 8-9 扩散效果自定义属性[2].mp4
│ ├── 8-10 扩展效果变量初始化[2].mp4
│ ├── 8-11 自定义SpreadView[2].mp4
│ └── 8-12 本章小结[2].mp4
├── 第9章 音乐播放组件设计与开发(上)【核心、难点】/
│ ├── 9-1 本章概述[2].mp4
│ ├── 9-2 需求分析[2].mp4
│ ├── 9-3 UML类图思路分析[2].mp4
│ ├── 9-4 准备工作[2].mp4
│ ├── 9-5 CustomMediaPlayer类实现[2].mp4
│ ├── 9-6 AudioPlayer初始化[2].mp4
│ ├── 9-8 音频焦点回调处理[2].mp4
│ ├── 9-9 AudioPlayer事件处理[2].mp4
│ ├── 9-10 AudioController初始化[2].mp4
│ ├── 9-11 AudioController核心方法实现[2].mp4
│ └── 9-12 AudioController核心方法实现[2].mp4
├── 第10章 音乐播放组件设计与开发(下)【核心、难点】/
│ ├── 10-1 BottomMusicView定义[2].mp4
│ ├── 10-2 NotificationHelp初始化[2].mp4
│ ├── 10-3 Notification更新方法[2].mp4
│ ├── 10-4 MusicService创建[2].mp4
│ ├── 10-5 MusicService事件与广播处理[2].mp4
│ ├── 10-6 GreenDao初始化[2].mp4
│ ├── 10-7 收藏功能开发[2].mp4
│ ├── 10-8 功能较验[2].mp4
│ ├── 10-9 MusicPlayerActivity初始化[2].mp4
│ ├── 10-10 MusicPlayActivity事件处理[2].mp4
│ ├── 10-11 唱针效果实现[2].mp4
│ ├── 10-12 唱针效果实现[2].mp4
│ ├── 10-13 Activity转场动画效果[2].mp4
│ └── 10-14 本章小结[2].mp4
├── 第11章 分享组件设计与开发/
│ ├── 11-1 本章概述[2].mp4
│ ├── 11-2 技术选型[2].mp4
│ ├── 11-3 ShareSdk接入_[2].mp4
│ ├── 11-4 ShareManager管理类开发[2].mp4
│ ├── 11-5 分享入口ShareDilaog实现[2].mp4
│ ├── 11-6 音乐播放器接入分享功能[2].mp4
│ └── 11-7 本章小结[2].mp4
├── 第12章 保活组件设计与开发/
│ ├── 12-1 本章概述[2].mp4
│ ├── 12-2 常见保活方式[2].mp4
│ ├── 12-3 JobService类源码分析[2].mp4
│ ├── 12-4 保活核心类JobService编写[2].mp4
│ ├── 12-5 保活核心类JobService编写[2].mp4
│ └── 12-6 本章小结[2].mp4
├── 第13章 朋友功能模块开发/
│ ├── 13-1 本章概述[2].mp4
│ ├── 13-2 需求分析[2].mp4
│ ├── 13-3 实现思路[2].mp4
│ ├── 13-4 功能整体架构[2].mp4
│ ├── 13-5 适配器开发[2].mp4
│ ├── 13-6 适配器开发[2].mp4
│ └── 13-7 本章小结[2].mp4
├── 第14章 视频播放组件设计与开发/
│ ├── 14-1 本章概述[2].mp4
│ ├── 14-2 需求分析及思路[2].mp4
│ ├── 14-3 CustomMediaPlayer定义[2].mp4
│ ├── 14-4 CustomVideoView事件处理[2].mp4
│ ├── 14-5 CustomVideoView事件处理[2].mp4
│ ├── 14-6 视频逻辑层开发[2].mp4
│ ├── 14-7 全屏播放逻辑处理[2].mp4
│ ├── 14-8 视频播放组件应用层开发[2].mp4
│ ├── 14-9 视频播放组件整体架构[2].mp4
│ ├── 14-10 为朋友功能添加视频功能[2].mp4
│ └── 14-11 本章小结[2].mp4
├── 第15章 工程组件化改造/
│ ├── 15-1 本章概述[2].mp4
│ ├── 15-2 arouter原理分析[2].mp4
│ ├── 15-3 arouter文档阅读[2].mp4
│ ├── 15-4 arouter接入[2].mp4
│ ├── 15-5 项目路由改造[2].mp4
│ ├── 15-6 项目服务化改造[2].mp4
│ ├── 15-7 代码效果测试[2].mp4
│ └── 15-8 本章小结[2].mp4
├── 第16章 Android9.0适配及androidx迁移/
│ ├── 16-1 本章概述[2].mp4
│ ├── 16-2 androidx官网解读[2].mp4
│ ├── 16-3 实战工程迁移androidx[2].mp4
│ └── 16-4 本章小结[2].mp4
├── 第17章 课程总结/
│ └── 17-1 全面总结[2].mp4
└── 资料/
├── document/
│ ├── imooc_music_server.zip
│ ├── nexus-3.18.1-01-mac.zip
│ └── nexus-3.18.1-01-win64.zip
├── gradle/
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── imooc_voice/
│ ├── mock/
│ │ ├── home_data.json
│ │ ├── home_friend_data.json
│ │ ├── home_more_data.json
│ │ └── login_data.json
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── imooc_voice/
│ │ │ └── ExampleInstrumentedTest.java
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ ├── res/
│ │ │ ├── drawable/
│ │ │ │ ├── bg_banner.xml
│ │ │ │ ├── bg_black_rect.xml
│ │ │ │ ├── bg_home_login.xml
│ │ │ │ ├── bg_home_tip.xml
│ │ │ │ ├── bg_loading_more.xml
│ │ │ │ ├── bg_mobile_loggin.xml
│ │ │ │ ├── bg_red_rect.xml
│ │ │ │ └── ic_launcher_background.xml
│ │ │ ├── drawable-v24/
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── drawable-xhdpi/
│ │ │ │ ├── loading_01.png
│ │ │ │ ├── loading_02.png
│ │ │ │ ├── loading_03.png
│ │ │ │ └── loading_04.png
│ │ │ ├── layout/
│ │ │ │ ├── activity_loading_layout.xml
│ │ │ │ ├── activity_login_layout.xml
│ │ │ │ ├── activity_main.xml
│ │ │ │ ├── default_loading.xml
│ │ │ │ ├── fragment_discory_layout.xml
│ │ │ │ ├── fragment_friend_layout.xml
│ │ │ │ ├── fragment_mine_layout.xml
│ │ │ │ ├── fragment_video_layout.xml
│ │ │ │ ├── item_discory_head_banner_layout.xml
│ │ │ │ ├── item_discory_head_function_layout.xml
│ │ │ │ ├── item_discory_head_recommand_layout.xml
│ │ │ │ ├── item_discory_head_recommand_recycler_layout.xml
│ │ │ │ ├── item_discory_list_ad_layout.xml
│ │ │ │ ├── item_discory_list_picture_layout.xml
│ │ │ │ ├── item_friend_list_picture_layout.xml
│ │ │ │ └── item_friend_list_video_layout.xml
│ │ │ ├── mipmap-hdpi/
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi/
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi/
│ │ │ │ ├── abi.png
│ │ │ │ ├── abj.png
│ │ │ │ ├── abk.png
│ │ │ │ ├── anc.png
│ │ │ │ ├── and.png
│ │ │ │ ├── ane.png
│ │ │ │ ├── anf.png
│ │ │ │ ├── ang.png
│ │ │ │ ├── anh.png
│ │ │ │ ├── ani.png
│ │ │ │ ├── anj.png
│ │ │ │ ├── ank.png
│ │ │ │ ├── anl.png
│ │ │ │ ├── anm.png
│ │ │ │ ├── ann.png
│ │ │ │ ├── ano.png
│ │ │ │ ├── anp.png
│ │ │ │ ├── anq.png
│ │ │ │ ├── anr.png
│ │ │ │ ├── b_m.png
│ │ │ │ ├── b_p.png
│ │ │ │ ├── baq.png
│ │ │ │ ├── baz.png
│ │ │ │ ├── bb1.png
│ │ │ │ ├── category.png
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── ic_splash.png
│ │ │ │ ├── icon_msg.png
│ │ │ │ ├── icon_play.png
│ │ │ │ ├── icon_time.png
│ │ │ │ ├── icon_zan.png
│ │ │ │ ├── shortcut_fm.png
│ │ │ │ ├── shortcut_identify.png
│ │ │ │ ├── shortcut_local_music.png
│ │ │ │ └── shortcut_search.png
│ │ │ ├── mipmap-xxhdpi/
│ │ │ │ ├── bg_mine.jpeg
│ │ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxxhdpi/
│ │ │ │ ├── ic_launcher.png
│ │ │ │ ├── img_000.jpg
│ │ │ │ ├── img_001.jpg
│ │ │ │ ├── img_002.jpg
│ │ │ │ ├── img_003.jpg
│ │ │ │ ├── img_004.jpg
│ │ │ │ ├── img_005.jpg
│ │ │ │ ├── img_006.jpg
│ │ │ │ └── img_007.jpg
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── dimens.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ ├── values-v21/
│ │ │ │ └── styles.xml
│ │ │ ├── values-w820dp/
│ │ │ │ └── dimens.xml
│ │ │ └── xml/
│ │ │ ├── file_paths.xml
│ │ │ └── network_security_config.xml
│ │ └── AndroidManifest.xml
│ ├── .gitignore
│ ├── build.gradle
│ ├── imooc_voice_key
│ ├── imooc_voice.iml
│ └── proguard-rules.pro
├── lib_audio/
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_audio/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_audio/
│ │ │ │ ├── app/
│ │ │ │ │ ├── service/
│ │ │ │ │ │ └── AudioServiceImpl.java
│ │ │ │ │ └── AudioHelper.java
│ │ │ │ └── mediaplayer/
│ │ │ │ ├── core/
│ │ │ │ │ ├── AudioController.java
│ │ │ │ │ ├── AudioFocusManager.java
│ │ │ │ │ ├── AudioPlayer.java
│ │ │ │ │ ├── CustomMediaPlayer.java
│ │ │ │ │ └── MusicService.java
│ │ │ │ ├── events/
│ │ │ │ │ ├── AudioCompleteEvent.java
│ │ │ │ │ ├── AudioErrorEvent.java
│ │ │ │ │ ├── AudioFavouriteEvent.java
│ │ │ │ │ ├── AudioLoadEvent.java
│ │ │ │ │ ├── AudioPauseEvent.java
│ │ │ │ │ ├── AudioPlayModeEvent.java
│ │ │ │ │ ├── AudioProgressEvent.java
│ │ │ │ │ ├── AudioReleaseEvent.java
│ │ │ │ │ └── AudioStartEvent.java
│ │ │ │ ├── exception/
│ │ │ │ │ └── AudioQueueEmptyException.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── AudioBean.java
│ │ │ │ │ └── Favourite.java
│ │ │ │ ├── utils/
│ │ │ │ │ └── Utils.java
│ │ │ │ └── view/
│ │ │ │ ├── adapter/
│ │ │ │ │ ├── MusicListAdapter.java
│ │ │ │ │ └── MusicPagerAdapter.java
│ │ │ │ ├── BottomMusicView.java
│ │ │ │ ├── IndictorView.java
│ │ │ │ ├── MusicListDialog.java
│ │ │ │ ├── MusicPlayerActivity.java
│ │ │ │ └── NotificationHelper.java
│ │ │ ├── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ ├── bg_seekbar.xml
│ │ │ │ │ ├── bg_thumb.xml
│ │ │ │ │ └── shape_seekbar_btn.xml
│ │ │ │ ├── layout/
│ │ │ │ │ ├── activity_music_service_layout.xml
│ │ │ │ │ ├── bottom_view.xml
│ │ │ │ │ ├── dialog_bottom_sheet_item.xml
│ │ │ │ │ ├── dialog_bottom_sheet.xml
│ │ │ │ │ ├── indictor_item_view.xml
│ │ │ │ │ ├── indictor_view.xml
│ │ │ │ │ ├── notification_big_layout.xml
│ │ │ │ │ └── notification_small_layout.xml
│ │ │ │ ├── mipmap-xhdpi/
│ │ │ │ │ ├── a0a.png
│ │ │ │ │ ├── a0f.png
│ │ │ │ │ ├── aj9.png
│ │ │ │ │ ├── audio_aef.png
│ │ │ │ │ ├── audio_aeh.png
│ │ │ │ │ ├── audio_af9.png
│ │ │ │ │ ├── audio_aj6.png
│ │ │ │ │ ├── audio_aj7.png
│ │ │ │ │ ├── audio_aj8.png
│ │ │ │ │ ├── audio_aja.png
│ │ │ │ │ ├── audio_ajb.png
│ │ │ │ │ ├── audio_ajc.png
│ │ │ │ │ ├── audio_akg.png
│ │ │ │ │ ├── audio_ano.png
│ │ │ │ │ ├── audio_anu.png
│ │ │ │ │ ├── audio_anw.png
│ │ │ │ │ ├── audio_anx.png
│ │ │ │ │ ├── audio_apa.png
│ │ │ │ │ ├── audio_b2i.png
│ │ │ │ │ ├── audio_b3b.png
│ │ │ │ │ ├── audio_b3f.png
│ │ │ │ │ ├── audio_black_cat.png
│ │ │ │ │ ├── audio_cat.png
│ │ │ │ │ ├── audio_middle.png
│ │ │ │ │ ├── audio_share.png
│ │ │ │ │ ├── b4i.png
│ │ │ │ │ ├── b6o.png
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── loop.png
│ │ │ │ │ ├── note_btn_love_white.png
│ │ │ │ │ ├── note_btn_loved.png
│ │ │ │ │ ├── note_btn_next_white.png
│ │ │ │ │ ├── note_btn_pause_white.png
│ │ │ │ │ ├── note_btn_play_white.png
│ │ │ │ │ ├── note_btn_pre_white.png
│ │ │ │ │ ├── once.png
│ │ │ │ │ ├── player_loop.png
│ │ │ │ │ ├── player_once.png
│ │ │ │ │ ├── player_random.png
│ │ │ │ │ ├── player_settings_bright_thumb.png
│ │ │ │ │ └── random.png
│ │ │ │ ├── mipmap-xxhdpi/
│ │ │ │ │ └── ic_launcher.png
│ │ │ │ ├── transition/
│ │ │ │ │ └── transition_bottom2top.xml
│ │ │ │ └── values/
│ │ │ │ ├── ids.xml
│ │ │ │ └── strings.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_audio/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_audio.iml
│ └── proguard-rules.pro
├── lib_base/
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_base/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_base/
│ │ │ │ └── service/
│ │ │ │ └── audio/
│ │ │ │ └── AudioService.java
│ │ │ ├── res/
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_base/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ └── proguard-rules.pro
├── lib_commin_ui/
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_commin_ui/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_commin_ui/
│ │ │ │ ├── banner/
│ │ │ │ │ └── AutoScrollViewPager.java
│ │ │ │ ├── base/
│ │ │ │ │ ├── constant/
│ │ │ │ │ │ └── Constant.java
│ │ │ │ │ └── BaseActivity.java
│ │ │ │ ├── circle_image_view/
│ │ │ │ │ └── CircleImageView.java
│ │ │ │ ├── pager_indictor/
│ │ │ │ │ ├── CirclePageIndicator.java
│ │ │ │ │ ├── ColorFlipPagerTitleView.java
│ │ │ │ │ ├── PageIndicator.java
│ │ │ │ │ └── ScaleTransitionPagerTitleView.java
│ │ │ │ ├── utils/
│ │ │ │ │ └── StatusBarUtil.java
│ │ │ │ ├── CommonDialog.java
│ │ │ │ ├── HornizeItemView.java
│ │ │ │ ├── MultiImageViewLayout.java
│ │ │ │ ├── SpreadView.java
│ │ │ │ └── VerticalItemView.java
│ │ │ ├── res/
│ │ │ │ ├── layout/
│ │ │ │ │ └── dialog_common_layout.xml
│ │ │ │ └── values/
│ │ │ │ ├── attrs.xml
│ │ │ │ ├── colors.xml
│ │ │ │ ├── ids.xml
│ │ │ │ ├── strings.xml
│ │ │ │ ├── vpi__attrs.xml
│ │ │ │ ├── vpi__colors.xml
│ │ │ │ └── vpi__defaults.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_commin_ui/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_commin_ui.iml
│ └── proguard-rules.pro
├── lib_image_loader/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_image_loader/
│ │ │ │ ├── app/
│ │ │ │ │ └── ImageLoaderManager.java
│ │ │ │ └── image/
│ │ │ │ ├── CustomRequestListener.java
│ │ │ │ └── Utils.java
│ │ │ ├── res/
│ │ │ │ ├── mipmap-xhdpi/
│ │ │ │ │ └── b4y.png
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_image_loader/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_image_loader.iml
│ └── proguard-rules.pro
├── lib_network/
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_network/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_network/
│ │ │ │ └── okhttp/
│ │ │ │ ├── cookie/
│ │ │ │ │ ├── PersistentCookieStore.java
│ │ │ │ │ ├── SerializableHttpCookie.java
│ │ │ │ │ └── SimpleCookieJar.java
│ │ │ │ ├── exception/
│ │ │ │ │ └── OkHttpException.java
│ │ │ │ ├── https/
│ │ │ │ │ └── HttpsUtils.java
│ │ │ │ ├── listener/
│ │ │ │ │ ├── DisposeDataHandle.java
│ │ │ │ │ ├── DisposeDataListener.java
│ │ │ │ │ ├── DisposeDownloadListener.java
│ │ │ │ │ └── DisposeHandleCookieListener.java
│ │ │ │ ├── request/
│ │ │ │ │ ├── CommonRequest.java
│ │ │ │ │ └── RequestParams.java
│ │ │ │ ├── response/
│ │ │ │ │ ├── CommonFileCallback.java
│ │ │ │ │ └── CommonJsonCallback.java
│ │ │ │ ├── utils/
│ │ │ │ │ └── ResponseEntityToModule.java
│ │ │ │ └── CommonOkHttpClient.java
│ │ │ ├── res/
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_network/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_network.iml
│ └── proguard-rules.pro
├── lib_pullalive/
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_pullalive/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_pullalive/
│ │ │ │ └── app/
│ │ │ │ └── AliveJobService.java
│ │ │ ├── res/
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_pullalive/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_pullalive.iml
│ └── proguard-rules.pro
├── lib_qrcode/
│ ├── libs/
│ │ └── zxing.jar
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── lib_qrcode/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── lib_qrcode/
│ │ │ │ └── zxing/
│ │ │ │ ├── app/
│ │ │ │ │ ├── CaptureActivity.java
│ │ │ │ │ └── PreferencesActivity.java
│ │ │ │ ├── camera/
│ │ │ │ │ ├── AutoFocusCallback.java
│ │ │ │ │ ├── CameraConfigurationManager.java
│ │ │ │ │ ├── CameraManager.java
│ │ │ │ │ ├── FlashlightManager.java
│ │ │ │ │ └── PreviewCallback.java
│ │ │ │ ├── decode/
│ │ │ │ │ ├── BeepManager.java
│ │ │ │ │ ├── CaptureActivityHandler.java
│ │ │ │ │ ├── Contents.java
│ │ │ │ │ ├── DecodeFormatManager.java
│ │ │ │ │ ├── DecodeHandler.java
│ │ │ │ │ ├── DecodeThread.java
│ │ │ │ │ ├── FinishListener.java
│ │ │ │ │ ├── InactivityTimer.java
│ │ │ │ │ ├── Intents.java
│ │ │ │ │ ├── PlanarYUVLuminanceSource.java
│ │ │ │ │ └── RGBLuminanceSource.java
│ │ │ │ ├── encode/
│ │ │ │ │ ├── EncodeThread.java
│ │ │ │ │ └── QRCodeEncoder.java
│ │ │ │ ├── util/
│ │ │ │ │ └── Util.java
│ │ │ │ └── view/
│ │ │ │ ├── ViewfinderResultPointCallback.java
│ │ │ │ └── ViewfinderView.java
│ │ │ ├── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ ├── flash_drawable_btn.xml
│ │ │ │ │ ├── mm_title_back_btn.xml
│ │ │ │ │ ├── photo_drawable_btn.xml
│ │ │ │ │ └── qrcode_drawable_btn.xml
│ │ │ │ ├── drawable-xhdpi/
│ │ │ │ │ ├── af9.png
│ │ │ │ │ ├── fas.png
│ │ │ │ │ ├── fat.png
│ │ │ │ │ ├── flash_light.png
│ │ │ │ │ ├── fle.png
│ │ │ │ │ ├── flf.png
│ │ │ │ │ ├── flg.png
│ │ │ │ │ ├── flh.png
│ │ │ │ │ ├── fli.png
│ │ │ │ │ ├── flj.png
│ │ │ │ │ └── flk.png
│ │ │ │ ├── layout/
│ │ │ │ │ ├── activity_qrcode_capture_layout.xml
│ │ │ │ │ ├── item_qrcode_footer.xml
│ │ │ │ │ └── item_qrcode_title.xml
│ │ │ │ ├── raw/
│ │ │ │ │ └── beep.ogg
│ │ │ │ ├── values/
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── ids.xml
│ │ │ │ │ └── strings.xml
│ │ │ │ └── xml/
│ │ │ │ └── preferences.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── lib_qrcode/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_qrcode.iml
│ └── proguard-rules.pro
├── lib_share/
│ ├── libs/
│ │ ├── MobCommons-2016.0811.1207.jar
│ │ ├── MobTools-2016.0811.1207.jar
│ │ ├── ShareSDK-Core-2.7.5.jar
│ │ ├── ShareSDK-QQ-2.7.5.jar
│ │ ├── ShareSDK-QZone-2.7.5.jar
│ │ ├── ShareSDK-Wechat-2.7.5.jar
│ │ ├── ShareSDK-Wechat-Core-2.7.5.jar
│ │ └── ShareSDK-Wechat-Moments-2.7.5.jar
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_share/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── assets/
│ │ │ │ └── ShareSDK.xml
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ ├── imooc/
│ │ │ │ │ └── lib_share/
│ │ │ │ │ └── share/
│ │ │ │ │ ├── ShareData.java
│ │ │ │ │ ├── ShareDialog.java
│ │ │ │ │ └── ShareManager.java
│ │ │ │ └── youdu/
│ │ │ │ └── wxapi/
│ │ │ │ └── WXEntryActivity.java
│ │ │ ├── res/
│ │ │ │ ├── anim/
│ │ │ │ │ ├── actionsheet_in.xml
│ │ │ │ │ └── actionsheet_out.xml
│ │ │ │ ├── drawable/
│ │ │ │ │ ├── bg_share_ci.xml
│ │ │ │ │ ├── bg_share_duanxin.xml
│ │ │ │ │ ├── bg_share_friend.xml
│ │ │ │ │ ├── bg_share_link.xml
│ │ │ │ │ ├── bg_share_moment.xml
│ │ │ │ │ ├── bg_share_music.xml
│ │ │ │ │ ├── bg_share_qq.xml
│ │ │ │ │ ├── bg_share_qzone.xml
│ │ │ │ │ └── bg_share.xml
│ │ │ │ ├── drawable-xhdpi/
│ │ │ │ │ ├── share_ci.png
│ │ │ │ │ ├── share_duanxin.png
│ │ │ │ │ ├── share_friend.png
│ │ │ │ │ ├── share_link.png
│ │ │ │ │ ├── share_moment.png
│ │ │ │ │ ├── share_music.png
│ │ │ │ │ ├── share_qq.png
│ │ │ │ │ └── share_qzone.png
│ │ │ │ ├── layout/
│ │ │ │ │ └── dialog_share_layout.xml
│ │ │ │ └── values/
│ │ │ │ ├── strings.xml
│ │ │ │ └── styles.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_share/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_share.iml
│ └── proguard-rules.pro
├── lib_update/
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_update/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_update/
│ │ │ │ ├── app/
│ │ │ │ │ ├── MockData.java
│ │ │ │ │ └── UpdateHelper.java
│ │ │ │ └── update/
│ │ │ │ ├── constant/
│ │ │ │ │ └── Constants.java
│ │ │ │ ├── model/
│ │ │ │ │ ├── UpdateInfo.java
│ │ │ │ │ └── UpdateModel.java
│ │ │ │ ├── utils/
│ │ │ │ │ └── Utils.java
│ │ │ │ ├── UpdateDownloadListener.java
│ │ │ │ ├── UpdateDownloadRequest.java
│ │ │ │ ├── UpdateManager.java
│ │ │ │ └── UpdateService.java
│ │ │ ├── res/
│ │ │ │ ├── drawable/
│ │ │ │ │ └── icon_imooc.png
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_update/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_update.iml
│ └── proguard-rules.pro
├── lib_video/
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_video/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_video/
│ │ │ │ ├── app/
│ │ │ │ │ └── VideoHelper.java
│ │ │ │ └── videoplayer/
│ │ │ │ ├── core/
│ │ │ │ │ ├── view/
│ │ │ │ │ │ └── CustomVideoView.java
│ │ │ │ │ ├── VideoAdContext.java
│ │ │ │ │ └── VideoAdSlot.java
│ │ │ │ ├── module/
│ │ │ │ │ └── VideoValue.java
│ │ │ │ ├── utils/
│ │ │ │ │ └── Utils.java
│ │ │ │ └── VideoContextInterface.java
│ │ │ ├── res/
│ │ │ │ ├── anim/
│ │ │ │ │ └── xadsdk_anim_ad_loading.xml
│ │ │ │ ├── drawable/
│ │ │ │ │ └── xadsdk_ad_loading_anim.xml
│ │ │ │ ├── drawable-xhdpi/
│ │ │ │ │ ├── xadsdk_ad_close.png
│ │ │ │ │ ├── xadsdk_ad_loading.png
│ │ │ │ │ ├── xadsdk_ad_mini_null.png
│ │ │ │ │ ├── xadsdk_ad_mini.png
│ │ │ │ │ ├── xadsdk_ad_pause.png
│ │ │ │ │ ├── xadsdk_ad_play.png
│ │ │ │ │ ├── xadsdk_img_error.png
│ │ │ │ │ ├── xadsdk_loading_v2_00000.png
│ │ │ │ │ ├── xadsdk_loading_v2_00001.png
│ │ │ │ │ ├── xadsdk_loading_v2_00002.png
│ │ │ │ │ ├── xadsdk_loading_v2_00003.png
│ │ │ │ │ ├── xadsdk_loading_v2_00004.png
│ │ │ │ │ ├── xadsdk_loading_v2_00005.png
│ │ │ │ │ ├── xadsdk_loading_v2_00006.png
│ │ │ │ │ ├── xadsdk_loading_v2_00007.png
│ │ │ │ │ ├── xadsdk_loading_v2_00008.png
│ │ │ │ │ ├── xadsdk_loading_v2_00009.png
│ │ │ │ │ ├── xadsdk_loading_v2_00010.png
│ │ │ │ │ ├── xadsdk_loading_v2_00011.png
│ │ │ │ │ ├── xadsdk_loading_v2_00012.png
│ │ │ │ │ ├── xadsdk_loading_v2_00013.png
│ │ │ │ │ ├── xadsdk_loading_v2_00014.png
│ │ │ │ │ ├── xadsdk_loading_v2_00015.png
│ │ │ │ │ ├── xadsdk_loading_v2_00016.png
│ │ │ │ │ ├── xadsdk_loading_v2_00017.png
│ │ │ │ │ ├── xadsdk_loading_v2_00018.png
│ │ │ │ │ ├── xadsdk_loading_v2_00019.png
│ │ │ │ │ ├── xadsdk_loading_v2_00020.png
│ │ │ │ │ ├── xadsdk_loading_v2_00021.png
│ │ │ │ │ ├── xadsdk_loading_v2_00022.png
│ │ │ │ │ ├── xadsdk_loading_v2_00023.png
│ │ │ │ │ ├── xadsdk_loading_v2_00024.png
│ │ │ │ │ ├── xadsdk_loading_v2_00025.png
│ │ │ │ │ ├── xadsdk_loading_v2_00026.png
│ │ │ │ │ ├── xadsdk_loading_v2_00027.png
│ │ │ │ │ ├── xadsdk_loading_v2_00028.png
│ │ │ │ │ └── xadsdk_loading_v2_00029.png
│ │ │ │ ├── layout/
│ │ │ │ │ ├── dialog_video_layout.xml
│ │ │ │ │ └── video_player_layout.xml
│ │ │ │ └── values/
│ │ │ │ ├── color.xml
│ │ │ │ ├── ids.xml
│ │ │ │ ├── strings.xml
│ │ │ │ └── style.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_video/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_video.iml
│ └── proguard-rules.pro
├── lib_webview/
│ ├── src/
│ │ ├── androidTest/
│ │ │ └── java/
│ │ │ └── com/
│ │ │ └── imooc/
│ │ │ └── lib_webview/
│ │ │ └── ExampleInstrumentedTest.java
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── imooc/
│ │ │ │ └── lib_webview/
│ │ │ │ ├── activity/
│ │ │ │ │ └── AdBrowserActivity.java
│ │ │ │ ├── adbrowser/
│ │ │ │ │ ├── AdBrowserLayout.java
│ │ │ │ │ ├── AdBrowserWebViewClient.java
│ │ │ │ │ ├── Base64Drawables.java
│ │ │ │ │ └── BrowserWebView.java
│ │ │ │ └── utils/
│ │ │ │ └── Utils.java
│ │ │ ├── res/
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── AndroidManifest.xml
│ │ └── test/
│ │ └── java/
│ │ └── com/
│ │ └── imooc/
│ │ └── lib_webview/
│ │ └── ExampleUnitTest.java
│ ├── .gitignore
│ ├── build.gradle
│ ├── lib_webview.iml
│ └── proguard-rules.pro
├── build.gradle
├── gradle.properties
├── gradlew
├── gradlew.bat
├── imooc.gradle
├── LICENSE
├── README.md
└── settings.gradle
侵权联系与免责声明: 1、本站资源所有内容均收集于网络,与本网站立场无关 2、本站所有资源收集于互联网,由用户分享,该帖子作者与IT课程网不享有任何版权,如有侵权请联系本站删除 3、本站部分内容转载自其它网站,但并不代表本站赞同其观点和对其真实性负责 4、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意。如有侵权请联系联系客服QQ:1960026872或登录本站账号进入个人中心提交工单留言反馈,我们将第一时间处理!
