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


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程序。运行结果如下:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值