android 纯c/c++开发

新建一个Natvie工程

  • 01

    打开eclipse;

  • 02

    打开菜单->File->New->Android Application;

  • 03

    设置工程名,sdk版本,注意:主题设置为 None,点击next;

  • 04

    Configure Project 是取消 Create activity 的复选框,点击next;

  • 05

    Configure the attributes of the icon set, 直接点击 next;

  • 06

    Select whether to create an activity, and if so, what kind of activity. 点击 finish即可;

  • 07

    工程便创建出来了

配置Makefile

  • 01

    右键工程NativeTest->弹出菜单->Android Tools->Add Native Support...

  • 02

    Settings for generated native components for project.界面 直接点击Finish

  • 03

    将 android.mk 的内容补充完整: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE    := NativeTest LOCAL_SRC_FILES := NativeTest.cpp LOCAL_LDLIBS    := -llog -landroid LOCAL_STATIC_LIBRARIES := android_native_app_glue include $(BUILD_SHARED_LIBRARY) $(call import-module,android/native_app_glue)

  • 04

    增加一个 Application.mk 文件(这一步可选),并写入: APP_ABI := x86 APP_CPPFLAGS := --std=c++11 NDK_TOOLCHAIN_VERSION := 4.8

代码部分

  • 01

    1、 android_main:这个函数类似于win32开发的WinMain函数 2、app->onAppCmd = onAppCmd; app->onInputEvent = onInputEvent; 类似于win32中设置窗口的回掉函数 3、 while ((ident=ALooper_pollAll(-1, NULL, &events, (void**)&source)) >= 0) { // Process this event. if (source != NULL) { source->process(app, source); } // Check if we are exiting. if (app->destroyRequested != 0) { return; } } 这一段类似于win32的 消息循环 4、为了方便大家粘贴, android_main函数的代码如下: void android_main(struct android_app* app) { // Make sure glue isn't stripped. app_dummy(); app->onAppCmd = onAppCmd; app->onInputEvent = onInputEvent; while (1) { int ident; int events; struct android_poll_source* source; while ((ident=ALooper_pollAll(-1, NULL, &events, (void**)&source)) >= 0) { // Process this event. if (source != NULL) { source->process(app, source); } // Check if we are exiting. if (app->destroyRequested != 0) { return; } } } }

  • 02

    onAppCmd描述的是真个activity的生命周期,类似于win32开发的消息处理回掉函数: static void onAppCmd(struct android_app* app, int32_t cmd) { switch (cmd) { case APP_CMD_SAVE_STATE: // The system has asked us to save our current state.  Do so. __android_log_print(ANDROID_LOG_DEBUG, "fuke", "engine_handle_cmd APP_CMD_SAVE_STATE"); break; case APP_CMD_INIT_WINDOW: // The window is being shown, get it ready. __android_log_print(ANDROID_LOG_DEBUG, "fuke", "engine_handle_cmd APP_CMD_INIT_WINDOW"); break; case APP_CMD_TERM_WINDOW: __android_log_print(ANDROID_LOG_DEBUG, "fuke", "engine_handle_cmd APP_CMD_TERM_WINDOW"); break; case APP_CMD_GAINED_FOCUS: // When our app gains focus, we start monitoring the accelerometer. __android_log_print(ANDROID_LOG_DEBUG, "fuke", "engine_handle_cmd APP_CMD_GAINED_FOCUS"); break; case APP_CMD_LOST_FOCUS: // When our app loses focus, we stop monitoring the accelerometer. // This is to avoid consuming battery while not being used. __android_log_print(ANDROID_LOG_DEBUG, "fuke", "engine_handle_cmd APP_CMD_LOST_FOCUS"); break; } }

  • 03

    onInputEvent主要是用来触屏相关事件,也类似于win32开发的消息处理回掉函数,函数有两部分组成: 1、检测多点触屏,并通过logcat打印出多点触屏的信息; 2、控制屏幕颜色变化,每次松开手时颜色变化 3、为方便大家粘贴, onInputEvent函数的代码记录如下: static int32_t onInputEvent(struct android_app* app, AInputEvent* event) { if (AInputEvent_getType(event) == AINPUT_EVENT_TYPE_MOTION) { int nNum = AMotionEvent_getPointerCount(event); char szTrace[1024] = {0}; sprintf (szTrace, "engine_handle_input num=[%d]", nNum); for (int nIdx = 0; nIdx < nNum; nIdx++) { int nX = AMotionEvent_getX(event, 0); int nY = AMotionEvent_getY(event, 0); sprintf (strrchr(szTrace, 0), " (%d %d)", nX, nY); } __android_log_print(ANDROID_LOG_DEBUG, "colorspace", "%s", szTrace); if (AKeyEvent_getAction(event) != AKEY_EVENT_ACTION_UP) return 1; ANativeWindow_Buffer nativeWindow = {0}; int nRet = ANativeWindow_lock(app->pendingWindow, &nativeWindow, NULL); int nArea = nativeWindow.width * nativeWindow.height; unsigned long* pdwScreen = (unsigned long*)nativeWindow.bits; static int s_nClr = 0; unsigned long pdwClr[] = { 0x00000000, 0x000000ff, 0x0000ffff, 0x0000ff00, 0x00ffff00, 0x00ff0000, 0x00ff00ff, 0x00ffffff}; s_nClr ++; if (s_nClr > sizeof(pdwClr) / sizeof(unsigned long)) s_nClr = 0; for (int nIdx = 0; nIdx < nArea; nIdx++) { pdwScreen[nIdx] = pdwClr[s_nClr]; } ANativeWindow_unlockAndPost(app->pendingWindow); return 1; } return 0; }

设置工程属性

  • 01

    1、打开 AndroidManifest.xml 2、打开 Application 分页 3、增加一个 Activity 如下所示:

  • 02

    1、选择右边的 Browse; 2、取消 "Display classes from sources of ..." 前面的复选框; 3、在搜索栏输入"na",选中列出来的 "NativeActivity" 4、点击OK 效果如下:

  • 03

    1、选中 android.app.nativeActivity 2、点击 add 3、选择 Meta Data 4、点击Ok

  • 04

    输入: android:name="android.app.lib_name" android:value="NativeTest"

  • 05

    1、选中 android.app.nativeActivity 2、点击 add 3、选择 Intent Filter 4、点击Ok

  • 06

    1、选中 Intent Filter 2、点击 add 3、选择 Action 4、点击Ok 5、设置 android:name="android.intent.action.MAIN"

  • 07

    1、选中 Intent Filter 2、点击 add 3、选择 Category 4、点击Ok 5、设置 android:name="android.intent.category.LAUNCHER"

运行

  • 01

    启动模拟器,运行效果如下:

  • 02

    点击后效果:

  • 03

    这次整个程序完成

总结

  • 01

    整个程序实现: 1、android 下面的纯c/c++ 开发 2、实现了多点触屏的功能 3、实现了点击屏幕颜色的切换功能

  • 02

    方便他人亦是方便自己,如果觉得还行就点下 下边的 投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

(0)

相关推荐

  • Android Studio如何修改开发的应用程序的版本号

    大部分的Android应用程序再修复bug或者增加功能等之后,都会将版本号相应的提升,那么我们怎么来修改自己开发的Android应用程序的版本号呢? 操作方法 01 首先我们先来看看我们现在的Andr ...

  • 如何搭建Android开发环境

    很多Android开发爱好者对于搭建开发环境都很头痛,我在这里,详细写一下这个环境搭建过程,希望对大家有所帮助. 操作方法 01 一. 下载必须要使用的软件 a. JDK 1.6 (目前最新:Java ...

  • Android开发-Eclipse:[1]新建Android程序

    安装了Android插件的Eclipse开发Android APP 之 新建一个 Android程序 创建 HelloAndroid 程序 01 打开Eclipse 02 新建一个Android工程 ...

  • Android 4.0开发环境搭建和测试

    操作方法 01 1,1,下载所需要的软件 Android开发需要的工具: lJDK 5或 JDK 6或者JDK 7 需要注意的是仅有JRE是不够的.JRE是Java的运行环境,而JDK不仅包含了JRE ...

  • android ndk环境搭建详细步骤

    本文主内容: 1、Android NDK 安装 2、安装Cygwin与使用NDK编译 3、在Eclipse中集成C/C++开发环境CDT 4、安装Sequoyah插件 5、JNI编译环境配置 本文建立 ...

  • Android studio怎么对最近打开项目进行分组?

    在进行android studio编辑的开发项目中,会对多个项目进行开发,那么就的是Android studio 列表中显示了多个项目的,为了能更好的管理最近打开项目的列表中信息的内容,需要进行分组. ...

  • Android studio怎么为项目添加模块依赖?

    Android studio是谷歌开发一个Android开发代码工具,在编辑代码的过程所有创建项目的程序中,会依赖其他项目包,和其它的项目的模块,通过相关依赖之后,而无需在写入代码.方便的进行快速开发 ...

  • Android studio代码中的大小写字母怎么切换?

    Android studio进行对Android项目上的开发,那么在进行使用的Android studio的都会使用到的是快捷方式,来进行对代码的开发,那么在进行在代码中进行输入小写的的情况下,那么在 ...

  • Android studio文件编码格式怎么快速切换?

    现在对Android的项目的开发的过程中编码进行自定义的,选用不同编码的格式,在国内开发的过程中就会存在中文的信息,那么就选用国内常用的编码格式,Android 大团队默认是国外的编码格式,如果使用国 ...