1.android本身是基于linux的。因此linux上很多的命令在android上都可以直接使用。android上的命令都在系统的system/bin/目录下面。可以通过adb shell 命令进入系统查看
,结果如下:
**2.如果我们自己编写一个自定义的可执行程序打包到该目录,则也可以使用。下面就是一个简单的列子。
使用C++编写一个测试程序,然后用NDK编译,生成android上的可执行程序。将此可执行程序打包到system/bin目录下即可**。
a. 在电脑上某个目录新建一个jni文件夹,在里面新建1个C++源文件。如hello.cpp文件内容如下:
#include <iostream>
#include <cstring>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
class A{
private:
int x;
int y;
public:
//A(){}
A(int ix, int iy){
this->x = ix;
this->y = iy;
}
void print(){
cout << "x=" << this->x << ",y=" << this->y <<endl;
}
int getX(){
return x;
}
};
char *itoa(int i) {
int tmpi = i;
int src = i;
int len = 1, offset = 0;
char *des = NULL;
//LOGD("[itoa]:function begin, i=%d", i);
cout << "i=" << i << endl;
while((tmpi=tmpi/10) >= 10) {
len ++;
}
//LOGD("[itoa]:get i len, len=%d", len);
cout << "len=" << len << endl;
des = (char*)malloc(len+1);
if(des == NULL)
return NULL;
memset(des, 0x00, len + 1);
offset = len-1;
while((src/10) >= 10) {
des[offset--] = src%10;
src=src/10;
}
//LOGD("[itoa]:get remain src , src=%d", src);
cout << "src=" << src << endl;
if(src>0) {
char ch = src %10 + 48;
des[offset] = ch;
}
//LOGD("[itoa]:des=%s", des);
cout << "des=" << des << endl;
return des;
}
int main(int argc, char **argv) {
A a = A(2,3);
a.print();
char *des = itoa(a.getX());
cout << "des=" << des << endl;
return 0;
}
b. 再新建两个make文件。Android.mk 和 Application.mk 文件。
Android.mk 文件指定生成一个android上的可执行文件 hello 。文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.cpp
LOCAL_CPPFLAGS += -fexceptions
include $(BUILD_EXECUTABLE)
Application.mk文件平台及C++库。 内容如下:
APP_OPTIM := debug
APP_PLATFORM := android-19
APP_ABI := armeabi
APP_STL := stlport_static
3.在jni根目录执行NDK命令编译生成可执行程序。
ndk-build
4.编译成功后会在jni上一级目录生成一个libs文件夹。里面有生成的可执行程序hello
5.将此可执行程序 hello 拷贝至 android_src/out/target/product/generic/system/bin/
目录下。然后在源码根目录 android_src 下面执行打包命令。
make snod
6.完成后,执行emulator运行模拟器。使用adb shell进入系统查看。目录system/bin/目录下已经有了我们刚才生成的hello程序。如下:
7.任意目录输入hello 即可执行生成的hello程序。运行结果如下: