1. 程式人生 > >記一次手機與PC同步開發Android專案

記一次手機與PC同步開發Android專案

目錄

  • -1 前言
  • 0.0 流程簡介
  • 1.0 AS建立專案並上傳GitHub
  • 2.0 AIDE克隆GitHub專案

能力不足時曲線救國 >

  • 3.0 termux編譯AIDE目錄下的專案檔案
    • 3.1 Termux安裝Arch/unbantu
      • 3.1.1 Arch無法訪問網路
      • 3.1.2 Arch-pacman安裝軟體包失敗
    • 3.2 Arch安裝SDKman
      • 3.2.1 sdk安裝gradle
    • 3.3 Arch安裝JDK
    • 3.4 Arch安裝AndroidSDK
    • 3.5 sdkmanager安裝build-tools等
    • 3.6 Arch適配Termux
    • 3.7 Arch安裝glibc
    • 3.8 編譯專案
      • 3.8.1找不到sdcard

其他的曲線救國 >

  • 4.0 利用伺服器編譯
    • 4.1 ftp傳輸編譯後的apk檔案
    • 4.2 修改.gitgnore使apk隨git上傳
  • 5.0 其他想說$結語

前言

當今移動裝置飛速發展,各種軟體也層出不窮,大大的改變了人類現有的生活和工作方式。
突然有一天,出門在外,想到一個主意,需要馬上編寫,奈何卻沒有電腦 沒有開發環境。事後研究了一下手機端進行Android開發的方式:

其實手機上已經出現很多優秀的Android開發app,AIDE,Androlua,JavaN-IDE等,最接近AS的就是AIDE了,有自己的gradle和git ,從AS下載的專案經過簡單的修改就可以執行,且可以通過github實現共享達成雙端同步開發的便利。

但是最近一個androidX專案卻栽了跟頭,大概是AIDE的編譯能力不足了,這可怎麼辦,手機開發旅程剛剛開始怎麼能就這樣結束?花了幾天的事件搜尋查詢各種辦法,終於讓我再酷安找到了較為可行的辦法,樓主Vcoty提出了利用Termux(一個很強大的終端模擬器)安裝linux來編譯本地專案!

我像抓住了救命稻草,趕緊研究了一番,這篇文章記錄移動開發過程,和其他的一些想法。

流程簡介

AS建立Android專案並上傳github --> AIDE從github克隆專案 --> 進行編寫開發 --> Termu>Arch編譯AIDE目錄下的專案--> 繼而完成安裝測試
(此時AIDE只充當編輯器的角色了)

AS建立專案並上傳GitHub

考慮篇幅和重點,這步推個文【提交AS專案到GitHub】,或者自行搜尋其他教程,應該不難。

AIDE克隆GitHub專案

也很簡單:點選右下角藍色按鈕出來檔案管理介面,進入到AppProjects目錄點選Clone Git repository > 輸入git(https)連結 > 點選CLONE,就用前面一篇文章的liswView專案吧。

termux編譯AIDE目錄下的專案檔案

這個的第一次配置過程就很繁瑣,源教程來自於Github專案【TermuxWithGradle】,可以邊看Github的教程邊看文章。

Termux安裝Arch/unbantu

首先下載Termux,各大app平臺均有下載,但是隻有FD上的是完整包(其他平臺安裝後需要梯子下載Termux的資原始檔才可執行)
Termux安裝好了,開始安裝Arch吧!先別急基礎包還沒下呢:
Termux執行

pkg install proot wget curl
##需要的話還建議下vim編輯器
pkg install vim

下載Arch並安裝兩個方式,其實兩個系統我都試過了,這裡主要說Arch。ubuntu也大同小異。

##原教程
wget https://github.com/SDRausty/TermuxArch/raw/master/setupTermuxArch.bash && bash setupTermuxArch.bash
##anlinux儀表盤教程
##arch系統
pkg install wget openssl-tool proot tar -y && hash -r && wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/Arch/armhf/arch.sh && bash arch.sh
##ubuntu系統
pkg install wget openssl-tool proot -y && hash -r && wget https://raw.githubusercontent.com/EXALAB/AnLinux-Resources/master/Scripts/Installer/Ubuntu/ubuntu.sh && bash ubuntu.sh

安裝完畢後ls會出現這樣幾個檔案arch-binds 丶arch-fs(系統檔案) 丶 arsh.sh 丶 start-arch.sh(啟動系統指令碼)

Arch無法訪問網路

Termux輸入 ./start-arch.sh 啟動系統,可以發現命令輸入已經變成了 [root@localhost ~] 了,如果你細心的話還會發現歡迎頁寫著這麼一句話:

