android native activity.docx

上传人:b****6 文档编号:8317796 上传时间:2023-01-30 格式:DOCX 页数:19 大小:27.47KB
下载 相关 举报
android native activity.docx_第1页
第1页 / 共19页
android native activity.docx_第2页
第2页 / 共19页
android native activity.docx_第3页
第3页 / 共19页
android native activity.docx_第4页
第4页 / 共19页
android native activity.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

android native activity.docx

《android native activity.docx》由会员分享,可在线阅读,更多相关《android native activity.docx(19页珍藏版)》请在冰豆网上搜索。

android native activity.docx

androidnativeactivity

//android-ndk-r5b/samples/native-activity

一、native-activity/default.properties文件内容:

#ThisfileisautomaticallygeneratedbyAndroidTools.

#本文件是由Android工具自动产生的。

#

#Donotmodifythisfile--YOURCHANGESWILLBEERASED!

#不要修改本文件--你的改变将是被擦除掉!

#

#ThisfilemustbecheckedinVersionControlSystems.

#本文件一定由版本控制系统检查。

#

#TocustomizepropertiesusedbytheAntbuildsystemuse,

#"build.properties",

#andoverridevaluestoadaptthescripttoyourprojectstructure.

#Ant构建系统使用自定义内容build.properties,然后替代其值为你的工程结构来改写脚本。

#

#Projecttarget.

#工程目标。

#判断APP_PLATFORM是否在Application.mk文件中定义,如果没有定义,就使用这个默认的定义,

#如果此文件也找不到,则按照android-3(Android1.5)来定义。

target=android-7

二、native-activity/AndroidManifest.xml文件内容:

xmlversion="1.0"

encoding="utf-8"?

>

--BEGIN_INCLUDE(manifest)-->

android="

package="com.example.native_activity"

android:

versionCode="1"

android:

versionName="1.0">

--ThisistheplatformAPIwhereNativeActivitywasintroduced.-->

--本地活动将引入的平台API-->

minSdkVersion="8"/>

--This.apkhasnoJavacodeitself,sosethasCodetofalse.-->

--该.apk没有Java代码,所以设置hasCode属性值为假-->

label="@string/app_name"

android:

hasCode="false">

--Ouractivityisthebuilt-inNativeActivityframeworkclass.

ThiswilltakecareofintegratingwithourNDKcode.-->

--我们的活动是内置本地活动框架类。

这将处理使我们的NDK代码成为一体。

-->

name="android.app.NativeActivity"

android:

label="@string/app_name"

android:

configChanges="orientation|keyboardHidden">

--TellNativeActivitythenameofor.so-->

--告知本地活动共享库的名字-->

name="android.app.lib_name"

android:

value="native-activity"/>

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

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

--END_INCLUDE(manifest)-->

三、native-activity/res/values/strings.xml文件内容:

xmlversion="1.0"encoding="utf-8"?

>

NativeActivity

四、native-activity/jni/Application.mk文件内容:

#使用android-ndk-r5b/platforms/android-9/arch-arm/usr目录下的头文件与库文件

APP_PLATFORM:

=android-9

五、native-activity/jni/Android.mk文件内容:

#Copyright(C)2010TheAndroidOpenSourceProject

#版权所有(C)2010Android开源工程

#

#LicensedundertheApacheLicense,Version2.0(the"License");

#根据2.0版本Apache许可证授权

#youmaynotusethisfileexceptincompliancewiththeLicense.

#根据本许可证,你可以不使用此文件。

#YoumayobtainacopyoftheLicenseat

#你可以获得许可证的副本在

#

#http:

//www.apache.org/licenses/LICENSE-2.0

#

#Unlessrequiredbyapplicablelaworagreedtoinwriting,software

#distributedundertheLicenseisdistributedonan"ASIS"BASIS,

#WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.

#除非因适用法律需要或书面同意,

#根据许可证分发的软件是基于"按原样"原则提供,无任何明示的或暗示的保证或条件。

#SeetheLicenseforthespecificlanguagegoverningpermissionsand

#limitationsundertheLicense.

#详见根据许可证许可下,特定语言的管辖权限和限制。

#用于返回当前目录的路径

LOCAL_PATH:

=$(callmy-dir)

#CLEAR_VARS变量是由生成系统已提供的,

#并且指出一个特殊的GNUMakefile文件将为你清除除了LOCAL_PATH以外的许多的LOCAL_XXX变量,

#(例如:

LOCAL_MODULE,LOCAL_SRC_FILES,LOCAL_STATIC_LIBRARIES,等等...)

#这是必须的,因为全部的生成控制文件是在一个单独的GNUMake执行环境中被分析的,在那里所有的变量是全局的。

include$(CLEAR_VARS)

#LOCAL_MODULE变量必须是已定义的,用来标识你的Android.mk文件中描述的每个模块。

#模块名字必须是唯一,并且不能包含任何的空格。

