一个面向教学/练习的外卖点餐 App 示例项目,覆盖登录注册、商铺浏览、商品浏览、购物车、下单、订单列表/详情、个人中心等完整业务链路。项目使用 Android DataBinding + ViewModel 的 MVVM 组织方式,网络层基于 OkHttp + Gson,图片加载基于 Glide。
项目 UI 截图位于 ui 目录。
依赖与版本统一在 libs.versions.toml 中管理。
Food/app应用入口 Activity 在 AndroidManifest.xml 中配置为 MainActivity。如果未登录,会自动跳转到登录页。
在项目根目录执行:
./gradlew :app:assembleDebug
安装到设备(已连接 adb 设备):
./gradlew :app:installDebug
Lint:
./gradlew :app:lintDebug
当前服务端地址硬编码在 FoodApiClient.kt:
SERVER_HOST = "http://food1.api.sziit.top"如需切换服务端(或改为 https),直接修改该常量即可。
说明:
usesCleartextTraffic="true",用于允许 http 明文请求(教学/测试环境常用)。如果你的服务端已支持 https,建议关闭该配置。app/src/main/java/com/android/practice/food ├── app/ Application ├── core/ │ ├── logging/ 日志 │ ├── network/ 网络请求与拦截器 │ └── ui/ 基础 UI、组件、图片加载等 ├── data/ │ └── model/ 数据模型 └── feature/ 各业务模块(account/store/product/cart/order/main)
主要业务模块位于 feature:
feature/account:登录、注册、个人信息feature/store:商铺列表feature/product:商品列表feature/cart:购物车feature/order:订单列表/详情/支付feature/main:主页面 + TabBarFoodApiClient 发起,并由 TokenHeaderInterceptor 自动补充 token 请求头ImageLoader.load(ImageView, source, ...)setImageResource / setText,或在 XML 使用显式的 ContextCompat.getDrawable / context.getString 表达式DataBinding 对资源 id 到 Drawable / String 的自动转换能力有限。推荐两种方式:
setImageResource(resId) 与 setText(resId)ContextCompat.getDrawable(view.getContext(), resId)、view.getContext().getString(resId)请在 Android Studio 的 SDK Manager 中安装对应 compileSdk 版本(当前为 36)。
仅用于学习与教学目的。若需开源协议,请按实际发布需求补充。