Tước Hết Bạn Cần Tạo Một User Khác / Cái Này Tùy Ý ( Bỏ Qua Cũng Đc )
sudo useradd build -s /bin/bash -m -G wheel -c "SFOS Builder"
sudo passwd build
su - build
Các Packages Cần Thiết :
sudo dpkg --add-architecture i386 && sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install -y git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip bc repo nano && sudo apt-get install -y git gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 x11proto-core-dev libx11-dev libgl1-mesa-dev libxml2-utils xsltproc unzip bc repo nano libssl-dev && sudo apt-get install -y openjdk-8-jdk android-tools-adb bc bison build-essential curl flex g++-multilib gcc-multilib gnupg gperf imagemagick lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc yasm zip zlib1g-dev && sudo apt-get install -y build-essential kernel-package libncurses5-dev bzip2 android-liblog android-libbacktrace libtinyxml2-6 android-libutils android-sdk-build-tools git-lfs libncurses5:i386 libncurses5 ccache build-essential p7zip-full git libgtk2.0-dev chrpath libncurses5-dev libdbus-1-dev ruby libgl1-mesa-dev "^libxcb.*" libx11-xcb-dev libxrender-dev libxi-dev flex bison gperf patchelf
Bạn Cần add Những Thứ Này Vào ~/.bashrc
# SailfishOS
export HISTFILE="$HOME/.bash_history"
export HISTSIZE=1000
export HISTCONTROL=ignoreboth
export PATH=$HOME/bin:$PATH
export PLATFORM_SDK_ROOT="/srv/mer"
export ANDROID_ROOT="$HOME/Sailfish/src"
shopt -s histappend
alias sfossdk="$PLATFORM_SDK_ROOT/sdks/sfossdk/mer-sdk-chroot"
alias sfos_sdk="sfossdk"
alias platform_sdk="sfossdk"
alias plat_sdk="sfossdk"
alias platformsdk="sfossdk"
alias platsdk="sfossdk"
Tiếp Theo Bạn Cần Tạo File .hadk.env ở ~/ và dán nội dung này vào :
export PLATFORM_SDK_ROOT="/srv/mer"
export ANDROID_ROOT="$HOME/Sailfish/src"
export VENDOR="xiaomi"
export DEVICE="whyred"
export PORT_ARCH="armv7hl"
# If not running interactively, don't do anything else
[[ $- != *i* ]] && return
echo "$ export LANG=C LC_ALL=POSIX"
export LANG=C LC_ALL=POSIX
echo "$ cd \$ANDROID_ROOT"
cd $ANDROID_ROOT
Tiếp Theo Là File .mersdk.profile
builder_script="rpm/dhd/helpers/build_packages.sh"
[ -d /etc/bash_completion.d ] && for i in /etc/bash_completion.d/*; do . $i; done
export PS1="PLATFORM_SDK $PS1"
export HISTFILE="$HOME/.bash_history-sfossdk"
export RELEASE=`cat /etc/os-release | grep VERSION_ID | cut -d"=" -f2`
alias host="exit"
alias ha_build="ubu-chroot -r $PLATFORM_SDK_ROOT/sdks/ubuntu"
alias habuild="ha_build"
alias build_all_pkgs="build_all_packages"
alias build_all="build_all_packages"
alias bp="build_packages"
alias build_pkgs="build_packages"
alias build_droid_hal="build_packages -d"
alias build_hal="build_droid_hal"
alias build_device_configs="build_packages -c"
alias build_configs="build_device_configs"
alias build_cfgs="build_device_configs"
alias do_mic_build="run_mic_build"
alias mic_build="run_mic_build"
alias build_sfos="run_mic_build"
alias build_sailfish="run_mic_build"
alias build_img="run_mic_build"
alias build_image="run_mic_build"
alias reset_droid_repos="sudo rm -rf $ANDROID_ROOT/rpm/ $ANDROID_ROOT/hybris/droid-{configs,hal-version-$DEVICE}* $ANDROID_ROOT/droid-hal-$DEVICE.log $ANDROID_ROOT/.last_device; unset last_device; choose_target"
alias reset_repos="reset_droid_repos"
alias choose_device="choose_target"
alias switch_target="choose_target"
alias switch_device="choose_target"
hadk() {
echo
source $HOME/.hadk.env
echo "Env setup for $DEVICE"
}
clone_src() {
path="$ANDROID_ROOT/$3/"
mkdir -p "$path"
git clone --recurse -b $2 https://github.com/SailfishOS-Whyred-sdm660/$1 "$path" &> /dev/null
}
update_src() {
path="$ANDROID_ROOT/$1/"
[ ! -d "$path" ] && exit 1
# TODO: Fix updating properly; force all unless local changes detected?
cd "$path" && git fetch &> /dev/null && git pull --recurse-submodules &> /dev/null
}
choose_target() {
echo -e "\nWhich hybris-15.1 device would you like to build for?"
echo -e "\n 1. whyred (Xiaomi Redmi Note 5 Pro)"
echo -e " 2. dumpling (OnePlus 5T)\n"
read -p "Choice: (1/2) " target
# Setup variables
device="whyred"
[ "$target" = "2" ] && device="dumpling"
branch="hybris-15.1"
[ "$device" = "dumpling" ] && branch="dumpling-15.1"
[ -f "$ANDROID_ROOT/.last_device" ] && last_device="$(<$ANDROID_ROOT/.last_device)"
if [ "$device" != "$last_device" ]; then
if [ ! -z "$last_device" ]; then
echo "WARNING: All current changes in SFOS local droid repos WILL be discarded if you continue!"
read -p "Would you like to continue? (y/N) " ans
ans=`echo "$ans" | xargs | tr "[y]" "[Y]"`
if [ "$ans" != "Y" ]; then
hadk
return 1
fi
echo "Discarded local droid HAL & configs for $last_device!"
rm -rf $ANDROID_ROOT/rpm* $ANDROID_ROOT/hybris/droid-{configs,hal-version-}*
fi
printf "Cloning droid HAL & configs for $device..."
clone_src "droid-hal-whyred" "$branch" "rpm" &&
clone_src "droid-config-whyred" "$branch" "hybris/droid-configs" &&
clone_src "droid-hal-version-whyred" "$branch" "hybris/droid-hal-version-$device"
(( $? == 0 )) && echo " done!" || echo " fail! exit code: $?"
echo "$device" > "$ANDROID_ROOT/.last_device"
else
printf "Updating droid HAL & configs for $device..."
update_src "rpm" &&
update_src "hybris/droid-configs" &&
update_src "hybris/droid-hal-version-$device"
(( $? == 0 )) && echo " done!" || echo " fail! exit code: $?"
fi
sed "s/DEVICE=.*/DEVICE=\"$device\"/" -i $HOME/.hadk.env
hadk
}
build_all_packages() {
cd $ANDROID_ROOT
echo "$ $builder_script $@"
$builder_script $@
}
build_packages() {
cd $ANDROID_ROOT
if (( $# == 0 )); then
build_packages -c
return
fi
echo "$ $builder_script $@"
$builder_script $@ || return
}
run_mic_build() {
if [ -z $UPDATES_CHECKED ]; then
# Function to compare version strings
vercomp() {
[ "$1" = "$2" ] && return 0 # =
[ "$1" = `printf "$1\n$2" | sort -t '.' -k 1,1 -k 2,2 -k 3,3 -k 4,4 -g | head -1` ] && return 1 # <
return 2 # >
}
# Fetch latest public release version
local tmp=`curl -s https://en.wikipedia.org/wiki/Sailfish_OS | grep -B 2 "^<td>Public release$" | grep "^<td>v" | tail -1` # e.g. "<td>v3.0.3.10</td>"
tmp=${tmp#*v} # e.g. "3.0.3.10</td>"
local LATEST_RELEASE=${tmp::${#tmp}-5} # e.g. "3.0.3.10"
local LATEST_TOOLING=`echo $LATEST_RELEASE | cut --complement -d"." -f4-` # e.g. "3.0.3"
local CURRENT_TOOLING=`echo $RELEASE | cut --complement -d"." -f4-` # e.g. "3.1.0"
# Can we build latest w/ current tooling (e.g. '3.0.3' vs '3.1.0')
vercomp "$LATEST_TOOLING" "$CURRENT_TOOLING"
local res=$?
if (( $res == 0 )); then
# TODO Check if installed tooling is latest available from http://releases.sailfishos.org/sdk/targets/
# Only use "latest version" if it's actually newer
vercomp "$LATEST_RELEASE" "$RELEASE"
res=$?
if (( $res == 2 )); then
RELEASE="$LATEST_RELEASE"
echo ">> Targeting latest public release $RELEASE."
# Out-of-date version history => Use local tooling
else
echo ">> Targeting installed tooling release $RELEASE."
fi
# Out-of-date version history => Use local tooling
elif (( $tmp == 1 )); then
echo ">> Targeting installed tooling release $RELEASE."
# Can't build w/ current tooling => Check if tooling updates available
else
curl -s http://releases.sailfishos.org/sdk/targets/ | fgrep $LATEST_TOOLING &>/dev/null && echo ">> Build target updates available ($CURRENT_TOOLING.x => $LATEST_TOOLING.x)! Resources: http://releases.sailfishos.org/sdk/targets/ https://git.io/fjM1D"
echo ">> Currently targeting installed tooling release $RELEASE."
fi
UPDATES_CHECKED=1
fi
# TODO: Add support to build image using OBS KS (devel/testing), do local fixups etc
build_packages -i
}
choose_target
Tiếp Theo Là File .mersdkubu.profile :
hadk() { source $HOME/.hadk.env; echo "Env setup for $DEVICE"; }
export PS1="HABUILD_SDK [\${DEVICE}] $PS1"
hadk
sdk_prompt() { echo "$1: enter PLATFORM_SDK first by pressing CTRL + D & try again!"; }
alias zypper="sdk_prompt zypper"
alias sb2="sdk_prompt sb2"
alias sfossdk="exit"
alias sfos_sdk="exit"
alias platform_sdk="exit"
alias plat_sdk="exit"
alias platformsdk="exit"
alias platsdk="exit"
export HISTFILE="$HOME/.bash_history-habuild"
if [ -f build/envsetup.sh ]; then
echo "$ source build/envsetup.sh"
source build/envsetup.sh
echo "$ breakfast $DEVICE"
breakfast $DEVICE
echo "$ export USE_CCACHE=1"
export USE_CCACHE=1
fi
Bạn Tạo curl Bin Google
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod +x ~/bin/repo
Tiếp Theo Là Tạo Môi Trường SDK Nền Tản SUSE Linux :
exec bash
sudo mkdir -p $PLATFORM_SDK_ROOT/{targets,toolings,sdks/sfossdk}
sudo ln -s /srv/mer/sdks/sfossdk/srv/mer/sdks/ubuntu/ /srv/mer/sdks/ubuntu
cd && curl -k -O http://releases.sailfishos.org/sdk/installers/latest/Jolla-latest-SailfishOS_Platform_SDK_Chroot-i486.tar.bz2
sudo tar --numeric-owner -p -xjf Jolla-latest-SailfishOS_Platform_SDK_Chroot-i486.tar.bz2 -C $PLATFORM_SDK_ROOT/sdks/sfossdk
mkdir -p $ANDROID_ROOT
sfossdk
Tiếp Theo Là Chọn Thiết Bị :
Which hybris-15.1 device would you like to build for?
1. whyred (Xiaomi Redmi Note 5 Pro)
2. dumpling (OnePlus 5T)
Choice: (1/2) 1
Cloning droid HAL & configs for whyred... done!
Env setup for whyred
Cài Đặt Tool HADK :
sudo zypper ref -f
sudo zypper --non-interactive in bc pigz atruncate android-tools-hadk
Nếu Bị Lỗi Này adaptation0 Thì Đó Là Chuyện Bình Thường / Không Bị Cũng Không Sao Cả 😅😅😅
Thêm Mục Tiêu Để Build SailfishOS
cd && sdk-manage target install $VENDOR-$DEVICE-$PORT_ARCH http://releases.sailfishos.org/sdk/targets/Sailfish_OS-$RELEASE-Sailfish_SDK_Target-$PORT_ARCH.tar.7z --tooling SailfishOS-$RELEASE --tooling-url http://releases.sailfishos.org/sdk/targets/Sailfish_OS-$RELEASE-Sailfish_SDK_Tooling-i486.tar.7z
Để Kiểm Tra Xem Đã Ổn Chưa :
sdk-assistant list
Kết quả Là :
SailfishOS-3.2.1.20
|-xiaomi-whyred-armv7hl
Là Ổn Rồi Đấy
Cài Đặt SDK HABUILD :
TARBALL=ubuntu-trusty-20180613-android-rootfs.tar.bz2
cd && curl -O https://releases.sailfishos.org/ubu/$TARBALL
UBUNTU_CHROOT=$PLATFORM_SDK_ROOT/sdks/ubuntu
sudo mkdir -p $UBUNTU_CHROOT
sudo tar --numeric-owner -xjf $TARBALL -C $UBUNTU_CHROOT
sudo sed "s/\tlocalhost/\t$(</parentroot/etc/hostname)/g" -i $UBUNTU_CHROOT/etc/hosts
cd $ANDROID_ROOT
habuild
Thiết Lập Thêm Môi Trường Git :
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
Bạn Có Thể Xoá File Cũ Để Nhẹ Bớt Ổ Cứng :
cd && rm Jolla-latest-SailfishOS_Platform_SDK_Chroot-i486.tar.bz2 ubuntu-*-android-rootfs.tar.bz2
Bắt Đầu Sync :
repo init -u https://github.com/SailfishOS-sdm660/SailfishOS_manifest.git -b android-8.1
repo sync -c -j$(nproc --all) --force-sync --no-clone-bundle --no-tags
Ví Dụ Bạn Đang Ở habuild để Chuyển Đổi Về platform_sdk Bạn Nhập exit để sang habuild bạn nhập habuild
Build Hal : / user habuild
source build/envsetup.sh && breakfast $DEVICE && export USE_CCACHE=1
mka hybris-hal
Nếu Đây Là Lần Đầu Bạn Build Với Source Này . Bạn Cần Thứ Này Đấy
echo "MINIMEDIA_AUDIOPOLICYSERVICE_ENABLE := 1" > external/droidmedia/env.mk
mka droidmedia audioflingerglue
Tiếp Theo Là Build Hybris Boot ( Kernel )
mka hybris-boot
Build SailfishOS Và rootfs Của SailfishOS : (P/S Build Lỗi Nhiều Kinh 😂😂😂)
build_packages
Nếu Có Bất Kỳ Lỗi Nào : nobi nobita