Merge pull request #3303 from akhildevelops/feature/devcontainer
improved devcontainer with Android build support
This commit is contained in:
commit
d30ea54ff7
@ -1,19 +1,50 @@
|
||||
FROM debian
|
||||
FROM mcr.microsoft.com/devcontainers/base:ubuntu-22.04
|
||||
ENV HOME=/home/vscode
|
||||
ENV WORKDIR=$HOME/rustdesk
|
||||
|
||||
WORKDIR $HOME
|
||||
RUN sudo apt update -y && sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake unzip zip sudo libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
|
||||
WORKDIR /
|
||||
|
||||
RUN git clone https://github.com/microsoft/vcpkg
|
||||
WORKDIR vcpkg
|
||||
RUN git checkout 134505003bb46e20fbace51ccfb69243fbbc5f82
|
||||
RUN /vcpkg/bootstrap-vcpkg.sh -disableMetrics
|
||||
ENV VCPKG_ROOT=/vcpkg
|
||||
RUN $VCPKG_ROOT/vcpkg --disable-metrics install libvpx libyuv opus
|
||||
|
||||
WORKDIR /
|
||||
RUN apt update -y && apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev cmake unzip zip sudo libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
|
||||
RUN wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/dep.tar.gz && tar xzf dep.tar.gz
|
||||
|
||||
RUN git clone https://github.com/microsoft/vcpkg && cd vcpkg && git checkout 134505003bb46e20fbace51ccfb69243fbbc5f82
|
||||
RUN /vcpkg/bootstrap-vcpkg.sh -disableMetrics
|
||||
RUN /vcpkg/vcpkg --disable-metrics install libvpx libyuv opus
|
||||
|
||||
RUN groupadd -r user && useradd -r -g user user --home /home/user && mkdir -p /home/user && chown user /home/user && echo "user ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/user
|
||||
WORKDIR /home/user
|
||||
USER vscode
|
||||
WORKDIR $HOME
|
||||
RUN wget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so
|
||||
USER user
|
||||
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh
|
||||
RUN chmod +x rustup.sh
|
||||
RUN ./rustup.sh -y
|
||||
RUN $HOME/rustup.sh -y
|
||||
RUN $HOME/.cargo/bin/rustup target add aarch64-linux-android
|
||||
RUN $HOME/.cargo/bin/cargo install cargo-ndk
|
||||
|
||||
USER root
|
||||
ENV HOME=/home/user
|
||||
# Install Flutter
|
||||
RUN wget https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_3.7.3-stable.tar.xz
|
||||
RUN tar xf flutter_linux_3.7.3-stable.tar.xz && rm flutter_linux_3.7.3-stable.tar.xz
|
||||
ENV PATH="$PATH:$HOME/flutter/bin"
|
||||
RUN dart pub global activate ffigen 5.0.1
|
||||
|
||||
|
||||
# Install packages
|
||||
RUN sudo apt-get install -y libclang-dev
|
||||
RUN sudo apt install -y gcc-multilib
|
||||
|
||||
WORKDIR $WORKDIR
|
||||
ENV ANDROID_NDK_HOME=/opt/android/ndk/22.1.7171670
|
||||
|
||||
# Somehow try to automate flutter pub get
|
||||
# https://rustdesk.com/docs/en/dev/build/android/
|
||||
# Put below steps in entrypoint.sh
|
||||
# cd flutter
|
||||
# wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/so.tar.gz
|
||||
# tar xzf so.tar.gz
|
||||
|
||||
# own /opt/android
|
||||
|
75
.devcontainer/build.sh
Executable file
75
.devcontainer/build.sh
Executable file
@ -0,0 +1,75 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
MODE=${1:---debug}
|
||||
TYPE=${2:-linux}
|
||||
MODE=${MODE/*-/}
|
||||
|
||||
|
||||
build(){
|
||||
pwd
|
||||
$WORKDIR/entrypoint $1
|
||||
}
|
||||
|
||||
build_arm64(){
|
||||
CWD=$(pwd)
|
||||
cd $WORKDIR/flutter
|
||||
flutter pub get
|
||||
cd $WORKDIR
|
||||
$WORKDIR/flutter/ndk_arm64.sh
|
||||
cp $WORKDIR/target/aarch64-linux-android/release/liblibrustdesk.so $WORKDIR/flutter/android/app/src/main/jniLibs/arm64-v8a/librustdesk.so
|
||||
cd $CWD
|
||||
}
|
||||
|
||||
build_apk(){
|
||||
cd $WORKDIR/flutter
|
||||
MODE=$1 $WORKDIR/flutter/build_android.sh
|
||||
cd $WORKDIR
|
||||
}
|
||||
|
||||
key_gen(){
|
||||
if [ ! -f $WORKDIR/flutter/android/key.properties ]
|
||||
then
|
||||
if [ ! -f $HOME/upload-keystore.jks ]
|
||||
then
|
||||
$WORKDIR/.devcontainer/setup.sh key
|
||||
fi
|
||||
read -r -p "enter the password used to generate $HOME/upload-keystore.jks\n" password
|
||||
echo -e "storePassword=${password}\nkeyPassword=${password}\nkeyAlias=upload\nstoreFile=$HOME/upload-keystore.jks" > $WORKDIR/flutter/android/key.properties
|
||||
else
|
||||
echo "Believing storeFile is created ref: $WORKDIR/flutter/android/key.properties"
|
||||
fi
|
||||
}
|
||||
|
||||
android_build(){
|
||||
if [ ! -d $WORKDIR/flutter/android/app/src/main/jniLibs/arm64-v8a ]
|
||||
then
|
||||
$WORKDIR/.devcontainer/setup.sh android
|
||||
fi
|
||||
build_arm64
|
||||
case $1 in
|
||||
debug)
|
||||
build_apk debug
|
||||
;;
|
||||
release)
|
||||
key_gen
|
||||
build_apk release
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
case "$MODE:$TYPE" in
|
||||
"debug:linux")
|
||||
build
|
||||
;;
|
||||
"release:linux")
|
||||
build --release
|
||||
;;
|
||||
"debug:android")
|
||||
android_build debug
|
||||
;;
|
||||
"release:android")
|
||||
android_build release
|
||||
;;
|
||||
esac
|
@ -1,15 +1,18 @@
|
||||
{
|
||||
"name": "rustdesk",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile",
|
||||
"args": {
|
||||
"BUILDKIT_INLINE_CACHE": "0"
|
||||
"dockerfile": "./Dockerfile",
|
||||
"context": "."
|
||||
},
|
||||
"workspaceMount": "source=${localWorkspaceFolder},target=/home/vscode/rustdesk,type=bind,consistency=cache",
|
||||
"workspaceFolder": "/home/vscode/rustdesk",
|
||||
"postStartCommand": ".devcontainer/build.sh",
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/java:1": {},
|
||||
"ghcr.io/akhildevelops/devcontainer-features/android-cli:latest": {
|
||||
"PACKAGES": "platform-tools,ndk;22.1.7171670"
|
||||
}
|
||||
},
|
||||
"workspaceMount": "source=${localWorkspaceFolder},target=/home/user/rustdesk,type=bind,consistency=cache",
|
||||
"workspaceFolder": "/home/user/rustdesk",
|
||||
"postStartCommand": "./entrypoint",
|
||||
"remoteUser": "user",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": [
|
||||
@ -17,7 +20,9 @@
|
||||
"mutantdino.resourcemonitor",
|
||||
"rust-lang.rust-analyzer",
|
||||
"tamasfe.even-better-toml",
|
||||
"serayuzgur.crates"
|
||||
"serayuzgur.crates",
|
||||
"mhutchie.git-graph",
|
||||
"eamodio.gitlens"
|
||||
],
|
||||
"settings": {
|
||||
"files.watcherExclude": {
|
||||
|
23
.devcontainer/setup.sh
Executable file
23
.devcontainer/setup.sh
Executable file
@ -0,0 +1,23 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
case $1 in
|
||||
android)
|
||||
# install deps
|
||||
cd $WORKDIR/flutter
|
||||
flutter pub get
|
||||
wget https://github.com/rustdesk/doc.rustdesk.com/releases/download/console/so.tar.gz
|
||||
tar xzf so.tar.gz
|
||||
rm so.tar.gz
|
||||
sudo chown -R $(whoami) $ANDROID_HOME
|
||||
echo "Setup is Done."
|
||||
;;
|
||||
linux)
|
||||
echo "Linux Setup"
|
||||
;;
|
||||
key)
|
||||
echo -e "\n$HOME/upload-keystore.jks is not created.\nLet's create it.\nRemember the password you enter in keytool!"
|
||||
keytool -genkey -v -keystore $HOME/upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
|
||||
;;
|
||||
esac
|
||||
|
||||
|
@ -1,8 +1,10 @@
|
||||
#!/usr/bin/env bash
|
||||
$ANDROID_NDK/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-strip android/app/src/main/jniLibs/arm64-v8a/*
|
||||
flutter build apk --target-platform android-arm64,android-arm --release --obfuscate --split-debug-info ./split-debug-info
|
||||
flutter build apk ---split-per-abi --target-platform android-arm64,android-arm --release --obfuscate --split-debug-info ./split-debug-info
|
||||
flutter build appbundle --target-platform android-arm64,android-arm --release --obfuscate --split-debug-info ./split-debug-info
|
||||
|
||||
MODE=${MODE:=release}
|
||||
$ANDROID_NDK_HOME/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip android/app/src/main/jniLibs/arm64-v8a/*
|
||||
flutter build apk --target-platform android-arm64,android-arm --${MODE} --obfuscate --split-debug-info ./split-debug-info
|
||||
flutter build apk --split-per-abi --target-platform android-arm64,android-arm --${MODE} --obfuscate --split-debug-info ./split-debug-info
|
||||
flutter build appbundle --target-platform android-arm64,android-arm --${MODE} --obfuscate --split-debug-info ./split-debug-info
|
||||
|
||||
# build in linux
|
||||
# $ANDROID_NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip android/app/src/main/jniLibs/arm64-v8a/*
|
||||
|
@ -1547,5 +1547,5 @@ packages:
|
||||
source: hosted
|
||||
version: "0.1.1"
|
||||
sdks:
|
||||
dart: ">=2.18.0 <4.0.0"
|
||||
dart: ">=2.18.0 <3.0.0"
|
||||
flutter: ">=3.3.0"
|
||||
|
Loading…
x
Reference in New Issue
Block a user