可执行的android C 程序

一、建立工程目录结构:
目录结构示意图:
第一层目录:NDK工程名根目录文件夹
第二层目录:jni <--android-ndk-r4b/ndk-build 规定的源码存放文件夹
NDK工程名根目录文件夹
 |---Application.mk
 |---jni
     |---Android.mk
     |---*.h
     |---*.c
注意:
1.Application.mk 可选在 jni 目录下;
2.jni           必须在工程根目录下;
3.Android.mk    必须在 jni 目录下;
4.以上的目录和文件的名字注意大小写;
5. C语言的源代码要放在 jni 目录下;

二、Application.mk文件内容:
APP_PROJECT_PATH :=$(call my-dir)/jni
APP_MODULES     := 可执行程序名
#注:只有APP_MODULES := 后面的可执行程序名需要根据实际情况而改变;
例子:
APP_PROJECT_PATH := $(call my-dir)/jni
APP_MODULES     := test

三、Android.mk文件内容:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=模块名
LOCAL_SRC_FILES :=模块.c
#编译动态库
#include $(BUILD_SHARED_LIBRARY)
#编译可执行程序
include $(BUILD_EXECUTABLE)
例子:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE :=test
LOCAL_SRC_FILES :=test.c
#编译动态库
#include $(BUILD_SHARED_LIBRARY)
#编译可执行程序
include $(BUILD_EXECUTABLE)

四、test.c文件内容:
int main(int   argc,  char** argv )
{
    return 0;
}

五、编译:
1)进入工程根目录下;
$ cd~/androidcode/test
2) 执行 $$NDK/ndk-build 命令;(参见我的另一篇 Ubuntu 下 Android NDK开发环境搭建)
编译成功会提示如下信息:
warning:incompatible implicit declaration of built-in function'printf'
Executable    : test
Install       : test =>/home/wzhnsc/androidcode/test/libs/armeabi

六、放入Android 模拟器执行程序看效果:
1) 执行~/android-sdk-linux_x86/tools 下的 android 脚本文件
$ cd~/android-sdk-linux_x86/tools
$./android
2)在弹出的“Android SDK and AVD Manager”对话框中 ->
点击左窗格中的“VirtualDevices” ->
点击右窗格中的[New...]按钮,创建一个名为"Android2.1"的新模拟器;
3)运行名为"Android2.1"的模拟器
$./emulator -avd Android2.1
4)进入 /home/wzhnsc/androidcode/test/libs/armeabi 目录下
$ cd/home/wzhnsc/androidcode/test/libs/armeabi
5) 在Android 模拟器中的 /dev 目录下新建一个 test 文件夹
$ adbshell mkdir /dev/test
6)将当前目录下的 test 可执行程序文件放入新建的 /dev/test 目录下
$ adbpush test /dev/test/test
7) 对/dev/test 目录下的 test 可执行程序文件进行可读可写可执行授权
$ adbshell chmod 0777 /dev/test/test
8) 进入Android 模拟器 shell 命令行下
$ adbshell
9) 在Android 模拟器 shell 命令行下执行 test 可执行程序
# cd/dev/test
#ls
test
#./test
helloandroid!
I'mwzhnsc!
Isupport android !!
#exit
注:android脚本文件、adb 和emulator 可执行程序均在 ~/android-sdk-linux_x86/tools 下;

补充:有时候即使修改了test的权限任然无法执行,提示:

/system/bin/sh: ./test: can't execute: Permission denied

则需要重新挂载sdcard
mount -t yaffs2 -o remount,rw,noatime,nodiratime /dev/mtdblock0 /sdcard

你可能感兴趣的:(cocos2d-x,jni)