意思是讓你執行目錄下的additional.sh指令碼來修復網路功能,修唄。

  ##先給指令碼檔案許可權,再執行
  chmod 755 additional.sh
  sh additional.sh

Arch-pacman安裝軟體包失敗

接下來開始用arch配置構建環境,要裝SDKman之前,還是得先安裝基礎包(什麼?之前我不是裝過了嗎?那是Tremux,現在是Arch所以需要)
arch用的軟體包管理是pacman

##unzip和zip軟體包是安裝SDKman的依賴包
pacman -S wget curl unzip zip

你會發現,安裝失敗!

原因是軟體的簽名有問題,嗯呵,一番查詢解決辦法:

pacman-key --init
pacman-key --populate

ok重新裝下軟體包,然後下一步>

Arch安裝SDKman

可直接移步至SDKman官網

##安裝,完畢之後建議開啟新的bash
curl -s "https://get.sdkman.io" | bash
##source更新(關閉Arshshixiao)
 source "$HOME/.sdkman/bin/sdkman-init.sh"

sdk安裝gradle

安裝SDKman之後這步沒有難度

sdk install gradle 6.1.1

Arch安裝JDK

安裝JDK配置環境我想你已經不是第一次了

##原教程方法下載解壓至/root 一步到位
wget https://github.com/VcotyQin/TermuxWithGradle/raw/master/jdk8_arm64/jdk-8u221-linux-arm64-vfp-hflt.tar.gz && tar xzvf jdk-8u221-linux-arm64-vfp-hflt.tar.gz

Arch安裝AndroidSDK

和JDK一樣沒什麼好說的

##建立一個android_sdk目錄並進入到它
mkdir android_sdk && cd android_sdk
##安裝Android SDK Tools
wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip && unzip sdk-tools-linux-4333796.zip 

配置環境

下載解壓完了再一起配置環境把

 #現在我們的arch的/root/目錄下就有android_sdk 和 jdk_8u221xxx 檔案夾了
 cd  ls ##檢視
 ##配置環境
 vim /etc/profile 
 ##最後面輸入
 export JAVA_HOME=/root/jdk1.8.0_221 #此處為jdk路徑
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib/tools.jar:${JRE_HOME}/lib/dt.jar
export PATH=${JAVA_HOME}/bin:${JAVA_HOME}/jre/bin:$PATH

export ANDROID_HOME=/root/android_sdk #此處寫android_sdk的路徑
export PATH=$ANDROID_HOME/tools:$PATH
export PATH=$ANDROID_HOME/tools/bin:$PATH
export PATH=$ANDROID_HOME/platform-tools:$PATH
## wq儲存檔案之後更新
source /etc/profile
## 校驗配置是否正確
echo $JAVA_HOME $ANDROID_HOME
## 輸出/root/jdk_8u221 /root/android_sdk 代表成功

噗嗤,前面是不是忘記安裝vim編輯器了 pacman -S vim 不謝,vim編輯器i進入編輯模式,按ESC和:輸入wq代表進入命令模式儲存修改並退出vim。

sdkmanager安裝build-tools等

這個sdkmanager可不是剛剛安裝的SDKman,他是位於你android_sdk/tools/bin/下的,所以

 ##如果你現在位於root/目錄下
 cd android_sdk/tools/bin
sh sdkmanager "platform-tools" "build-tools;29.0.3" "platforms;android-29"

這一步也不會有社麼問題,安裝完成

Arch適配Termux

這是Vcoty為TermuxArch適配寫的指令碼,目前僅支援arch系統,arm64架構。

wget https://raw.githubusercontent.com/VcotyQin/TermuxWithGradle/master/adaptTermuxARM64.sh && chmod 777 adaptTermuxARM64.sh && ./adaptTermuxARM64.sh

漫長的下載。。。
如果下載完畢執行adaptTermuxARM64.sh出現錯誤,則應該是檔案的許可權問題,可以分開執行
chmod 777 adaptTermuxARM64.sh 和 ./adaptTermuxARM64.sh 注意看報錯資訊

如果cpu架構不同則需要替換android_sdk/build-tools/版本號/下的aapt aapt2
替換方法(前面安裝的build-tools是29.0.3版本)

## 下載aapt aapt2
wegt
https://raw.githubusercontent.com/VcotyQin/TermuxWithGradle/master/aapt/arm64/aapt
 https://raw.githubusercontent.com/VcotyQin/TermuxWithGradle/master/aapt/arm64/aapt2

