Android 原生 App · 真机可安装

2048

Java + Android 框架原生 View 手写的 2048,不用 Gradle、不用 AndroidX、零第三方依赖, 直接用 aapt2 / javac / d8 / apksigner 命令行工具链编译成 APK。 右边这台手机里跑的是浏览器复刻版 —— 同一套配色、同一套绘制参数、同一套游戏逻辑,可以直接玩。

包名 com.dsh.game2048 minSdk 21 · targetSdk 34 APK 29 KB 签名 v1 + v2 + v3 逻辑测试 16/16 通过
9:41 ▮▮▮ ⌁ 100%

2048

合并数字,凑出 2048

得分 0
最高分 0

拖动棋盘滑动,或用 / WASD 操作 ·

没有 Gradle 的构建流程

常规 Android 工程靠 Gradle 插件完成资源、编译、打包、签名。这里把每一步拆开手动调用 SDK 自带工具, 整条链路完全可复现,构建产物只有 29 KB。

1

生成图标

自己写的 PNG 编码器 + 3× 超采样抗锯齿,输出 5 种密度的 ic_launcher.png

2

aapt2 compile

res/ 下的布局、颜色、样式、图标编译成二进制 .flat 资源。

3

aapt2 link

链接资源与清单,产出基础 APK,同时生成 R.java 供 Java 引用资源 ID。

4

javac

android.jar 作为 bootclasspath 编译 Java 源码,class 版本对齐 Java 8。

5

d8

把 class 文件转换成 Android 运行时使用的 classes.dex

6

打包 + zipalign

把 dex 写进 APK(resources.arsc 必须未压缩存储),再做 4 字节对齐。

7

apksigner

用 keytool 生成的调试密钥签名,v1/v2/v3 三种签名方案全部验证通过。

JDK
Temurin 17
17.0.20.1+1
Android SDK
Platform 34
build-tools 34.0.0
产物大小
29,699 B
deflate 压缩后
Java 源码
3 个类
Board / GameView / MainActivity
$ 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 29,699 字节
  1. 在手机上打开下载好的 Game2048.apk
  2. 系统提示"未知来源"时,允许该浏览器/文件管理器安装应用。
  3. 安装完成后桌面会出现 2048 图标。
用的是调试自签名证书,仅用于测试安装,不能上架应用商店。请勿安装来源不明的 APK,这个文件你可以自己核对上面的源码重新编译。

自己重新编译

下载源码包(46 KB,含完整工程 + 构建脚本 + 已编译好的 APK):

  1. 解压后 `build.sh` 已带可执行权限。
  2. 装好 JDK 17 与 Android SDK(platform + build-tools)。
  3. 设置 JAVA_HOMEANDROID_SDK_ROOT,执行 ./build.sh
  4. 产物在 dist/Game2048.apk
引擎逻辑可以不依赖 Android 单独测试:Board.java 只用到 java.util.Random, 用普通 javac 编译后即可在 JVM 上跑 BoardTest.java