有时候,我需要我的设备上运行一个命令或脚本,但他们不具备或不存在。
我们可以添加一些附加命令Android
设备的shell
,但已经可以在它的命令?
例如,添加screenrecord
命令到我的设备(我的设备具有Android
API比19以下),这这是在其上不可用。
我知道如何与设备上可用的命令列表adb shell
adb shell ls /system/bin
但我想添加更多的自定义命令和脚本,做一些特殊的工作。
有没有办法做到这一点? 或者,这是不可能的?
答案提供的一系列步骤建立一个可执行Android shell
经过双方Eclipse
和Android Studio
2.2+。 最后包括ndk-build
和CMake
。
一,准备源代码
例如,考虑mycommand.c
:
#include <stdio.h>
int main()
{
printf("My Command!\n");
return 0;
}
II。 建立可执行的
日食
在假设NDK
位置在设定Eclipse
,创建一个新Android Application Project
,然后执行以下步骤。
添加原生支持 。 右键单击该项目Project Explorer
> Android Tools
> Add Native Support
> Finish
添加源代码 ,即把mycommand.c
下project_root
/ jni
的文件夹。
编辑Android.mk
下project_root
/ jni
如下:
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mycommand LOCAL_SRC_FILES := mycommand.c include $(BUILD_EXECUTABLE)
创建Application.mk
下* project_root
/ jni
文件夹:
APP_ABI := all
构建可执行文件 ,并在找到它project_root/libs/<abi>/mycommand
。
* 二进制文件all
支持的CPU架构在这里产生。 使用adb shell cat /proc/cpuinfo
找出CPU架构和设置APP_ABI
按支持的ABI 。
Android的Studio和NDK建造
步骤如下。
- 添加
mycommand.c
, Android.mk
(相同于Eclipse
上面部分)到/app/src/main/cpp
文件夹。 编辑build.gradle
:
android { ... defaultConfig { ... externalNativeBuild { ndkBuild { targets "mycommand" // use a specific ABI filter if needed // abiFilters "armeabi-v7a" } } } externalNativeBuild { ndkBuild { path "src/main/cpp/Android.mk" } } }
建立项目下找到可执行/app/.externalNativeBuild/ndkBuild/debug/obj/local/<abi>/mycommand
Android的Studio和CMake的
添加mycommand.c
到/app/src/main/cpp
文件夹和编辑CMakeLists.txt
:
cmake_minimum_required(VERSION xxx) add_executable(mycommand src/main/cpp/mycommand.c )
编辑build.gradle
:
android { ... defaultConfig { ... externalNativeBuild { cmake { targets "mycommand" // use a specific ABI filter if needed // abiFilters "armeabi-v7a" } } } externalNativeBuild { cmake { path "CMakeLists.txt" } } }
建立项目下找到可执行/app/.externalNativeBuild/cmake/debug/<abi>/mycommand
III。 PUSH BINARY到设备
推mycommand
由所在插入设备的二进制文件。 请记住,SD卡上的文件默认情况下不被执行,这样二进制要推入设备的内部存储。 根据的设备是否是植根与否,你有以下几种选择:
在无根设备,你可以把二进制到/data/local/tmp
:
adb push mycommand /data/local/tmp
在植根设备,你可以把二进制到SD卡上,然后将其复制到/system/bin
与其他可执行文件一起(重新安装在读写模式下的分区后):
adb push mycommand /path/to/sdcard adb shell su mount -o rw,remount /system cp /path/to/sdcard/mycommand /system/bin
IV。 SET可执行权限( 可选 )
设置的二进制文件的权限是可执行文件( 没有必要的情况下做到这一点/data/local/tmp
)。 下面chmod 555
(R-XR-XR-x)被使用:
adb shell chmod 555 /path/to/mycommand
五,运行命令
现在,您可以壳到您的设备(与adb shell
)并执行命令。
如果你不在此位置为Android NDK和建造有二进制文件,他们是在
app\build\intermediates\ndkBuild\debug\obj\local\arm64-v8a\objs-debug\test1
对arm64-V8A和相应的其他平台。
如果万一您收到此错误:
错误:当您创建使用C进行可执行的唯一位置独立的可执行文件(PIE)的支持 ,
添加这些行的gradle应用
default config
{
..........
..........
externalNativeBuild
{
cmake
{
targets "my_command"
abiFilters "armeabi-v7a"
arguments "-DANDROID_PIE=ON" //important
}
}
...........
}