#注意生成系统将自动添加适当的前缀和后缀到相应的产生文件。

#换句话说,一个共享库模块命名为native-activity将产生libnative-activity.so。

LOCAL_MODULE:

=native-activity

#LOCAL_SRC_FILES变量必须包含将生成且汇编成一个模块的C和/或C++源文件的列表。

#注意你将不列出头文件和包含文件在这里,因为生成系统将自动地为你估算依赖;

#列出的源文件将直接递给编译器。

LOCAL_SRC_FILES:

=main.c

#使用在生成你的模块时的额外的链接器标志列表。

#对于用-l前缀传递特定的系统库名是有用的。

#liblog.so提供Android记录日志API

#libandroid.so提供Android功能访问API

#libEGL.so提供EGLAPI

#libGLESv1_CM.so提供OpenGLESAPI

#注:

#OpenGLES(OpenGLforEmbeddedSystems,以下简称OpenGL)

#OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计。

#该API由Khronos集团定义推广,

#Khronos是一个图形软硬件行业协会,该协会主要关注图形和多媒体方面的开放标准。

#

#EGL是OpenGLES和底层本地平台视窗系统之间的接口,为OpenGLES提供平台独立性而设计。

#它被用于处理图形管理、表面/缓冲捆绑、渲染同步,

#以及支援使用其他KhronosAPI进行的高效、加速、混合模式2D和3D渲染。

LOCAL_LDLIBS:

=-llog-landroid-lEGL-lGLESv1_CM

#将链接到本模块的静态库模块列表(用BUILD_STATIC_LIBRARY生成的)。

#这仅在共享库模块中有意义。

LOCAL_STATIC_LIBRARIES:

=android_native_app_glue

#BUILD_SHARED_LIBRARY是一个已由生成系统提供的变量,

#表明一个GNUMakefile脚本是负责收集你定义的从最近的include$(CLEAR_VARS)

#到决定去生成之间的全部LOCAL_XXX变量的信息,然后正确地生成共享库。

#注意你必须在包含这个文件之前最近位置有LOCAL_MODULE或LOCAL_SRC_FILES变量的定义。

include$(BUILD_SHARED_LIBRARY)

#$(callmacro-name[,param1,...])

#call是一个内置于make的函数,

#call会扩展它的第一个参数并把其余参数依次替换到出现$1、$2、...的地方。

#call的第一个参数可以是任何宏或变量的名称。

#允许你通过名字查找且包含其它模块的Android.mk文件。

#这将在你的NDK_MODULE_PATH环境变量提到的目录列表中查找模块标记的名字,

#并自动地为你包含它的Android.mk文件。

#为了方便起见,$NDK/sources是被NDK生成系统附加到你的NDK_MODULE_PATH变量值定义中。

$(callimport-module,android/native_app_glue)

六、native-activity/jni/main.c文件内容:

/*

*Copyright(C)2010TheAndroidOpenSourceProject

*版权所有(C)2010Android开源工程

*

*LicensedundertheApacheLicense,Version2.0(the"License");

*根据2.0版本Apache许可证授权

*youmaynotusethisfileexceptincompliancewiththeLicense.

*根据本许可证,你可以不使用此文件。

*YoumayobtainacopyoftheLicenseat

*你可以获得许可证的副本在

*

*http:

//www.apache.org/licenses/LICENSE-2.0

*

*Unlessrequiredbyapplicablelaworagreedtoinwriting,software

*distributedundertheLicenseisdistributedonan"ASIS"BASIS,

*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.

*除非因适用法律需要或书面同意,

*根据许可证分发的软件是基于"按原样"原则提供,无任何明示的或暗示的保证或条件。

*SeetheLicenseforthespecificlanguagegoverningpermissionsand

*limitationsundertheLicense.

*根据许可证分发的软件是基于"按原样"原则提供,无任何明示的或暗示的保证或条件。

*/

//BEGIN_INCLUDE(all)

/*JavaNativeInterface*/

#include

/*错误报告机制*/

#include

/*EGL*/

#include

/*OpenGLES1.x*/

#include

/*接收和处理传感器事件*/

#include

/*AndroidloggingAPI*/

#include

/*android-ndk-r5b/sources/android/native_app_glue静态库头文件*/

#include

#defineLOGI(...)\

((void)__android_log_print(ANDROID_LOG_INFO,"native-activity",__VA_ARGS__))

#defineLOGW(...)\

((void)__android_log_print(ANDROID_LOG_WARN,"native-activity",__VA_ARGS__))

/**

*Oursavedstatedata.

*我们已保存的状态数据。

*/

structsaved_state

{

floatangle;/*RGB中的绿色值*/

int32_tx;/*X坐标*/

int32_ty;/*Y坐标*/

};

/**

*Sharedstateforourapp.

*为我们的应用程序共享状态。

*/

structengine

