在android系统的源码有很多工具的源码。存放路径如下

  • android/system 底层文件系统库、应用及组件,linux自带的
  • android/external android 使用的一些开源的模组
  • android/frameworks/base/cmds 一些android重要命令:am、app_proce等

实际上这些工具都是小应用。调试串口接电脑,开启控制台可以使用这些工具。如果USB连电脑,用adb调试工具,输入adb shell指令进入控制台 。

  • dumpsys:能dump系统服务的各种状态。
  • dumpstatus:android的相关信息,内核,进程,相关信息的主要实现地方
  • top:CPU使用
  • pm:包管理(package manager)
  • am:活动管理activity manager
  • tinyalsa:音频调试,有tinycap、tinymix、tinyplay
  • settings:更改SettingsProvider数据库的值
  • logcat:系统日志
  • monkey:测试工具
  • svc:控制电源、数据流量、wifi、usb、以太网的开关状态
  • wm:查看设置屏幕的分辨率、密度
  • screencap:截屏
  • screenrecord:录屏

目标设备的system/bin和system/xbin有android添加的一些工具和linux自带的工具,这些工具可能是java、c、c++或shell指令写的。上面提到的几个工具都挺好玩的,具体使用方法可以输入参数--help查看帮助或者网上搜索。

这里介绍如何自己用c或者c++编写一个工具并且在android编译的时候加入到系统当中

一 编写一个测试ioctl接口的小工具

创建文件夹frameworks/base/cmds/dytest

1.创建Android.mk文件

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= \ test.c \LOCAL_SHARED_LIBRARIES := \  libcutils \  liblog \LOCAL_LDLIBS  :=-llogLOCAL_MODULE:= dytestLOCAL_MODULE_TAGS := optionalinclude $(BUILD_EXECUTABLE)

2.创建test.h

#include  #include #include #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 longenum 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_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件 int open_file(const char* filename); //以O_RDWR | O_CREAT | O_TRUNC,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件 int open_file_create(const char* filename) ; //以O_RDONLY,S_IWUSR | S_IRUSR | S_IWGRP | S_IRGRP | S_IROTH权限打开文件 

3.创建test.c

#include  #include  #include  #include  #include  #include  #include  #include #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测试程序 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);   //开机  return 1; } 

代码和编译规则文件准备好了,输入mmm frameworks/base/cmds/dytest/编译。烧录就可使用。
这个工具还可以使用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

用这个方式编译的话就要把dytest工具push到android系统,然后修改权限。当然你也可以用android.mk文件拷贝dytest到system/bin目录下。

二添加android权限后门工具seustub

这个工具是在网上下载的,不方便公布代码,实际使用socket实现在控制台输入指令。

获取seustub压缩包后解压seustub放置在external/文件夹

1.external/seustub/下创建Android.mk

include external/seustub/seustub/Android.mkinclude external/seustub/seustubtest/Android.mk

2.创建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  :=-llogLOCAL_MODULE:= seustubLOCAL_MODULE_TAGS := optionalinclude $(BUILD_EXECUTABLE)

3.创建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  :=-llogLOCAL_MODULE:= seustubtestLOCAL_MODULE_TAGS := optionalinclude $(BUILD_EXECUTABLE)

4.init.rc中添加启动服务

service seustub /system/bin/seustub   class main 

最后输入mmm android/external/seustub编译

使用方法是seustubtest +指令+参数,例seustubtest chmod 777 /dev/si4754

公司的JAVA应用需要临时的root权限,还需要获取返回值判断指令的成功。因此删除seustubtest部分,为seustub添加了供上层调用的JNI接口,并且指令的返回结果输出到文件中。不做详细介绍。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

更多相关文章

  1. android webview自定义标签!(实现打电话的功能);
  2. 通过修改hosts文件成功更新Android(安卓)sdk .
  3. Android(安卓)-- 多线程下载
  4. Android(安卓)make脚本简记
  5. MAC下编译arm架构的tcpdump
  6. Android中的Ninja简介
  7. 2010-02-27 传智播客—Android(二)数据存储和访问 之文件
  8. Android(安卓)4.0 Launcher2源码分析——主布局文件
  9. NPM 和webpack 的基础使用

随机推荐

  1. 插件化框架DL项目的简单解析-黄俊东-专题
  2. 当Android Studio遇见SVN之配置及项目关
  3. Android源码分析之View绘制流程
  4. 学徒浅析Android——Android(安卓)8.0(O)
  5. Android同步方法中异步操作获取返回值。
  6. 针对中小安卓项目团队合作开发的GIT规范
  7. [Android(安卓)API学习]AppWidget
  8. Android精品开源项目整理(持续更新中..)
  9. Android程序开发学习笔记系列——基础篇(
  10. 关于Android任意分辨率视频编码的思考与