sterepando commited on
Commit
b3085b1
·
verified ·
1 Parent(s): e3865db

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +57 -100
Dockerfile CHANGED
@@ -1,109 +1,66 @@
1
  FROM python:3.10-slim
2
 
3
- # 1. Инструменты
4
- RUN apt-get update && \
5
- apt-get install -y --no-install-recommends \
6
- curl \
7
- unzip \
8
- git \
9
- default-jdk-headless \
10
- && rm -rf /var/lib/apt/lists/*
11
 
12
- # 2. Gradio
13
- RUN pip install --no-cache-dir gradio
14
-
15
- # -----------------------------------------------------------------------------
16
- # Android SDK (Build Tools 28.0.3 - Эпоха DX)
17
- # -----------------------------------------------------------------------------
18
  ENV ANDROID_SDK_ROOT=/opt/android-sdk
19
- ENV CMDLINE_TOOLS_URL=https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
20
-
21
  RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \
22
- curl -o tools.zip ${CMDLINE_TOOLS_URL} && \
23
- unzip -q tools.zip && \
24
- mv cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest && \
25
- rm tools.zip
26
-
27
  ENV PATH=${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${PATH}
28
-
29
- # Ставим 28.0.3, чтобы получить настоящий DX
30
- RUN yes | sdkmanager --licenses >/dev/null && \
31
- sdkmanager "build-tools;28.0.3" "platforms;android-28"
32
-
33
- # -----------------------------------------------------------------------------
34
- # Сборка
35
- # -----------------------------------------------------------------------------
36
- WORKDIR /app
37
-
38
- # 1. Клонируем
39
- RUN git clone https://github.com/gudzpoz/luajava.git
40
-
41
- WORKDIR /app/luajava
42
-
43
- # 2. ЧИСТКА
44
- RUN rm -rf jpms-example example android src/test \
45
- lua51 lua52 lua53 luajit luaj jsr223 \
46
- luajava/src/main/java/party/iroiro/luajava/util/GlobalLibraryLoader.java \
47
- && find . -name "module-info.java" -delete
48
-
49
- # 3. FIX: Заглушка GlobalLibraryLoader
50
- RUN mkdir -p luajava/src/main/java/party/iroiro/luajava/util && \
51
- echo 'package party.iroiro.luajava.util;' > luajava/src/main/java/party/iroiro/luajava/util/GlobalLibraryLoader.java && \
52
- echo 'public class GlobalLibraryLoader {' >> luajava/src/main/java/party/iroiro/luajava/util/GlobalLibraryLoader.java && \
53
- echo ' public static String load(String name) { return null; }' >> luajava/src/main/java/party/iroiro/luajava/util/GlobalLibraryLoader.java && \
54
- echo ' public static void register(Class<?> c, boolean b) {}' >> luajava/src/main/java/party/iroiro/luajava/util/GlobalLibraryLoader.java && \
55
- echo '}' >> luajava/src/main/java/party/iroiro/luajava/util/GlobalLibraryLoader.java
56
-
57
- # 4. FIX: Рефакторинг LuaException/LuaError (оставляем, это хороший тон)
58
- RUN rm luajava/src/main/java/party/iroiro/luajava/LuaException.java
59
- RUN echo 'package party.iroiro.luajava;' > luajava/src/main/java/party/iroiro/luajava/LuaError.java && \
60
- echo 'public enum LuaError { OK, YIELD, RUNTIME, SYNTAX, MEMORY, GC, ERR, FILE, HANDLER, JAVA; ' >> luajava/src/main/java/party/iroiro/luajava/LuaError.java && \
61
- echo 'public int code() { return ordinal(); } }' >> luajava/src/main/java/party/iroiro/luajava/LuaError.java
62
- RUN echo 'package party.iroiro.luajava;' > luajava/src/main/java/party/iroiro/luajava/LuaException.java && \
63
- echo 'public class LuaException extends RuntimeException {' >> luajava/src/main/java/party/iroiro/luajava/LuaException.java && \
64
- echo ' public LuaException(String msg) { super(msg); }' >> luajava/src/main/java/party/iroiro/luajava/LuaException.java && \
65
- echo ' public LuaException(Throwable cause) { super(cause); }' >> luajava/src/main/java/party/iroiro/luajava/LuaException.java && \
66
- echo ' public LuaException(LuaError error, String msg) { super(error.toString() + ": " + msg); }' >> luajava/src/main/java/party/iroiro/luajava/LuaException.java && \
67
- echo '}' >> luajava/src/main/java/party/iroiro/luajava/LuaException.java
68
-
69
- # ПРИМЕНЯЕМ ФИКСЫ В КОДЕ
70
- RUN find . -name "*.java" -exec sed -i 's/LuaException\.LuaError/LuaError/g' {} +
71
- RUN find . -name "*.java" -exec sed -i '/^package /a import party.iroiro.luajava.LuaError;' {} +
72
-
73
- # 5. Чистим аннотации
74
- RUN find . -name "*.java" -exec sed -i 's/@NotNull//g' {} + && \
75
- find . -name "*.java" -exec sed -i 's/@Nullable//g' {} + && \
76
- find . -name "*.java" -exec sed -i '/import org.jetbrains.annotations/d' {} + && \
77
- find . -name "*.java" -exec sed -i '/import party.iroiro.luajava.LuaException.LuaError;/d' {} +
78
-
79
- # 6. Компиляция
80
- RUN mkdir classes
81
- RUN javac -source 1.8 -target 1.8 -d classes $(find . -name "*.java")
82
-
83
- # 7. Сборка DEX через DX (Legacy)
84
- # dx гораздо надежнее для таких задач
85
- RUN ${ANDROID_SDK_ROOT}/build-tools/28.0.3/dx \
86
- --dex --output=classes.dex \
87
- classes && \
88
- mv classes.dex /app/luajava_wrapper.dex
89
-
90
- WORKDIR /app
91
-
92
- # -----------------------------------------------------------------------------
93
- # Запуск
94
- # -----------------------------------------------------------------------------
95
- RUN echo 'import gradio as gr' > app.py && \
96
- echo 'import os' >> app.py && \
97
- echo '' >> app.py && \
98
- echo 'file_path = "/app/luajava_wrapper.dex"' >> app.py && \
99
- echo '' >> app.py && \
100
- echo 'with gr.Blocks() as demo:' >> app.py && \
101
- echo ' gr.Markdown("# Download LuaJava DEX")' >> app.py && \
102
- echo ' gr.Markdown("Compilation SUCCESS! (Built with Legacy DX)")' >> app.py && \
103
- echo ' gr.File(value=file_path, label="luajava_wrapper.dex", interactive=False)' >> app.py && \
104
- echo '' >> app.py && \
105
- echo 'demo.launch(server_name="0.0.0.0", server_port=7860)' >> app.py
106
 
107
  EXPOSE 7860
108
-
109
  CMD ["python3", "app.py"]
 
1
  FROM python:3.10-slim
2
 
3
+ # 1. Устанавливаем JDK и инструменты
4
+ RUN apt-get update && apt-get install -y --no-install-recommends \
5
+ curl unzip git default-jdk-headless && rm -rf /var/lib/apt/lists/*
 
 
 
 
 
6
 
7
+ # 2. Настройка Android SDK (для d8)
 
 
 
 
 
8
  ENV ANDROID_SDK_ROOT=/opt/android-sdk
 
 
9
  RUN mkdir -p ${ANDROID_SDK_ROOT}/cmdline-tools && \
10
+ curl -o tools.zip https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip && \
11
+ unzip -q tools.zip && mv cmdline-tools ${ANDROID_SDK_ROOT}/cmdline-tools/latest && rm tools.zip
 
 
 
12
  ENV PATH=${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin:${PATH}
13
+ RUN yes | sdkmanager "build-tools;34.0.0" "platforms;android-34"
14
+
15
+ WORKDIR /build
16
+
17
+ # 3. Скачиваем библиотеки LuaJava
18
+ RUN curl -L -o luajava.jar https://repo1.maven.org/maven2/party/iroiro/luajava/luajava/4.0.2/luajava-4.0.2.jar
19
+ RUN curl -L -o lua54.jar https://repo1.maven.org/maven2/party/iroiro/luajava/lua54/4.0.2/lua54-4.0.2.jar
20
+
21
+ # 4. Создаем наш Java-мост (PizdunBridge)
22
+ RUN mkdir -p org/mandre/lua
23
+ RUN echo 'package org.mandre.lua; \
24
+ import party.iroiro.luajava.lua54.Lua54; \
25
+ import android.util.Log; \
26
+ public class MandreLuaBridge { \
27
+ public static Lua54 L; \
28
+ public static boolean init(String libLua, String libJni) { \
29
+ try { \
30
+ System.load(libLua); \
31
+ System.load(libJni); \
32
+ L = new Lua54(); \
33
+ L.openLibraries(); \
34
+ Log.i("MandreLua", "DEX Bridge: All libraries linked successfully!"); \
35
+ return true; \
36
+ } catch (Throwable e) { \
37
+ Log.e("MandreLua", "DEX Bridge Error: " + e.getMessage()); \
38
+ return false; \
39
+ } \
40
+ } \
41
+ public static void run(String code) { \
42
+ try { if (L != null) L.run(code); } \
43
+ catch (Throwable e) { Log.e("MandreLua", "Lua Runtime Error: " + e.getMessage()); } \
44
+ } \
45
+ }' > org/mandre/lua/MandreLuaBridge.java
46
+
47
+ # 5. Компилируем
48
+ RUN javac -cp "luajava.jar:lua54.jar:$(find /opt/android-sdk/platforms/ -name android.jar | head -n 1)" org/mandre/lua/MandreLuaBridge.java
49
+
50
+ # 6. Собираем всё в один жирный DEX
51
+ RUN ${ANDROID_SDK_ROOT}/build-tools/34.0.0/d8 \
52
+ --lib $(find /opt/android-sdk/platforms/ -name android.jar | head -n 1) \
53
+ --release --min-api 26 \
54
+ --output mandre_lua.dex \
55
+ luajava.jar lua54.jar org/mandre/lua/MandreLuaBridge.class
56
+
57
+ # 7. Финал
58
+ RUN pip install gradio
59
+ RUN echo "import gradio as gr; \
60
+ with gr.Blocks() as demo: \
61
+ gr.Markdown('# Download your mandre_lua.dex'); \
62
+ gr.File(value='mandre_lua.dex'); \
63
+ demo.launch(server_name='0.0.0.0', server_port=7860)" > app.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
 
65
  EXPOSE 7860
 
66
  CMD ["python3", "app.py"]