{

/*android_native_app_glue.h中定义的本地应用程序粘合剂模块用数据结构*/

structandroid_app*app;

/*sensor.h中定义的传感器管理器*/

ASensorManager*sensorManager;

/*加速度传感器*/

constASensor*accelerometerSensor;

/*已与一个循环器关联起来的传感器事件队列*/

ASensorEventQueue*sensorEventQueue;

/*非零为可以绘制动画*/

intanimating;

/*显示器句柄*/

EGLDisplaydisplay;

/*系统窗口或framebuffer句柄*/

EGLSurfacesurface;

/*OpenGLES图形上下文*/

EGLContextcontext;

/*系统窗口的宽度(像素)*/

int32_twidth;

/*系统窗口的宽度(像素)*/

int32_theight;

/*我们已保存的状态数据*/

structsaved_statestate;

};

/**

*InitializeanEGLcontextforthecurrentdisplay.

*为当前显示器初始化一个EGL上下文。

*/

staticint

engine_init_display(structengine*engine)

{

/*initializeOpenGLESandEGL

*初始化OpenGLES和EGL

*/

/*

*Herespecifytheattributesofthedesiredconfiguration.

*在这里具体指定想要的配置的属性。

*

*Below,weselectanEGLConfigwithatleast8bitspercolor

*componentcompatiblewithon-screenwindows.

*在下面,我们选择一个至少8位色的EGLConfig与屏幕上的窗口一致。

*注:

通常以ID,Value依次存放,对于个别标识性的属性可以只有ID没有Value。

*/

constEGLint

attribs[]={EGL_SURFACE_TYPE,EGL_WINDOW_BIT,/*系统窗口类型*/

EGL_BLUE_SIZE,8,/*蓝色位数*/

EGL_GREEN_SIZE,8,/*绿色位数*/

EGL_RED_SIZE,8,/*红色位数*/

EGL_NONE};

/*系统窗口的宽度(像素)*/

EGLintw;

/*系统窗口的高度(像素)*/

EGLinth;

/*未使用的变量*/

EGLintdummy;

/*像素格式ID-RGBA/RGBX/RGB565*/

EGLintformat;

/*系统中Surface的EGL配置的总个数*/

EGLintnumConfigs;

/*Surface的EGL配置*/

EGLConfigconfig;

/*系统窗口句柄*/

EGLSurfacesurface;

/*OpenGLES图形上下文*/

EGLContextcontext;

/*1.返回一个显示器连接-是一个关联系统物理屏幕的通用数据类型。

*/

EGLDisplaydisplay=eglGetDisplay(EGL_DEFAULT_DISPLAY);/*得到系统默认的*/

/*原型:

EGLDisplayeglGetDisplay(NativeDisplayTypedisplay);

*   display参数是本地系统显示器类型,取值为本地显示器ID值。

*返回:

如果系统中没有一个可用的本地显示器ID值与display参数匹配,

*   函数将返回EGL_NO_DISPLAY,而没有任何Error状态被设置。

*/

/*2.EGL在使用前需要初始化,因此每个显示器句柄(EGLDisplay)在使用前都需要初始化。

*/

eglInitialize(display,/*有效的显示器句柄*/

0,/*返回主版本号-不关心可设为NULL值或零(0)*/

0);/*返回次版本号-不关心可设为NULL值或零(0)*/

/*原型:

EGLBooleaneglInitialize(EGLDisplaydpy,

*EGLint*major,

*EGLint*minor);

*   EGLint为int数据类型。

*返回:

EGLBOOlean取值:

EGL_TRUE=1,EGL_FALSE=0。

*/

/*Here,theapplicationchoosestheconfigurationitdesires.

*在这里,应用程序决定它要求的配置。

*

*Inthissample,wehaveaverysimplifiedselectionprocess,

*wherewepickthefirstEGLConfigthatmatchesourcriteria.

*在这个示例中,我们有一个非常精简的选择处理,

*我们选择第一个EGLConfig适应我们的标准。

*/

/*定义一个希望从系统获得的配置,它将返回一个最接近你的需求的配置*/

eglChooseConfig(display,/*有效的显示器句柄*/

attribs,/*以EGL_NONE结束的参数数组*/

&config,/*Surface的EGL配置*/

1,/*Surface的EGL配置个数*/

&numConfigs);/*系统中Surface的EGL配置的总个数*/

/*原型:

EGLbooleaneglChooseConfig(EGLDisplaydpy,

*constEGLint*attr_list,

*EGLConfig*config,

*EGLintconfig_size,

*EGLint*num_config);

*/

/*EGL_NATIVE_VISUAL_IDisanattributeoftheEGLConfig

*thatisguaranteedtobeacceptedbyANativeWindow_setBuffersGeometry().

*EGL_NATIVE_VISUAL_ID是一个EGLConfig的属性,

*保证被ANativeWindow_setBuffersGeometry函数认可。

*

*AssoonaswepickedaEGLConfig,

*wecansafelyreconfiguretheA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 电大

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1