Android源码内置自定义程序并运行
2016-07-27 17:54
405 查看
1.android本身是基于linux的。因此linux上很多的命令在android上都可以直接使用。android上的命令都在系统的system/bin/目录下面。可以通过adb shell 命令进入系统查看
,结果如下:
![](https://img-blog.csdn.net/20160727174650430)
**2.如果我们自己编写一个自定义的可执行程序打包到该目录,则也可以使用。下面就是一个简单的列子。
使用C++编写一个测试程序,然后用NDK编译,生成android上的可执行程序。将此可执行程序打包到system/bin目录下即可**。
a. 在电脑上某个目录新建一个jni文件夹,在里面新建1个C++源文件。如hello.cpp文件内容如下:
b. 再新建两个make文件。Android.mk 和 Application.mk 文件。
Android.mk 文件指定生成一个android上的可执行文件 hello 。文件内容如下:
Application.mk文件平台及C++库。 内容如下:
3.在jni根目录执行NDK命令编译生成可执行程序。
4.编译成功后会在jni上一级目录生成一个libs文件夹。里面有生成的可执行程序hello
![](https://img-blog.csdn.net/20160727175059061)
5.将此可执行程序 hello 拷贝至
6.完成后,执行emulator运行模拟器。使用adb shell进入系统查看。目录system/bin/目录下已经有了我们刚才生成的hello程序。如下:
![](https://img-blog.csdn.net/20160727174631101)
7.任意目录输入hello 即可执行生成的hello程序。运行结果如下:
,结果如下:
**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程序。运行结果如下:
相关文章推荐
- Android编写简单的网络爬虫
- android 命令隐藏导航栏以及显示电量
- 插件化开发—动态加载技术加载已安装和未安装的apk
- Android Drawable 那些不为人知的高效用法
- Android BitmapShader 实战 实现圆形、圆角图片
- Android增量更新
- Android CalendarView 控件的 getDate() 方法有错误
- Android Xfermode 实战 实现圆形、圆角图片
- Android应用获取设备序列号
- 使用AndroidStudio编译NDK的方法及错误解决方案
- Android 关于getView方法中ViewHolder类static修饰符
- Android ActionBar搜索功能用法详解
- Android 使用OpenCV的三种方式(Android Studio)
- 一个项目搞明白Android 启动模式和taskAffinity
- 使用Kotlin进行Android开发
- Data Binding Component详解 - 换肤什么的只是它的一个小应用!
- Android Device Monitor查找手机内存存储的文件夹位置
- 超实用!Android Camera2.0新API与Camera旧API使用对比总结
- Android Studio使用第三方类库
- Android源码编译并预装带JNI的apk