# --- START OF FILE Dockerfile --- FROM golang:latest # Обновление и зависимости RUN apt-get update && apt-get install -y wget unzip git build-essential python3 # Настройка Android NDK ENV ANDROID_NDK_HOME /opt/android-ndk ENV ANDROID_NDK_VERSION r25c RUN wget -q https://dl.google.com/android/repository/android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \ unzip -q android-ndk-${ANDROID_NDK_VERSION}-linux.zip && \ mv android-ndk-${ANDROID_NDK_VERSION} /opt/android-ndk && \ rm android-ndk-${ANDROID_NDK_VERSION}-linux.zip ENV PATH ${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH WORKDIR /app # Настройка Go ENV GOTOOLCHAIN=auto RUN go mod init vless-client # Исправленный код main.go RUN cat < main.go package main import "C" import ( "encoding/base64" "strings" "sync" "github.com/xtls/xray-core/core" "github.com/xtls/xray-core/infra/conf/serial" _ "github.com/xtls/xray-core/main/distro/all" ) var ( instance *core.Instance mu sync.Mutex ) //export StartCore func StartCore(configContent *C.char) *C.char { mu.Lock() defer mu.Unlock() if instance != nil { return C.CString("Core already running") } configStr := C.GoString(configContent) // 1. Декодируем JSON в структуру conf.Config confConfig, err := serial.DecodeJSONConfig(strings.NewReader(configStr)) if err != nil { return C.CString("Config parse error: " + err.Error()) } // 2. !!! ВАЖНО !!! Конвертируем conf.Config в core.Config coreConfig, err := confConfig.Build() if err != nil { return C.CString("Config build error: " + err.Error()) } // 3. Создаем инстанс ядра coreInstance, err := core.New(coreConfig) if err != nil { return C.CString("Core create error: " + err.Error()) } if err := coreInstance.Start(); err != nil { return C.CString("Core start error: " + err.Error()) } instance = coreInstance return C.CString("") } //export StopCore func StopCore() { mu.Lock() defer mu.Unlock() if instance != nil { instance.Close() instance = nil } } //export Base64Decode func Base64Decode(str *C.char) *C.char { data := C.GoString(str) if l := len(data) % 4; l > 0 { data += strings.Repeat("=", 4-l) } decoded, err := base64.StdEncoding.DecodeString(data) if err != nil { decoded, err = base64.URLEncoding.DecodeString(data) } if err != nil { return C.CString("") } return C.CString(string(decoded)) } func main() {} EOF # Зависимости RUN go get -u github.com/xtls/xray-core@latest RUN go mod tidy # Компиляция RUN CGO_ENABLED=1 \ GOOS=android \ GOARCH=arm64 \ CC=aarch64-linux-android33-clang \ go build -buildmode=c-shared -o libvless.so main.go # Выдача файла RUN mkdir /output && mv libvless.so /output/ WORKDIR /output CMD ["python3", "-m", "http.server", "7860"] # --- END OF FILE Dockerfile ---