Skip to content

SailfishOS-sdm660/SailfishOS_Huong_Dan_Build_SailfishOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 

Repository files navigation

Cách Build SailfishOS

Bắt Đầu

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

Bước 1:

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ước 2

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ả  😅😅😅

Bước 3

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

Bước 4

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ước 5

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

Hướng Dẫn Chuyển Đổi User

Ví Dụ Bạn Đang Ở habuild để Chuyển Đổi Về platform_sdk Bạn Nhập exit để sang habuild bạn nhập habuild

Bước 6

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

Info :

Nếu Có Bất Kỳ Lỗi Nào : nobi nobita

About

Cách Build SailfishOS - Whyred

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published