安卓部署Java專案

2023-01-24 12:00:08

開頭:之前做了個檔案轉換的小專案,想部署在安卓手機上,自己可以隨時看看,所以才有了下面這篇文章,內容或有瑕疵,望請批正。文末放我自己部署檔案轉換網址,僅供大家參考,謝謝!

選擇:Termux 還是 Linux Deploy 還是 AidLinux

我自己的情況就是:linux deploy安裝ram方式以後,每次重啟手機後就無法啟動ssh(水平有限解決不了就放棄了);aidlinux安裝了商店一開啟就閃退,聽說是root過了才會這樣,當然網上有root過以後怎麼安裝aidlinux的方法,我偷懶沒去深究,就放棄了。最後選擇了Termux

Termux安裝方式

1、下載F-Droid這個軟體,然後在這個軟體商城裡面搜尋Termux,安裝就行。

新安裝的Termux設定可以參考國光大大的教學:Termux 高階終端安裝使用設定教學 | 國光 (sqlsec.com)

首先先說明一下,Termux不管root沒root過都能用,root過的可以使用tsu命令轉成root使用者(謹慎操作),沒root的使用termux-chroot。

#沒執行termux-chroot命令之前,你開啟Termux後pwd的目錄是這樣的:
~ $ pwd
/data/data/com.termux/files/home
#而執行termux-chroot命令之後,pwd的目錄就變成這樣:
~ $ termux-chroot
~ $ pwd
/home

注意!

我個人的建議是,像nginx、redis、或你的jar包這些的執行最好是在執行termux-chroot命令切換之後再跑起來,因為像我寫的檔案轉換,就會因為找不到系統字型而報錯無法進行轉換(無論是把windows字型遷過來後也一樣報錯),而且整個環境在路徑上,有時候你不得不使用絕對路徑加上前面這串/data/data/com.termux/files/...才能識別,而執行過termux-chroot之後,你的java程式裡面寫/home是完全能夠識別的,而不會報找不到路徑這種錯...

Termux版常用軟體安裝

安裝之前需要注意的事情:

  1. 首先先更新系統
apt update
apt upgrade

2、我們先記住一個命令:pkg files xxx 這個命令可以看你安裝後的軟體的路徑,包括組態檔等,有利於你自己查詢並修改組態檔的內容。

termux的方便之處就在於你安裝即設定,前提條件是你安裝已有的,比如jdk17,一個安裝命令就能安裝並設定系統環境變數,但如果你安裝的是jdk8或者其它非17的版本,你需要自己去設定環境變數(看個人)

3、特別注意:我以下的啟動方式都是在執行termux-chroot命令之後

nginx安裝

輸入直接安裝

pkg install nginx 

**輸入可以直接啟動 ** nginx

安裝完成後,可以修改組態檔,檢視安裝的位置 pkg files nginx

JDK8安裝

aarch版本

Java Downloads | Oracle

jdk-8u351-linux-aarch64.rpm

JDK17安裝

apt install openjdk-17

直接可以檢視java版本

java -version

Redis安裝

在Termux上有相應的ARM版本的Redis安裝包或二進位制檔案,並且很好安裝

1、安裝Redis

$ pkg install redis

2、&是以守護行程方式啟動redis服務,啟動後可以ctrl+c關閉,並不會關閉程式

$ redis-server &

3、登入redis使用者端

$ redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit

4、設定登入口令(密碼)
Redis沒有設定口令時,如果向公網暴露6379埠,就很有可能被駭客劫持
設定密碼的方式有兩種:第一種是登入使用者端設定

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) ""  //預設為空
127.0.0.1:6379> config set requirepass [passwd]  //pwd就是設定的口令
127.0.0.1:6379> ping  //未驗證口令進行心跳反饋
(error) NOAUTH Authentication required
127.0.0.1:6379> auth [passwd]  //驗證口令

第二種是在組態檔中修改
Windows在安裝目錄下開啟redis.windows.conf檔案,大約在443行
Linux在/usr/etc/目錄下開啟redis.conf檔案,大約在507行
找到requirepass欄位,取消註釋,將後面的字串修改為要設定的口令

requirepass [passwd]

儲存退出

關閉redis,指定組態檔重新啟動, 重新登入使用者端驗證口令

$ redis-server /etc/redis.conf &
$ redis-cli
127.0.0.1:6379> auth [passwd]
OK
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> exit

可以帶口令/IP/埠登入使用者端

$ redis-cli -h [host] -p [port] -a [passwd]
127.0.0.1:[port]> ping
PONG
127.0.0.1:[port]> exit

MySql安裝

MySQL資料庫沒有在ARM平臺的二進位制安裝檔案/原始碼包,而其重要分支也是目前主要的MySQL替代產品MariaDB有在手機等ARM平臺的安裝包/原始碼包.
下面開始在安卓手機Termux終端中安裝資料庫

