专栏首页恩蓝脚本Android系统添加自己写的工具

Android系统添加自己写的工具

在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  :=-llog
LOCAL_MODULE:= dytest
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)

2.创建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_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 <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测试程序 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; 
} 

代码和编译规则文件准备好了,输入mmmframeworks/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.mk
include 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  :=-llog
LOCAL_MODULE:= seustub
LOCAL_MODULE_TAGS := optional
include $(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  :=-llog
LOCAL_MODULE:= seustubtest
LOCAL_MODULE_TAGS := optional
include $(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接口,并且指令的返回结果输出到文件中。不做详细介绍。

总结

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android模仿实现微博详情页滑动固定顶部栏的效果实例

    最近项目中遇到一个需求,类似微博详情页的效果,通过查找相关的资料终于找了对应的解决方案,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

    砸漏
  • 一个强大的侧滑菜单控件ASwipeLayout

    1.无论是在RecyclerView,ListView,还是LinearLayout等,只要是ViewGroup用该控件都能实现侧滑。 2.控件的手势滑动冲突...

    砸漏
  • Android中Gallery和ImageSwitcher的使用实例

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对ZaLou.Cn的支持。

    砸漏
  • 原 PG git pull

    王果壳
  • 【技术分享】BERT系列(三)-- BERT在阅读理解与问答上应用

    机器阅读理解和问答是自然语言处理领域的一个火热主题。该任务旨在让机器像人类一样阅读理解。前面两篇文章对BERT的官方源码以及在序列标注上的应用进行了介绍,本篇文...

    腾讯智能钛AI开发者
  • Python与DBA

     传统上,当需要为操作系统编写一些脚本时,人们常常会选用 Bash 或 Perl 脚本工具。这些工具易于使用,因而它们几乎变得无处不在,***到了包括 Orac...

    py3study
  • 解决Python一行输出不显示的问题

    当print不加end时,print函数会自动添加换行,和C++不一样需要手动添加cout<endl。加了end,一行后面没有了换行符,这时候是没办法输出的,也...

    砸漏
  • 将Java EE应用程序部署到Docker Swarm集群

    Docker Swarm 为Docker提供本地集群。 Docker Swarm 0.2.0版本的集群 提供了Docker Swarm 的基本介绍,以及如何创...

    Techeek
  • Python创建包,导入包

    《Python包》一节中已经提到,包其实就是文件夹,更确切的说,是一个包含“__init__.py”文件的文件夹。因此,如果我们想手动创建一个包,只需进行以下 ...

    风之随想
  • 机器学习day9-决策树

    决策树自上而下,对样本数据进行树形分类的过程。决策树由结点和有向边组成。结点又分内部结点和叶结点。每个内部结点表示一个特征或属性,叶子结点表示类别。 从顶部开始...

    Rare0716

扫码关注云+社区

领取腾讯云代金券