第一步,编写安卓应用程序并编译生成bin格式的可执行文件
1.编写代码
#cd /usr/MarsBoard-A20-Android-4.2.2-SDK-V2.0/android4.2/external //进入external路径
#mkdir hello //创建hello文件夹
#gedit hello.c //创建hello.c文件
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#define DEVICE_NAME "/dev/myfirstdriver"
int main(int argc, char** argv)
{
int fd = -1;
int val = 0;
fd = open(DEVICE_NAME, O_RDWR);
if(fd == -1) {
printf("Failed to open device dddddddd %s.\n", DEVICE_NAME);
return -1;
}
printf("Read origindfasdfaal value:\n");
read(fd, &val, sizeof(val));
printf("%d.\n\n", val);
val = 5;
printf("Write value %d to %s.\n\n", val, DEVICE_NAME);
write(fd, &val, sizeof(val));
printf("Read the value again:\n");
read(fd, &val, sizeof(val));
printf("%d.\n\n", val);
close(fd);
return 0;
}
#gedit Android.mk //创建Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := hello
LOCAL_SRC_FILES := $(call all-subdir-c-files)
include $(BUILD_EXECUTABLE)
2.编译生成
#cd /usr/MarsBoard-A20-android-4.2.2-SDK-V2.0/android4.2 //进入安卓源码跟目录
#source build/envsetup.sh //环境设置
#lunch //选择开发平台
#16 //选择 marsboard 开发平台
#mmm /usr/MarsBoard-A20-android-4.2.2-SDK-V2.0/android4.2/external/hello //编译安卓程序
在如下目录下会生成hello的可执行文件 /usr/MarsBoard-A20-android-4.2.2-SDK-V2.0/android4.2/out/target/product/wing-marsboard/system/bin
第二步,将执行文件导入开发板平台
#adb devices //查看ubuntu上挂载的安卓设备,开发板的设备号为20080411
#adb root
#adb remount //remount权限,否则无法导入到开发板的system/bin路径下
#cd /usr/MarsBoard-A20-android-4.2.2-SDK-V2.0/android4.2/out/target/product/wing-marsboard/system/bin
# adb -s 20080411 push hello /system/bin//将可执行文件导入到安卓开发板的相应路径下
上面的的一步也可以通过编译生成刷机包Img格式的文件使用phoenixsuite工具对开发板进行刷机,也会在上面的路径下找到hello的可执行文件
#adb shell
#cd /system/bin
第三步执行程序并验证
#./hello
得到的输出结果如下(注意在上一个分享中已经执行的helloword.ko的驱动模块会在/dev目录下生成名为myfirstdrive的文件,并已经在文件中输入了信息,如果没有创建myfirstdrive文件,则会打印出“Failed to open device dddddddd ...”)
至此实现了在ubuntu系统下使用C语言编写的安卓应用程序。
该应用程序直接穿越了普通安卓开发的JNI、Framework、APP等层级,对提高应用程序的运行效率意义重大。