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 /
|
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
|
USER vscode
|
||||||
WORKDIR /home/user
|
WORKDIR $HOME
|
||||||
RUN wget https://raw.githubusercontent.com/c-smile/sciter-sdk/master/bin.lnx/x64/libsciter-gtk.so
|
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 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs > rustup.sh
|
||||||
RUN chmod +x 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
|
# Install Flutter
|
||||||
ENV HOME=/home/user
|
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",
|
"name": "rustdesk",
|
||||||
"build": {
|
"build": {
|
||||||
"dockerfile": "Dockerfile",
|
"dockerfile": "./Dockerfile",
|
||||||
"args": {
|
"context": "."
|
||||||
"BUILDKIT_INLINE_CACHE": "0"
|
},
|
||||||
|
"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": {
|
"customizations": {
|
||||||
"vscode": {
|
"vscode": {
|
||||||
"extensions": [
|
"extensions": [
|
||||||
@ -17,7 +20,9 @@
|
|||||||
"mutantdino.resourcemonitor",
|
"mutantdino.resourcemonitor",
|
||||||
"rust-lang.rust-analyzer",
|
"rust-lang.rust-analyzer",
|
||||||
"tamasfe.even-better-toml",
|
"tamasfe.even-better-toml",
|
||||||
"serayuzgur.crates"
|
"serayuzgur.crates",
|
||||||
|
"mhutchie.git-graph",
|
||||||
|
"eamodio.gitlens"
|
||||||
],
|
],
|
||||||
"settings": {
|
"settings": {
|
||||||
"files.watcherExclude": {
|
"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
|
#!/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
|
MODE=${MODE:=release}
|
||||||
flutter build apk ---split-per-abi --target-platform android-arm64,android-arm --release --obfuscate --split-debug-info ./split-debug-info
|
$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 appbundle --target-platform android-arm64,android-arm --release --obfuscate --split-debug-info ./split-debug-info
|
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
|
# 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/*
|
# $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
|
source: hosted
|
||||||
version: "0.1.1"
|
version: "0.1.1"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.18.0 <4.0.0"
|
dart: ">=2.18.0 <3.0.0"
|
||||||
flutter: ">=3.3.0"
|
flutter: ">=3.3.0"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user