1、安裝MariaDB(即mysql)

pkg install mariadb

切換到etc目錄檢視是否有my.cnf.d目錄

$ cd /data/data/com.termux/files/usr/etc
$ ls

沒有就新建一個

$ mkdir my.cnf.d

設定MariaDB

$ mysql_install_db

如果提示mysql.user table已經存在,則設定

$ mysql_upgrade

啟動MySQL/MariaDB服務

$ mysqld &

$ mysqld_safe -u root &

mysqld是mysql資料庫的守護行程,而mysqld_safe相當於是mysqld的守護行程,&是讓程序後臺執行,不佔用終端,如果沒加,Ctrl+C等方式退出程序重新加上&,或另起一個終端.

1、登入資料庫
由於MariaDB預設沒有密碼,提示輸密碼時直接回車

$ mysql -uroot -p

或者不加引數

$ mysql

$ mariadb

2、檢視資料庫是否有'mysql'這個資料庫

MariaDB [(none)]> show databases;

(如果沒有則請使用上面的命令重新安裝)
3、再看mysql資料庫裡是由有'user'這個表

MariaDB [(none)]> use mysql;
MariaDB [(mysql)]> show tables;

(有mysql資料庫就一般有user表,沒有也重新安裝)
4、 檢視表資訊

MariaDB [(mysql)]> select * from user;

可以看到安裝後有兩個使用者,'root'和'a0_****',兩個使用者預設都沒有密碼.

如果密碼執行mysql_secure_installation命令更新root密碼報錯:Access denied for user 'root'@'localhost'

就先把mysqld的程序殺了,重啟執行:mysqld --skip-grant-tables &

如果要輸入密碼,直接回車,然後切換到mysql資料庫:use mysql

然後執行修改密碼的命令:alter user 'root'@localhost identified by '你的密碼';

如果報錯: The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement,則執行flush privileges,然後再重新執行上面的修改密碼的命令,再flush privileges;就可以了

5、為使用者設定密碼

MariaDB [(mysql)]> alter user 'root'@'localhost' identified by 'xxx';

6、設定遠端登入的許可權

設定指令碼開機自啟動ssh

輸入命令編輯

vi ~/.bash_profile

如果出現syntax error near unexpected token `fi',則有可能編碼有問題。使用cat -v ~/.bash_profile命令可以看到每一行的結尾都帶著^M 明顯不對,因為^M是window的換行符,不是linux的

vi ~/.bash_profile
:set ff #檢視發現是dos
:set ff=unix #設定為unix模式
:wq #儲存退出即可
if pgrep -x "sshd" >/dev/null
  then
    echo "ssh-service執行中..."
  else
    sshd >/dev/null &
    echo "ssh-service已開啟..."
fi

注意,.bashrc指令碼是每當有一個新對談就會執行裡面的命令,而.bash_profile指令碼是一個使用者登入就會執行,不管後面有多少個新對談使用這個使用者都不會再執行

定時執行指令碼cronie

這個定時執行的指令碼我是用來定時巡檢自己的軟體有沒有宕機的,如果有宕機了則重新啟動這樣

1、安裝 pkg install cronie

2、指令集 crond [options]

 -h         print this message列印此訊息
 -i         deamon runs without inotify support在沒有inotify支援的情況下執行
 -m <comm>  off, or specify preferred client for sending mails在沒有inotify支援的情況下執行
 -n         run in foreground在前臺執行
 -f         run in foreground, the same as -n在前臺執行,與-n相同
 -p         permit any crontab允許任何crontab
 -P         inherit PATH from environment instead of using default value            of "/data/data/com.termux/files/usr/bin"從環境繼承PATH,而不是使用預設值
 -s         log into syslog instead of sending mails我們登入syslog而不是傳送郵件
 -V         print version and exit列印版本並退出
 -x <flag>  print debug information列印偵錯資訊
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]
Options:
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -T <file>  test a crontab file syntax
 -V         print version and exit
 -x <mask>  enable debugging

3、常用命令,在crontab命令編輯介面輸入crontab命令:  * * * * * date >> /home/date1.txt   (前面五個* * * * *表示時間是每隔一分鐘 date命令就是得到當前的系統時間, >> 命令表示將結果累加到檔案後面 > 命令則表示將結果覆蓋檔案 )

#新增定時執行任務按ctrl+其它提示鍵操作、編輯內容 
crontab -e
#檢視已新增的任務排程列表
crontab -l
#開啟
crond start

小結

感謝大家的觀看,最後在這裡附上我寫的免費檔案轉換的小網站(希望可愛的你不要攻擊我的小網站,拜託