Android系統(tǒng)添加自己寫(xiě)的工具
在android系統(tǒng)的源碼有很多工具的源碼。存放路徑如下
- android/system 底層文件系統(tǒng)庫(kù)、應(yīng)用及組件,linux自帶的
- android/external android 使用的一些開(kāi)源的模組
- android/frameworks/base/cmds 一些android重要命令:am、app_proce等
實(shí)際上這些工具都是小應(yīng)用。調(diào)試串口接電腦,開(kāi)啟控制臺(tái)可以使用這些工具。如果USB連電腦,用adb調(diào)試工具,輸入adb shell指令進(jìn)入控制臺(tái) 。
- dumpsys:能dump系統(tǒng)服務(wù)的各種狀態(tài)。
- dumpstatus:android的相關(guān)信息,內(nèi)核,進(jìn)程,相關(guān)信息的主要實(shí)現(xiàn)地方
- top:CPU使用
- pm:包管理(package manager)
- am:活動(dòng)管理activity manager
- tinyalsa:音頻調(diào)試,有tinycap、tinymix、tinyplay
- settings:更改SettingsProvider數(shù)據(jù)庫(kù)的值
- logcat:系統(tǒng)日志
- monkey:測(cè)試工具
- svc:控制電源、數(shù)據(jù)流量、wifi、usb、以太網(wǎng)的開(kāi)關(guān)狀態(tài)
- wm:查看設(shè)置屏幕的分辨率、密度
- screencap:截屏
- screenrecord:錄屏
目標(biāo)設(shè)備的system/bin和system/xbin有android添加的一些工具和linux自帶的工具,這些工具可能是java、c、c++或shell指令寫(xiě)的。上面提到的幾個(gè)工具都挺好玩的,具體使用方法可以輸入?yún)?shù)--help查看幫助或者網(wǎng)上搜索。
這里介紹如何自己用c或者c++編寫(xiě)一個(gè)工具并且在android編譯的時(shí)候加入到系統(tǒng)當(dāng)中
一 編寫(xiě)一個(gè)測(cè)試ioctl接口的小工具
創(chuàng)建文件夾frameworks/base/cmds/dytest
1.創(chuàng)建Android.mk文件
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ test.c \ LOCAL_SHARED_LIBRARIES := \ libcutils \ liblog \ LOCAL_LDLIBS :=-llog LOCAL_MODULE:= dytest LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE)
2.創(chuàng)建test.h
#include <linux/types.h> #include <linux/stddef.h> #include <asm/ioctl.h> #ifndef IO_BASIC_H_ #define IO_BASIC_H_ #define RD_UNIT_SIZE 1024 #define WR_UNIT_SIZE 1024 #define RDWR_UNIT_SIZE 1024 #define S_IRWXU 00700 #define S_IRUSR 00400 #define S_IWUSR 00200 #define S_IXUSR 00100 #define S_IRWXG 00070 #define S_IRGRP 00040 #define S_IWGRP 00020 #define S_IXGRP 00010 #define S_IRWXO 00007 #define S_IROTH 00004 #define S_IWOTH 00002 #define S_IXOTH 00001 #define SI4754_CMDMAGIC 0X81 #define usrdatatype unsigned long enum FM_CMD_TYPE{ FM_START = _IOWR(SI4754_CMDMAGIC, 1, unsigned long), FM_STOP, FM_SEEKUP, FM_SEEKDOWN, FM_SETFREQ, FM_SETVOL, FM_GETFREQ, FM_GETVOL, FM_TEST }; /* ============================================================================ Name : IO_Operation.c Author : DongYi Version : ============================================================================ */ //以O(shè)_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH權(quán)限打開(kāi)文件 int open_file(const char* filename); //以O(shè)_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH權(quán)限打開(kāi)文件 int open_file_create(const char* filename) ; //以O(shè)_RDONLY,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH權(quán)限打開(kāi)文件
3.創(chuàng)建test.c
#include <stdio.h> #include <stdlib.h> #include <asm/io.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <linux/delay.h> #include "test.h" unsigned long qndData; const char* filename = "/dev/fmsi4754"; int open_file(const char* filename) { return open_file_create(filename); } int open_file_create(const char* filename) { int fd; //文件描述符 fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH); if (fd == -1) { printf("\nopen_file:文件操作失敗"); return -1; } printf("\nopen_file:文件操作成功"); return fd; } int main(void) { int fp; int ret; char buf[1024]={0}; long len; puts("~~~~~~~~~~test.c測(cè)試程序 Linux I/O操作~~~~~~~~~~~~\n\n"); /* prints Linux I/O操作 */ // for(len=64000;len>0;len--); sleep(1); fp = open_file_create(filename); if (fp < 0) { printf("open_file:faild!\n"); return -1; }else{ printf("open_file:success!\n"); } qndData=0x12345678; do{ ret=ioctl(fp, FM_START, &qndData); printf("ioctl_file:qndData:0x%x\n ",qndData); if (ret < 0) { printf("ioctl_file:faild!\n"); close(fp); return -1; }else{ printf("ioctl_file:success\n"); } }while(qndData==0x12345678); //開(kāi)機(jī) return 1; }
代碼和編譯規(guī)則文件準(zhǔn)備好了,輸入mmm frameworks/base/cmds/dytest/編譯。燒錄就可使用。
這個(gè)工具還可以使用arm-linux-androideabi-gcc
工具編譯
arm-linux-androideabi-gcc -o dytest --sysroot=/home/android/SambShare/dyT3-v1.0/android/prebuilts/ndk/current/platforms/android-18/arch-arm/ test.c
用這個(gè)方式編譯的話就要把dytest工具push到android系統(tǒng),然后修改權(quán)限。當(dāng)然你也可以用android.mk文件拷貝dytest到system/bin目錄下。
二添加android權(quán)限后門(mén)工具seustub
這個(gè)工具是在網(wǎng)上下載的,不方便公布代碼,實(shí)際使用socket實(shí)現(xiàn)在控制臺(tái)輸入指令。
獲取seustub壓縮包后解壓seustub放置在external/文件夾
1.external/seustub/下創(chuàng)建Android.mk
include external/seustub/seustub/Android.mk include external/seustub/seustubtest/Android.mk
2.創(chuàng)建external/seustub/seustub/Android.mk
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ seustub.cpp \ util.cpp \ LOCAL_SHARED_LIBRARIES := \ libcutils \ liblog \ LOCAL_LDLIBS :=-llog LOCAL_MODULE:= seustub LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE)
3.創(chuàng)建external/seustub/seustubtest/Android.mk
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= \ seustubtest.cpp \ ../seustub/util.cpp \ LOCAL_SHARED_LIBRARIES := \ libcutils \ liblog \ LOCAL_LDLIBS :=-llog LOCAL_MODULE:= seustubtest LOCAL_MODULE_TAGS := optional include $(BUILD_EXECUTABLE)
4.init.rc中添加啟動(dòng)服務(wù)
service seustub /system/bin/seustub class main
最后輸入mmm android/external/seustub編譯
使用方法是seustubtest +指令+參數(shù),例seustubtest chmod 777 /dev/si4754
公司的JAVA應(yīng)用需要臨時(shí)的root權(quán)限,還需要獲取返回值判斷指令的成功。因此刪除seustubtest部分,為seustub添加了供上層調(diào)用的JNI接口,并且指令的返回結(jié)果輸出到文件中。不做詳細(xì)介紹。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Android系統(tǒng)添加Linux驅(qū)動(dòng)
- Android實(shí)現(xiàn)EditText添加下劃線
- Android添加用戶組及自定義App權(quán)限的方法
- Android中多行文本末尾添加圖片排版問(wèn)題的解決方法
- Android添加指紋解鎖功能的實(shí)現(xiàn)代碼
- Android實(shí)現(xiàn)添加商品到購(gòu)物車(chē)動(dòng)畫(huà)效果
- Android GridView仿微信添加多圖效果
- Android中recyclerView底部添加透明漸變效果
- Android GridView添加頭部問(wèn)題的解決
- 詳解如何在Android Studio中添加RecyclerView-v7支持包
- Android百度地圖添加Marker失真問(wèn)題的解決方案
- Android手機(jī)屏幕同步工具asm.jar
- Android系統(tǒng)工具類(lèi)詳解
- Android中APK簽名工具之jarsigner和apksigner詳解
- 超實(shí)用的android網(wǎng)絡(luò)工具類(lèi)
- Android編程實(shí)現(xiàn)將時(shí)間轉(zhuǎn)化成幾分鐘前、幾天前等形式的工具類(lèi)
相關(guān)文章
Android實(shí)現(xiàn)LED發(fā)光字效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)LED發(fā)光字效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Android開(kāi)發(fā)中匿名設(shè)備標(biāo)識(shí)符OAID使用及初始化
這篇文章主要為大家介紹了Android開(kāi)發(fā)中匿名設(shè)備標(biāo)識(shí)符OAID使用及初始化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Android實(shí)現(xiàn)圖片點(diǎn)擊爆炸效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)圖片點(diǎn)擊爆炸效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案
涉及到了ViewPager,MapView,ListView,就需要ScrollView來(lái)做一下支援,這篇文章主要介紹了淺談Android實(shí)踐之ScrollView中滑動(dòng)沖突處理解決方案,有需要的可以來(lái)了解一下。2016-12-12Android實(shí)現(xiàn)熱門(mén)標(biāo)簽的流式布局
這篇文章主要介紹了Android實(shí)現(xiàn)熱門(mén)標(biāo)簽的流式布局的詳細(xì)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2015-12-12Flutter?Ping檢查服務(wù)器通訊信號(hào)強(qiáng)度實(shí)現(xiàn)步驟
這篇文章主要為大家介紹了Flutter?Ping檢查服務(wù)器通訊信號(hào)強(qiáng)度實(shí)現(xiàn)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06