android native activityWord格式.docx
《android native activityWord格式.docx》由会员分享,可在线阅读,更多相关《android native activityWord格式.docx(19页珍藏版)》请在冰豆网上搜索。
android="
package="
com.example.native_activity"
android:
versionCode="
1"
versionName="
--ThisistheplatformAPIwhereNativeActivitywasintroduced.-->
--本地活动将引入的平台API-->
uses-sdkandroid:
minSdkVersion="
8"
/>
--This.apkhasnoJavacodeitself,sosethasCodetofalse.-->
--该.apk没有Java代码,所以设置hasCode属性值为假-->
applicationandroid:
label="
@string/app_name"
hasCode="
false"
--Ouractivityisthebuilt-inNativeActivityframeworkclass.
ThiswilltakecareofintegratingwithourNDKcode.-->
--我们的活动是内置本地活动框架类。
这将处理使我们的NDK代码成为一体。
-->
activityandroid:
name="
android.app.NativeActivity"
configChanges="
orientation|keyboardHidden"
--TellNativeActivitythenameofor.so-->
--告知本地活动共享库的名字-->
meta-dataandroid:
android.app.lib_name"
value="
native-activity"
intent-filter>
actionandroid:
android.intent.action.MAIN"
categoryandroid:
android.intent.category.LAUNCHER"
/intent-filter>
/activity>
/application>
/manifest>
--END_INCLUDE(manifest)-->
三、native-activity/res/values/strings.xml文件内容:
encoding="
resources>
stringname="
app_name"
NativeActivity<
/string>
/resources>
四、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"
*根据2.0版本Apache许可证授权
*youmaynotusethisfileexceptincompliancewiththeLicense.
*根据本许可证,你可以不使用此文件。
*YoumayobtainacopyoftheLicenseat
*你可以获得许可证的副本在
*http:
*Unlessrequiredbyapplicablelaworagreedtoinwriting,software
*distributedundertheLicenseisdistributedonan"
*WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
*除非因适用法律需要或书面同意,
*根据许可证分发的软件是基于"
*SeetheLicenseforthespecificlanguagegoverningpermissionsand
*limitationsundertheLicense.
*/
//BEGIN_INCLUDE(all)
/*JavaNativeInterface*/
#include<
jni.h>
/*错误报告机制*/
errno.h>
/*EGL*/
EGL/egl.h>
/*OpenGLES1.x*/
GLES/gl.h>
/*接收和处理传感器事件*/
android/sensor.h>
/*AndroidloggingAPI*/
android/log.h>
/*android-ndk-r5b/sources/android/native_app_glue静态库头文件*/
android_native_app_glue.h>
#defineLOGI(...)\
((void)__android_log_print(ANDROID_LOG_INFO,"
__VA_ARGS__))
#defineLOGW(...)\
((void)__android_log_print(ANDROID_LOG_WARN,"
/**
*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;
/*系统窗口句柄*/
/*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