這幾天為了在Ubuntu-16.04 下載 android source 和編譯 android,查了很多網站也花很多時間,所以做個筆記記錄一下。
------------------------------------------------------------
------------------------------------------------------------
更新套件庫資訊
sudo apt-get update
install git
sudo apt install git
Installing Repo
install git
sudo apt install git
Installing Repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
下載android source
建立一個放source的目錄然後進去目錄下,名字可以自訂。
mkdir android
cd android
設定名字和信箱
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
執行repo init更新URL的目錄資料,執行完會顯示很多的版本名稱。
repo init -u https://android.googlesource.com/platform/manifest
repo init -u https://android.googlesource.com/platform/manifest
選要建立的版本
repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
輸入repo sync就會開始下載android source了,檔案很大超過20GB,所以要等蠻久的。
repo sync
安裝好後還不能編譯,還需要安裝jdk和很多東西
先分別執行這兩行,將java套件放到套件來源,第一行是oracle版本,第二行是openjdk版本的java
sudo add-apt-repository ppa:webupd8team/java
sudo add-apt-repository ppa:openjdk-r/ppa
更新套件庫資訊
搜尋oracle-java或openjdk
apt-cache search oracle-java
sudo apt-get update
搜尋oracle-java或openjdk
apt-cache search oracle-java
會列出很多版本
oracle-jdk7-installer - Oracle JDK7 Installer meta package
oracle-java7-installer - Oracle Java(TM) Development Kit (JDK) 7
oracle-java6-installer - Oracle Java(TM) Development Kit (JDK) 6
oracle-java8-installer - Oracle Java(TM) Development Kit (JDK) 8
oracle-java7-set-default - Set Oracle JDK 7 as default Java
oracle-java6-set-default - Set Oracle JDK 6 as default Java
oracle-java8-set-default - Set Oracle JDK 8 as default Java
oracle-java7-unlimited-jce-policy - Unlimited JCE Policy for Oracle Java 7
oracle-java8-unlimited-jce-policy - Unlimited JCE Policy for Oracle Java 8
oracle-java9-installer - Oracle Java(TM) Development Kit (JDK) 9
oracle-java9-set-default - Set Oracle JDK 9 as default Java
oracle-java9-unlimited-jce-policy - Unlimited JCE Policy for Oracle Java 9
要編譯android的話要選擇對應的jdk版本,
android_4.0是oracle-java6-installer - Oracle Java(TM) Development Kit (JDK) 6請輸入
sudo apt-get install oracle-java6-installer
android_6.0是OpenJDK 7 請輸入
sudo apt-get install openjdk-7-jdk
android_4.0是oracle-java6-installer - Oracle Java(TM) Development Kit (JDK) 6請輸入
sudo apt-get install oracle-java6-installer
android_6.0是OpenJDK 7 請輸入
sudo apt-get install openjdk-7-jdk
安裝好之後輸入 java -version 就可以看目前的java版本,如下。
java version "1.6.0_45"
Java(TM) SE Runtime Environment (build 1.6.0_45-b06)
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode)
如果想要換目前的java和javac版本可以輸入
sudo update-alternatives --config java
然後還需要安裝一些編譯工具,不然編譯的時候會有錯誤訊息,以下是從網路上找到的
如果想要換目前的java和javac版本可以輸入
sudo update-alternatives --config java
然後還需要安裝一些編譯工具,不然編譯的時候會有錯誤訊息,以下是從網路上找到的
-----------------------------------android 4.x--------------------------------------------------
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
----------------------------------------------------------------------------------------------------
-----------------------------android 6.x----------------------------------------------------------
sudo apt-get install git gnupg flex bison gperf build-essential
sudo apt-get install zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386
sudo apt-get install libgl1-mesa-dev g++-multilib mingw32 tofrodos
sudo apt-get install python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
--------------------------------------------------------------------------------------------------------
再來...還沒結束
編譯 android 4.0 的話要把 make 套件降版本 改為3.81
從這裡可以下載 make-3.81.tar.bz2
http://ftp.gnu.org/gnu/make/
http://ftp.gnu.org/gnu/make/
下載後解開它,然後cd make-3.81到目錄下再執行下面這幾行
sudo make
sudo make install
執行完後要 重新開一個終端機 才能確定是不是安裝成功
make -version
成功就會顯示
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-unknown-linux-gnu
編譯 android 6.0 的話要修改android source下的一個檔案,
因為直接編譯的時候有遇到錯誤訊息。
檔案是 android/art/build/Android.common_build.mk
檔案是 android/art/build/Android.common_build.mk
在75行左右
將ifneq ($(WITHOUT_HOST_CLANG),true)
改為
ifeq ($(WITHOUT_HOST_CLANG),false)
到這邊準備工作終於完成了,最後將你要編譯的app專案整個放到 packages/apps/ 底下
並在專案裡面建一個Android.mk檔,檔案內容輸入這幾行,或參考底下的網站。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
存檔後離開,在終端機中目標指向source的目錄
make clean
cd ~/Android. build/envsetup.sh
注意前面有個".",執行上面這行後,編譯器才能使用mm || mmm指令
mm packages/apps/Music
make Music
接著就會開始編譯了。
如果編譯失敗的話可以把專案裡的R.java檔刪除再編譯試試看。
編譯成功後會顯示檔案放的位置
例如Android4編譯完就顯示
Install: out/target/product/generic/system/app/Music.apk
apk就在out/target/product/generic/system/app/底下。
以下是參考網站
----------------------------------------------------------------------------------------------------
關於Android.mk檔的資料: http://kunhsien.blogspot.tw/2013/05/androidandroidmk.html
編譯有系統簽名權限的apk: http://noblearts.blogspot.tw/2011/05/linux-make-apk.html
http://www.cnblogs.com/Vicky-Lee/p/3253062.html
http://www.cnblogs.com/Vicky-Lee/p/3253062.html
官方網站的安裝Android source說明: https://source.android.com/source/downloading.html#getting-the-files
Android源码下载及开发环境的搭建: http://sammor.iteye.com/blog/1337612
Ubuntu 16.04 64bit 编译 Android 4.4 源码: http://www.jianshu.com/p/2b2c723825a9
(上面這個有解決android6遇到編譯問題的方法)
-----------------------------------------------------------------------------------------------------------