|
18 | 18 | "source": [ |
19 | 19 | "# 🚀 SelfAgent - 在 Colab 构建 Android APK\n", |
20 | 20 | "\n", |
21 | | - "## 使用步骤:\n", |
22 | | - "1. 点击菜单 **Runtime -> Run all**\n", |
23 | | - "2. 等待约 10-15 分钟\n", |
24 | | - "3. 下载生成的 APK 文件\n", |
25 | | - "\n", |
26 | | - "---" |
| 21 | + "点击 **Runtime -> Run all** 一键构建" |
27 | 22 | ] |
28 | 23 | }, |
29 | 24 | { |
30 | 25 | "cell_type": "code", |
31 | 26 | "metadata": {}, |
32 | 27 | "source": [ |
33 | | - "# ========================================\n", |
34 | | - "# 第 1 步:安装 Node.js 和依赖\n", |
35 | | - "# ========================================\n", |
| 28 | + "# 1. 安装 Node.js\n", |
36 | 29 | "!curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -\n", |
37 | 30 | "!sudo apt-get install -y nodejs\n", |
38 | | - "!node -v\n", |
39 | | - "!npm -v" |
| 31 | + "print(f\"Node: {!node -v}\")" |
40 | 32 | ], |
41 | 33 | "execution_count": null, |
42 | 34 | "outputs": [] |
|
45 | 37 | "cell_type": "code", |
46 | 38 | "metadata": {}, |
47 | 39 | "source": [ |
48 | | - "# ========================================\n", |
49 | | - "# 第 2 步:安装 Java JDK 和 Android SDK\n", |
50 | | - "# ========================================\n", |
| 40 | + "# 2. 安装 Java 和 Android SDK\n", |
51 | 41 | "!sudo apt-get install -y openjdk-17-jdk wget unzip\n", |
52 | 42 | "\n", |
53 | | - "# 设置 JAVA_HOME\n", |
54 | 43 | "import os\n", |
55 | 44 | "os.environ['JAVA_HOME'] = '/usr/lib/jvm/java-17-openjdk-amd64'\n", |
56 | 45 | "os.environ['PATH'] = os.environ['JAVA_HOME'] + '/bin:' + os.environ['PATH']\n", |
57 | 46 | "\n", |
58 | | - "# 下载 Android 命令行工具\n", |
59 | 47 | "!mkdir -p ~/android-sdk/cmdline-tools\n", |
60 | 48 | "!wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O cmdline-tools.zip\n", |
61 | 49 | "!unzip -q -o cmdline-tools.zip -d ~/android-sdk/cmdline-tools\n", |
62 | | - "!mv ~/android-sdk/cmdline-tools/cmdline-tools ~/android-sdk/cmdline-tools/latest\n", |
| 50 | + "!mv ~/android-sdk/cmdline-tools/cmdline-tools ~/android-sdk/cmdline-tools/latest 2>/dev/null || true\n", |
63 | 51 | "\n", |
64 | | - "# 设置 Android SDK 环境变量\n", |
65 | 52 | "os.environ['ANDROID_HOME'] = os.path.expanduser('~/android-sdk')\n", |
66 | 53 | "os.environ['ANDROID_SDK_ROOT'] = os.environ['ANDROID_HOME']\n", |
67 | 54 | "os.environ['PATH'] = os.environ['ANDROID_HOME'] + '/cmdline-tools/latest/bin:' + os.environ['ANDROID_HOME'] + '/platform-tools:' + os.environ['PATH']\n", |
68 | 55 | "\n", |
69 | | - "# 接受许可并安装必要组件\n", |
70 | 56 | "!yes | ~/android-sdk/cmdline-tools/latest/bin/sdkmanager --licenses\n", |
71 | | - "!~/android-sdk/cmdline-tools/latest/bin/sdkmanager \"platform-tools\" \"platforms;android-33\" \"build-tools;33.0.0\"\n", |
72 | | - "\n", |
| 57 | + "!~/android-sdk/cmdline-tools/latest/bin/sdkmanager \"platform-tools\" \"platforms;android-34\" \"build-tools;34.0.0\"\n", |
73 | 58 | "print(\"✅ Android SDK 安装完成\")" |
74 | 59 | ], |
75 | 60 | "execution_count": null, |
|
79 | 64 | "cell_type": "code", |
80 | 65 | "metadata": {}, |
81 | 66 | "source": [ |
82 | | - "# ========================================\n", |
83 | | - "# 第 3 步:克隆项目并安装依赖\n", |
84 | | - "# ========================================\n", |
85 | | - "# 替换成你的 GitHub 仓库地址\n", |
| 67 | + "# 3. 克隆项目\n", |
86 | 68 | "!git clone https://github.com/Michael-YuQ/python-calculator-android.git\n", |
87 | 69 | "%cd python-calculator-android/selfagent\n", |
88 | | - "\n", |
89 | | - "# 安装项目依赖\n", |
90 | 70 | "!npm install\n", |
91 | | - "\n", |
92 | | - "# 安装 EAS CLI\n", |
93 | | - "!npm install -g eas-cli expo-cli\n", |
94 | | - "\n", |
95 | 71 | "print(\"✅ 依赖安装完成\")" |
96 | 72 | ], |
97 | 73 | "execution_count": null, |
|
101 | 77 | "cell_type": "code", |
102 | 78 | "metadata": {}, |
103 | 79 | "source": [ |
104 | | - "# ========================================\n", |
105 | | - "# 第 4 步:生成原生 Android 项目\n", |
106 | | - "# ========================================\n", |
107 | | - "!npx expo prebuild --platform android --clean\n", |
108 | | - "\n", |
| 80 | + "# 4. 生成 Android 项目\n", |
| 81 | + "import os\n", |
| 82 | + "os.environ['CI'] = '1'\n", |
| 83 | + "!npx expo prebuild --platform android --clean --non-interactive\n", |
109 | 84 | "print(\"✅ Android 项目生成完成\")" |
110 | 85 | ], |
111 | 86 | "execution_count": null, |
|
115 | 90 | "cell_type": "code", |
116 | 91 | "metadata": {}, |
117 | 92 | "source": [ |
118 | | - "# ========================================\n", |
119 | | - "# 第 5 步:构建 APK\n", |
120 | | - "# ========================================\n", |
| 93 | + "# 5. 构建 APK\n", |
121 | 94 | "import os\n", |
122 | 95 | "os.environ['ANDROID_HOME'] = os.path.expanduser('~/android-sdk')\n", |
123 | 96 | "os.environ['ANDROID_SDK_ROOT'] = os.environ['ANDROID_HOME']\n", |
124 | 97 | "\n", |
125 | 98 | "%cd android\n", |
126 | 99 | "!chmod +x gradlew\n", |
127 | | - "!./gradlew assembleRelease --no-daemon\n", |
128 | | - "\n", |
| 100 | + "!./gradlew assembleDebug --no-daemon\n", |
129 | 101 | "print(\"✅ APK 构建完成\")" |
130 | 102 | ], |
131 | 103 | "execution_count": null, |
|
135 | 107 | "cell_type": "code", |
136 | 108 | "metadata": {}, |
137 | 109 | "source": [ |
138 | | - "# ========================================\n", |
139 | | - "# 第 6 步:下载 APK\n", |
140 | | - "# ========================================\n", |
| 110 | + "# 6. 下载 APK\n", |
141 | 111 | "from google.colab import files\n", |
142 | | - "import os\n", |
143 | | - "import shutil\n", |
144 | | - "\n", |
145 | | - "# 查找 APK 文件\n", |
146 | | - "apk_path = 'app/build/outputs/apk/release/app-release.apk'\n", |
147 | | - "debug_apk_path = 'app/build/outputs/apk/debug/app-debug.apk'\n", |
| 112 | + "import shutil, os\n", |
148 | 113 | "\n", |
| 114 | + "apk_path = 'app/build/outputs/apk/debug/app-debug.apk'\n", |
149 | 115 | "if os.path.exists(apk_path):\n", |
150 | | - " # 重命名为更友好的名称\n", |
151 | 116 | " shutil.copy(apk_path, 'SelfAgent.apk')\n", |
152 | 117 | " files.download('SelfAgent.apk')\n", |
153 | | - " print(\"✅ Release APK 已下载: SelfAgent.apk\")\n", |
154 | | - "elif os.path.exists(debug_apk_path):\n", |
155 | | - " shutil.copy(debug_apk_path, 'SelfAgent-debug.apk')\n", |
156 | | - " files.download('SelfAgent-debug.apk')\n", |
157 | | - " print(\"✅ Debug APK 已下载: SelfAgent-debug.apk\")\n", |
| 118 | + " print(\"✅ APK 已下载\")\n", |
158 | 119 | "else:\n", |
159 | | - " print(\"❌ 未找到 APK 文件\")\n", |
160 | | - " print(\"查找可用的 APK...\")\n", |
161 | | - " !find . -name \"*.apk\" -type f" |
| 120 | + " print(\"❌ 未找到 APK\")\n", |
| 121 | + " !find .. -name \"*.apk\" -type f 2>/dev/null" |
162 | 122 | ], |
163 | 123 | "execution_count": null, |
164 | 124 | "outputs": [] |
|
0 commit comments