一、Android應(yīng)用啟動服務(wù)執(zhí)行腳本
公司主營業(yè)務(wù):成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出定陶免費(fèi)做網(wǎng)站回饋大家。
1
如何寫服務(wù)和腳本
在android源碼根目錄下有/device/tegatech/tegav2/init.rc文件相信大家對這個文件都不陌生(如果不明白就仔細(xì)研讀下android啟動流程)。如果在該腳本文件中添加諸如以下服務(wù):
service
usblp_test
/data/setip/init.usblpmod.sh
oneshot
disabled
注解:每個設(shè)備下都會有自己對應(yīng)的init.rc,init.設(shè)備名.rc腳本文件。oneshot
disabled向我們說明了在系統(tǒng)啟動的時候這個服務(wù)是不會自動啟動的。并且該服務(wù)的目的是執(zhí)行/data/setip/init.usblpmod.sh腳本。腳本的內(nèi)容你可以隨便寫,只要符合shell語法就可以了,比如腳本可以是簡單的設(shè)置eth0:
#
!
/system/bin/sh
//腳本的開頭必須這樣寫。
Ifconfig
eth0
172.16.100.206
netmask
255.255.0.0
up//設(shè)置ip的命令
常有很多命令可以通過串口終端輸入,得到結(jié)果,在程序中,通常我們需要得到某些命令的結(jié)果,在代碼中執(zhí)行命令,并將結(jié)果返回。
有兩個類:CommandHelper.java和CommandResult.java 第一個類用于處理命令,第二個則用于返回一個結(jié)果
package com.example.task_aidl;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class CommandHelper {
//default time out, in millseconds
public static int DEFAULT_TIMEOUT;
public static final int DEFAULT_INTERVAL = 1000;
public static long START;
public static CommandResult exec(String command) throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec(command);//創(chuàng)建一個字進(jìn)程,并保存在process對象中
CommandResult commandResult = wait(process);
首先,關(guān)于linux,我們需要知道兩個知識點(diǎn),一個在linux系統(tǒng)下,我們可以將一個文件掛載為一個分區(qū),也就是說如果我有一個磁盤鏡像文件,我可以直接掛載為一個linux的分區(qū);這一點(diǎn)與windows的虛擬光驅(qū)有點(diǎn)類似,但是在linux下,不僅是光盤鏡像文件,所有的鏡像文件都可以掛載為一個linux的分區(qū);第二個知識點(diǎn)就是chroot,可能看到這個你就明白了本文講的方法是如何從安卓設(shè)備運(yùn)行l(wèi)inux系統(tǒng)的,如果還不明白的話,請繼續(xù)往下看。chroot 就是Change Root,也就是改變程序執(zhí)行時所參考的根目錄位置。有了這兩個知識就簡單了。
方法:首先啟動安卓系統(tǒng),然后將linux的系統(tǒng)鏡像文件掛載為安卓系統(tǒng)的一個分區(qū)(所以設(shè)備必須支持Loop設(shè)備),然后通過chroot命令切換程序執(zhí)行時所參考的根目錄即可。這樣我們就可以使用系統(tǒng)鏡像文件里的操作系統(tǒng)了。
需要用到的幾個軟件:BusyBox Pro,Complete Linux Installer(內(nèi)含終端模擬器 VNC安卓客戶端和Linux鏡像下載鏈接),適合于Arm的Ubuntu鏡像。這幾個軟件都可以從Google Play里下載到,其中BusyBox Pro是收費(fèi)應(yīng)用,網(wǎng)上應(yīng)該也有免費(fèi)的下載,可以搜一下。另外Complete Linux Installer也帶有BusyBox如果不想下載那個收費(fèi)的,用這里帶的或許也可以,但是可能會報告一個錯誤。
軟件安卓好之后,將Ubuntu鏡像放到SD卡里,最好是Class 10的高速卡,不然可能會稍微卡一點(diǎn),但是不會非??ǎ?yàn)榇蠖鄶?shù)的操作還是依賴于安卓系統(tǒng)構(gòu)建的系統(tǒng)的了,這跟直接將系統(tǒng)鏡像寫入SD卡并從SD卡啟動不同。這個鏡像文件需要放到SD卡的一個文件夾下,注意一定不能使中文。然后打開Complete Linux Installer,里面有一個啟動操作系統(tǒng),右上角會有一個菜單編輯,名稱任意,路徑當(dāng)然就要選擇我們的鏡像所致的路徑了,保存并返回。此時點(diǎn)擊啟動即可啟動linux系統(tǒng)。此時會啟動終端模擬器,提示幾個問題,如果是第一次啟動會讓設(shè)置密碼,設(shè)置好密碼之后,再依次輸入y,最好設(shè)置分辨率,y,即可。如果啟動失敗,可以多試幾次即可。
之后可以打開VNC客戶端,連接127.0.0.1:5900輸入剛才設(shè)置的用戶名密碼即可連接登陸。如果顯示被拒絕連接,可以檢查一下端口號是否正確。檢查的方法是到終端模擬器執(zhí)行 netstat -tlnp 看一下vncserver前面對應(yīng)的端口號碼是多少,再到VNC客戶端改為相應(yīng)的端口號即可。
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要使用于移動設(shè)備,如智能手機(jī)和平板電腦,由Google公司和開放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開發(fā)。也就是說Android的底層就是Linux,如果想像linux那樣執(zhí)行一些命令的話,可以使用adb,或者說shell終端。
使用方式:
在電腦上用adb 執(zhí)行shell腳本 命令 adb shell即可切換到shell模式。
手機(jī)上安裝shell 附件,啟動后即可執(zhí)行命令。
su切換到root用戶執(zhí)行高級命令。