您的位置:首页 > 移动开发 > Android开发

Android源码内置自定义程序并运行

2016-07-27 17:54 405 查看
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程序。运行结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: