Android 原生 App · 真机可安装
用 Java + Android 框架原生 View 手写的 2048,不用 Gradle、不用 AndroidX、零第三方依赖, 直接用 aapt2 / javac / d8 / apksigner 命令行工具链编译成 APK。 右边这台手机里跑的是浏览器复刻版 —— 同一套配色、同一套绘制参数、同一套游戏逻辑,可以直接玩。
合并数字,凑出 2048
拖动棋盘滑动,或用 ↑↓←→ / WASD 操作 ·
常规 Android 工程靠 Gradle 插件完成资源、编译、打包、签名。这里把每一步拆开手动调用 SDK 自带工具, 整条链路完全可复现,构建产物只有 29 KB。
自己写的 PNG 编码器 + 3× 超采样抗锯齿,输出 5 种密度的 ic_launcher.png。
把 res/ 下的布局、颜色、样式、图标编译成二进制 .flat 资源。
链接资源与清单,产出基础 APK,同时生成 R.java 供 Java 引用资源 ID。
以 android.jar 作为 bootclasspath 编译 Java 源码,class 版本对齐 Java 8。
把 class 文件转换成 Android 运行时使用的 classes.dex。
把 dex 写进 APK(resources.arsc 必须未压缩存储),再做 4 字节对齐。
用 keytool 生成的调试密钥签名,v1/v2/v3 三种签名方案全部验证通过。
$ bash build.sh === 1/7 生成启动图标 === icons generated: 5 densities === 2/7 aapt2 compile(编译资源) === compiled flat files: 11 === 3/7 aapt2 link(链接资源 + 生成 R.java) === === 4/7 javac(编译 Java 源码) === compiled classes: 14 === 5/7 d8(转成 dex) === -rw-r--r-- 1 node node 14548 classes.dex === 6/7 打包进 APK + zipalign === packed 11 entries, classes.dex = 14548 bytes === 7/7 生成签名密钥并签名 === Verifies Verified using v1 scheme (JAR signing): true Verified using v2 scheme (APK Signature Scheme v2): true Verified using v3 scheme (APK Signature Scheme v3): true Number of signers: 1 -rw-r--r-- 1 node node 29699 Game2048.apk BUILD-OK
下面展示的就是编译进这个 APK 的真实文件内容。游戏规则集中在 Board.java,
绘制与手势在 GameView.java,界面装配在 MainActivity.java。
这是一个用调试密钥签名的标准 APK,可以直接侧载安装。
Game2048.apk。下载源码包(46 KB,含完整工程 + 构建脚本 + 已编译好的 APK):
JAVA_HOME 与 ANDROID_SDK_ROOT,执行 ./build.sh。dist/Game2048.apk。Board.java 只用到 java.util.Random,
用普通 javac 编译后即可在 JVM 上跑 BoardTest.java。