ls -l #檢視檔案許可權,大小,建立日期等詳細資訊
## 給予檔案相關許可權
chmod 755 aapt 
chmod 755 aapt2
##複製檔案到android_sdk/build-tools/29.0.3/
cp aapt android_sdk/build-tools/29.0.3/
cp aapt2 android_sdk/build-tools/29.0.3/

完成後可以進入裡面ls -l檢視許可權是否正確

Arch安裝glibc

pacman -S glibc

編譯專案

啊啊啊,終於到這一步了,激動萬分的 cd /mnt/sdcard/ 卻發現找不到目錄?

找不到sdcard

像一盤冷水差點就澆滅了我的激情,但是箭在弦上,豈能不發,我還是找到了解決辦法:
首先exit退出Arch,還記得我們啟動Arch的指令碼檔案star-arsh.sh嗎?找到它!

vim star-arsh.sh #你是不是又沒裝vim (:

大概再二十幾行處注意看註釋(vim ESC:set number開啟行號)

## uncomment the following line to mount /sdcard directly to /
#command+=" -b /sdcard"

把 #command+=" -b /sdcard"註釋#給取消掉, wq儲存修改, ./star-arsh.sh進入Arch。sdcard被“掛載”到了/下。

進入我們的AIDE專案目錄

cd /sdcard/AppProjcet/你的專案名/app
ls #gradle.build檔案所在

先不要著急 gradle build,前面說過

 source "$HOME/.sdkman/bin/sdkman-init.sh"

是臨時配置,關機失效,我們剛剛關閉了,所以還要重新執行
然後可以開心的編譯,然後去專案bliud/outputs/apk/debug/下安裝apk測試了

gradle build

這裡Vcoty說了幾點需要注意的:

classpath 'com.android.tools.build:gradle:3.0.0'中的版本號為Android Gradle外掛的版本,而非Gradle的版本,官方有一個兩者的對應關係。兩者版本一定要對應上,否則會報錯
目前com.android.tools.build:gradle的版本最好低於3.1.0,因為在3.1.0之上啟用aapt2打包資源之後會出問題
每一個版本的build-tools中的aapt都需替換為對應cpu架構的版本

祝你BUILD SUCCESS!

利用伺服器編譯

雖然千辛萬苦的實現了手機上編譯gradle,但是還是存在限制,或者其他未被髮掘的問題,我想到了我空閒的Ubuntu雲伺服器,用雲伺服器編譯專案,編譯環境完美,再通過ftp或者git拿到apk檔案不就行了?開搞!
伺服器是Ubuntu就不用裝啥Arch了,接下來希望你已經熟悉linux基礎和gradle的安裝配置:
手機可用Termux通過ssh連線伺服器,

apt install git unzip zip vim curl vsftpd #你懂的
curl -s "https://get.sdkman.io" | bash #sdkman
source "$HOME/.sdkman/bin/sdkman-init.sh" 
##jdk和sdk安裝方法一樣,省略,安裝biuldtools工具也都一樣
##不同的是不用執行Termux適配指令碼了,複製aapt也無需,直接安裝glibc
apt install glibc 
git clone 專案連結 #把專案克隆到伺服器,git配置請看百度。。。太長了
cd 專案app目錄
gralde bulid #完成

伺服器編譯成功:

手機安裝apk正常

可能引發的錯誤

  1. local.properties檔案的配置預設sdk檔案需要修改成當前android_sdk路徑,否則會編譯錯誤
  2. 暫時沒遇到

    ftp傳輸編譯後的apk檔案

    相關文章:

【如何在linux下開啟FTP服務】

【Linux 下建立 Git 與 GitHub 的連線並克隆到本地】

PS:root使用者預設是無法開啟ftp的,如果新建使用者,要考慮編譯環境是否也在新使用者搭建

手機上ftp連線我建議用MT瀏覽器;

修改.gitgnore使apk隨git上傳

還有一種方式可以不使用ftp即可傳輸編譯後的apk,那就是直接用git,首先要修改專案的app下的 .gitignore檔案,預設是隻忽略/build資料夾,但是我們需要的apk在裡面,所以可以改成

/build/generated
/build/intermediates
/build/tmp

這樣在push提交推送的時候可以連apk一起上傳,手機上直接使用AIDE的Git拉取即可

其他想說&結語

  • Termux》arch安裝sdk和jdk下載時太慢可以先在手機上下載,再用MT檔案管理器複製到/data/data/com.termux/files/home:/root 然後更改許可權即可(需要root)
  • 之後遇到的問題會在這篇文章繼續更新(也可能另開)
  • 第一次寫這麼長的文章,感覺收穫滿滿。