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

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +94 -57
Dockerfile CHANGED
@@ -1,66 +1,103 @@
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"]
 
1
+ # Используем JDK 11 как базу
2
+ FROM openjdk:11-jdk-slim
3
 
4
+ # Устанавливаем зависимости
5
+ RUN apt-get update && apt-get install -y wget
 
 
 
 
 
 
 
 
 
6
 
7
  WORKDIR /build
8
 
9
+ # 1. Загружаем необходимые библиотеки (android.jar и d8)
10
+ RUN wget -q https://github.com/S-S-S-S/android-jar/raw/master/android-34/android.jar -O android.jar
11
+ RUN wget -q https://maven.aliucord.com/snapshots/com/aliucord/Aliuhook/1.1.3/Aliuhook-1.1.3.jar -O aliuhook.jar
12
+ RUN wget -q https://repo1.maven.org/maven2/com/android/tools/r8/3.3.28/r8-3.3.28.jar -O d8.jar
13
 
14
+ # 2. Создаем исходный код прямо внутри Dockerfile
15
+ RUN printf 'package b.liquidglass;\n\
16
+ \n\
17
+ import android.content.Context;\n\
18
+ import android.graphics.*;\n\
19
+ import android.graphics.drawable.Drawable;\n\
20
+ import android.view.MotionEvent;\n\
21
+ import android.view.View;\n\
22
+ import android.view.animation.OvershootInterpolator;\n\
23
+ import de.robv.android.xposed.XC_MethodHook;\n\
24
+ import de.robv.android.xposed.XposedBridge;\n\
25
+ import java.lang.reflect.Field;\n\
26
+ \n\
27
+ public class LiquidGlass {\n\
28
+ public void start() {\n\
29
+ try {\n\
30
+ Class<?> chatActivity = Class.forName("org.telegram.ui.ChatActivity");\n\
31
+ XposedBridge.hookMethod(chatActivity.getDeclaredMethod("createView", Context.class), new XC_MethodHook() {\n\
32
+ @Override\n\
33
+ protected void afterHookedMethod(MethodHookParam param) throws Throwable {\n\
34
+ final Object fragment = param.thisObject;\n\
35
+ final View root = (View) param.getResult();\n\
36
+ root.postDelayed(() -> {\n\
37
+ try {\n\
38
+ Field f = fragment.getClass().getDeclaredField("floatingButton");\n\
39
+ f.setAccessible(true);\n\
40
+ View fab = (View) f.get(fragment);\n\
41
+ if (fab != null) applyEffect(fab);\n\
42
+ } catch (Exception ignored) {}\n\
43
+ }, 200);\n\
44
+ }\n\
45
+ });\n\
46
+ } catch (Exception e) {\n\
47
+ XposedBridge.log("LiquidGlass Error: " + e.getMessage());\n\
48
+ }\n\
49
+ }\n\
50
+ \n\
51
+ private void applyEffect(View v) {\n\
52
+ // Apple Liquid Glass Look\n\
53
+ v.setBackground(new GlassDrawable());\n\
54
+ if (android.os.Build.VERSION.SDK_INT >= 31) {\n\
55
+ v.setRenderEffect(RenderEffect.createBlurEffect(25f, 25f, Shader.TileMode.CLAMP));\n\
56
+ }\n\
57
+ v.setOnTouchListener((view, ev) -> {\n\
58
+ if (ev.getAction() == MotionEvent.ACTION_DOWN) {\n\
59
+ view.animate().scaleX(0.9f).scaleY(0.9f).setDuration(100).start();\n\
60
+ } else if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_CANCEL) {\n\
61
+ view.animate().scaleX(1f).scaleY(1f).setDuration(300).setInterpolator(new OvershootInterpolator(2f)).start();\n\
62
+ }\n\
63
+ return false;\n\
64
+ });\n\
65
+ }\n\
66
+ \n\
67
+ static class GlassDrawable extends Drawable {\n\
68
+ private Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);\n\
69
+ public GlassDrawable() { p.setColor(Color.argb(140, 255, 255, 255)); }\n\
70
+ @Override\n\
71
+ public void draw(Canvas c) {\n\
72
+ RectF rf = new RectF(getBounds());\n\
73
+ float r = rf.width()/2;\n\
74
+ c.drawRoundRect(rf, r, r, p);\n\
75
+ p.setStyle(Paint.Style.STROKE);\n\
76
+ p.setStrokeWidth(2f);\n\
77
+ p.setColor(Color.argb(180, 255, 255, 255));\n\
78
+ c.drawRoundRect(rf, r, r, p);\n\
79
+ p.setStyle(Paint.Style.FILL);\n\
80
+ p.setColor(Color.argb(140, 255, 255, 255));\n\
81
+ }\n\
82
+ @Override public void setAlpha(int a) {}\n\
83
+ @Override public void setColorFilter(ColorFilter cf) {}\n\
84
+ @Override public int getOpacity() { return PixelFormat.TRANSLUCENT; }\n\
85
+ }\n\
86
+ }' > LiquidGlass.java
87
 
88
+ # 3. Компилируем в Java Class
89
+ RUN javac -cp android.jar:aliuhook.jar -d . LiquidGlass.java
90
 
91
+ # 4. Собираем в DEX
92
+ RUN java -cp d8.jar com.android.tools.r8.D8 \
93
+ --release \
94
+ --lib android.jar \
95
+ --classpath aliuhook.jar \
96
+ --output . \
97
+ b/liquidglass/LiquidGlass*.class
98
 
99
+ # Итоговый файл будет называться classes.dex. Переименуем для удобства.
100
+ RUN mv classes.dex LiquidGlass.dex
 
 
 
 
 
101
 
102
+ # При запуске контейнера выводим файл в base64 (если нет доступа к файлам, скопируй текст из лога)
103
+ CMD echo "--- START OF DEX (BASE64) ---" && base64 LiquidGlass.dex && echo "--- END OF DEX ---"