文档章节

在Android 2.3中如何使用native_activity.h编写本地应用

晨曦之光
 晨曦之光
发布于 2012/03/13 18:17
字数 625
阅读 131
收藏 0

现在,在Android2.3版本里,可以使用native_activity.h接口实现一个完整的native activity,在使用的时候,要确认回调函数不能阻塞主UI线程。更多信息,可以参考<ndk_root>/platforms/android-9/arch-arm/usr/include/android/native_activity.h.

Native_app_glue静态辅助库为另一个线程中的事件循环提供了回调,而且非常容易使用,可以参考native-activity示例程序。下面是利用native_activity.h实现native activity程序的步骤:

 

  1/ Eclipse中创建一个android项目,在项目的根目录下新建一个jni目录用于存放所有的本地代码。

  2/ 按如下示例在AndroidManifest.xml文件中声明本地的activity

      <manifest xmlns:android="http://schemas.android.com/apk/res/android"

        package="com.example.native_activity"

        android:versionCode="1"

        android:versionName="1.0"> 

       

        <uses-sdk android:minSdkVersion="8" />

       

        <application android:label="@string/app_name" android:hasCode="false">

       

          <activity android:name="android.app.NativeActivity"

            android:label="@string/app_name"

            android:configChanges="orientation|keyboardHidden">

       

          <meta-data android:name="android.app.lib_name"

            android:value="native-activity" />

            <intent-filter>

              <action android:name="android.intent.action.MAIN" />

              <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

          </activity>

        </application>

      </manifest>

 

    主要的内容包括:

 

      - activity标签的android:name 属性必须设成android.app.NativeActivity.

      - meta-data标签的android:name 属性必须设成 android.app.lib_name lib_name没有模块的lib前缀和.so后缀.

 

  3/创建文件实现ANativeActivity_onCreate()函数供activity启动时调用。这个函数参数是ANativeActivity结构体指针,包含了指向回调函数的函数指针,这些回调函数需要编程实现,然后为ANativeActivity->callbacks赋值

 

  4/ ANativeActivity->instance赋值为需要用到的数据地址

 

  5/ 实现在activity启动前需要做的其他事情

 

  6/ 实现在ANativeActivity->callbacks中设置的其他回调函数. 这些回调函数的调用时机可以参看ActivitySDK文档。需要注意的是这些实现不能阻塞,否则可能在运行时主线程会收到ANR(应用程序无响应)的错误。

 

  7/ 开发应用程序功能

   

  8/ jni目录创建一个Android.mk文件来描述本地代码的编译器选项,本质上这个文件就是GNU Make文件的一部分。例如:

      

       LOCAL_PATH := $(call my-dir)

       include $(CLEAR_VARS)

       LOCAL_MODULE    := my_native_module

       LOCAL_SRC_FILES := my_native_code.c

       include $(BUILD_SHARED_LIBRARY)

 

     怎样创建和具体的含义参见<ndk_root>/docs/ANDROID-MK.TXT文件。

    

  9/ 一旦有了Android.mk文件,就可以使用”ndk-build”命令编译代码了。

    

       cd path/to/project

       <ndk_root>/ndk-build

 

 10/ 与常规应用一样,使用AntEclipse,会自动将jni目录中的本地代码打包到.apk文件中。

 

——欢迎转载,转载请注明出处,谢谢——


原文链接: http://blog.csdn.net/caowenbin/article/details/6060873

本文转载自:http://blog.csdn.net/caowenbin/article/details/6060873

共有 人打赏支持
晨曦之光
粉丝 390
博文 4426
码字总数 2559
作品 0
深圳
程序员
私信 提问
Android 2.3 NDK 的新特性

This release of the NDK includes many new APIs, most of which are introduced to support the development of games and similar applications that make extensive use of native code.......

鉴客
2011/09/19
565
0
应用程序开发: Cordova vs React Native vs Xamarin vs DIY

你还在通过编写本地的iOS或Android代码来创建移动应用程序吗?对于那些平台特定的编程语言和工具、技能集问题、程序有非常具体的需要或者只是无知,或许这才是永远的爱。该是我们重新审视移动...

noeticforce
2016/06/21
8.2K
13
Android NDK开发简介

最近由于项目的需要,使用到了Android的NDK技术,对项目核心算法跨平台的移植。简答而言,就是使用C对原来的算法进行了改进,并集成到原来的app项目里。 从前的项目一直没有使用NDK进行开发的...

zhiweiofli
2013/03/07
0
0
JNI和NDK的区别

NDK(Native Development Kit)“原生”也就是二进制 android常用的开发方式是java封装的库,而这些库的底层实现是由C/C++实现,如媒体,图形库等 java调用这样实现就需要用JNI(Java Native...

长平狐
2013/01/06
62
0
在 React Web 和 原生 App 中共享代码

本文讲的是一种在 React Web 和 React Native 共享应用程序逻辑,但在每个平台保持独立的渲染特性的方法。 应用 React Native: React Web: 这个应用程序本身是一个非常简单的 Hello World 应用...

力谱宿云
2016/06/07
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 白掌柜说了卖货不卖身

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @爱漫爱 :这是一场修行分享羽肿的单曲《Moony》 手机党少年们想听歌,请使劲儿戳(这里) @clouddyy :开不开心? 开心呀, 我又不爱睡懒觉…...

小小编辑
今天
8
0
大数据教程(11.7)hadoop2.9.1平台上仓库工具hive1.2.2搭建

上一篇文章介绍了hive2.3.4的搭建,然而这个版本已经不能稳定的支持mapreduce程序。本篇博主将分享hive1.2.2工具搭建全过程。先说明:本节就直接在上一节的hadoop环境中搭建了! 一、下载apa...

em_aaron
今天
3
0
开始看《JSP&Servlet学习笔记》

1:WEB应用简介。其中1.2.1对Web容器的工作流程写得不错 2:编写Servlet。搞清楚了Java的Web目录结构,以及Web.xml的一些配置作用。特别是讲了@WebServlet标签 3:请求与响应。更细致的讲了从...

max佩恩
今天
4
0
mysql分区功能详细介绍,以及实例

一,什么是数据库分区 前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可...

吴伟祥
今天
3
0
SQL语句查询

1.1 排序 通过order by语句,可以将查询出的结果进行排序。放置在select语句的最后。 格式: SELECT * FROM 表名 ORDER BY 排序字段ASC|DESC; ASC 升序 (默认) DESC 降序 1.查询所有商品信息,...

stars永恒
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部