Git Product home page Git Product logo

guoguodad / jd_mall Goto Github PK

View Code? Open in Web Editor NEW
174.0 6.0 39.0 360.8 MB

🔥🔥高仿京东商城App,具有完整的结构,代码整洁规范,结构清晰,集成Flutter模块,具备React-Native热更功能... 同款Flutter版本( https://github.com/GuoguoDad/jd_mall_flutter.git )

License: GNU General Public License v3.0

Kotlin 63.44% Java 22.91% HTML 0.31% JavaScript 0.50% Groovy 0.10% Objective-C 0.24% Ruby 0.96% Shell 0.07% Dart 11.47%
mvi react-native android kotlin

jd_mall's Introduction

前言

高仿京东商城App,具有完整的结构,代码整洁规范,结构清晰,集成Flutter模块,具备React-Native热更功能,...如果对你有帮助,给个star

  1. 使用kotlin语言开发,项目使用模块化开发,降低了耦合性
  2. 网络使用 retrofit2 + okhttp3方式,进行了高度的封装
  3. 使用leakcanary 内存泄漏检测
  4. 基于MVI架构(airbnb的Mavericks)开发
  5. 使用本地mock模拟服务端
  6. 采用ARouter路由管理
  7. 集成Flutter模块,填写订单页由flutter编写, module_flutter可单独运行
  8. 集成RN热更功能,rn工程请见

**** 运行要求,Android环境,flutter环境, rn为热更,无需rn环境 ****

MVI架构

image

由于没有明确的状态管理标准,随着应用程序的增长或添加功能或事先没有计划的功能,视图渲染和业务逻辑可能会变得有点混乱,并且这种情况经常发生在Android应用开发过程中。可能你经常遇到状态管理导致业务逻辑和 UI 渲染的分工不明确,最终导致应用架构的混乱。而新提出的MVI架构,提倡一种单向数据流的设计**,非常适合数据驱动型的UI展示项目。MVI的架构**来源于前端,由于Model、View和Intent三部分组成。

  • Model: 与其他MVVM中的Model不同的是,MVI的Model主要指UI状态(State)。当前界面展示的内容无非就是UI状态的一个快照:例如数据加载过程、控件位置等都是一种UI状态
  • View: 与其他MVX中的View一致,可能是一个Activity、Fragment或者任意UI承载单元。MVI中的View通过订阅Intent的变化实现界面刷新(不是Activity的Intent、后面介绍)
  • Intent: 此Intent不是Activity的Intent,用户的任何操作都被包装成Intent后发送给Model进行数据请求

Flutter module 作为依赖项

方案 A - 依赖 Android Archive (AAR)

  • 这种方式会将 Flutter 库打包成由 AAR 和 POM artifacts 组成的本地 Maven 存储库。这种方案可以不需要安装 Flutter SDK 即可编译宿主应用。

方案 B - 依赖模块的源码

  • 该方式可以使你的 Android 项目和 Flutter 项目能够同步一键式构建。当你需要同时在这两个项目中进行快速迭代时,这种方案非常方便。必须安装 Flutter SDK 才能构建宿主应用程序。

本项目采用的方案B,细节详见

热更新

热更新也叫动态更新,一种和web更新方式很类似。对比App的版本更新,热更新能及时修复线上存在的问题,大幅提升业务迭代效率。

热更流程:

image

1,将本地打包好 Bundle 文件上传到 OSS ,同时生成MD5值。只要 Bundle 内容发生了变化,那么生成 MD5 值就是不一样的,用 MD5 保证文件的唯一性。

2,上传前面生成的bundle包,然后将服务最新的线上 Bundle 修改成最新的,这时版本服务会在内部通过 mysql 或 redis 把线上最新文件给记录下来。 (这里项目使用json文件记录)

3,React Native App 发起版本请求,版本服务会直接把最新的 Bundle 告诉 React Native 应用。

4,React Native 发起 CDN 资源请求 资源请求会先询问某个 CDN 的边缘节点,如果该边缘节点没有缓存,则会去源站拉取;如果该边缘节点有缓存,则直接返回。

效果

首页

image

分类

image

购物车

image

我的

image

商品详情

image

填写订单(flutter模块,混合)

image

账户设置(rn页面-拉取远程的bundle)

image

第三方库

功能
retrofit2 网络
okHttp3 网络
mavericks MVI框架
BaseRecyclerViewAdapterHelper 万能适配器
PhotoView 图片预览
ARouter 组件化路由
coil 图片加载
XPopup 弹窗组件
banner 滚动图
SmartRefreshLayout 智能下拉刷新框架
gson json解析
leakcanary 内存泄漏检测库

声明

⚠️本APP仅限于学习交流使用,请勿用于其它商业用途

⚠️项目中使用的图片及字体等资源如有侵权请联系作者删除

⚠️如使用本项目代码造成侵权与作者无关

jd_mall's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

jd_mall's Issues

一点建议

建议进入页面的数据加载不要在UI层直接调用ViewModel中的方法,而是应该改为在ViewModel的构造函数中调用。
在UI层调用有个问题是,旋转屏幕等操作,会重建页面导致再次调用加载数据的方法,造成页面状态被重置,接口被多次调用的问题。

HomeFragment中addView(adView)未生效

版本:clone下来master运行和直接下载的Release v1.2.2中的mall_release.apk
描述:HomeFragment中addView(adView)未生效,即首页没有adView
binding.collapsableContent.run {
removeAllViews()
addView(banner)
addView(adView) //这一行没有生效,即跑起来之后首页没有adView
addView(nineMenuView)
}

商品规格

请教下商品规格这块,有没有好的demo链接 应该是sku算法??

React-Native模块配置问题求教

1.源码中hermes-engine-0.70.1-release.aar是怎么编辑生成,对应还有一个hermes-engine-0.70.1-release.aar。我知道现在好像可以直接指定版本implementation("com.facebook.react:hermes-android:0.70.1"),但是我还是想知道博主怎么自己生成的想学习一下.
2.在rn的源码中有用到第三方依赖,而且这些依赖有一部分源码是原生端的,我在博主源码中看到是直接将第三方的源码copy进去的,想交流一下有没有简单的方式可以直接用implementation进行依赖,最好是能保证双端的统一性,

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.