分析template project之proj.android(1)

2015年03月22日 11:49 0 点赞 0 评论 更新于 2017-05-01 20:53

AndroidManifest.xml

AndroidManifest.xml 是一个 Android App 的主要配置文件,它包含了 App 的各种重要信息,如 XML 版本、包名、最低支持的 SDK 版本、最低 OpenGL ES 版本号、App 名称、App 图标、Activity 相关信息(包括 Activity 的名称、标签、横竖屏设置、主题)、Intent 信息、支持的屏幕大小以及 App 需要的权限等。

版本号相关

  • android:versionCode:项目的内部版本号,用于标识应用的不同版本,通常为一个整数,在应用更新时可用于版本控制。
  • android:versionName:项目的外部版本号,是展示给用户看的版本号,一般为类似于 1.0.0 这样的字符串。

安装位置设置

android:installLocation=”auto”:该属性决定了程序的安装位置。设置为 auto 时,程序可能被安装在外部存储介质上(例如 SD 卡),但默认会被安装到手机内存中。当手机内存不足时,程序将被安装到外部存储介质上。并且,当程序安装到手机上后,用户可以自行决定将程序放在外部存储介质还是内存中。

元数据设置

<meta-data android:name=”android.app.lib_name” android:value=”cocos2dcpp”>:定义了一个键值对,其中键为 android.app.lib_name,值为 cocos2dcpp。在项目中可以通过相应的方法获取到该值。

配置变更处理

android:configChanges=”orientation”:当配置发生变更(如屏幕旋转)时,如果配置了该属性且没有对该事件进行处理,这个事件将被丢弃。

Intent 相关

  • ACTION_MAIN:Android 应用程序的入口,每个 Android 应用必须且只能包含一个此类型的 Action 声明。
  • CATEGORY_LAUNCHER:设置该组件为当前应用程序启动器中优先级最高的 Activity,通常与入口 ACTION_MAIN 配合使用。

权限设置

<uses-permission android:name=”android.permission.INTERNET”>:当应用需要访问网络时,需要在 AndroidManifest.xml 中添加此权限声明。

src 文件夹中的 org.cocos2dx.cpp.AppActivity

src 文件夹下的 org.cocos2dx.cpp.AppActivity 中,创建了一个继承于 Cocos2dxActivity 类的 Activity AppActivity。关于 Cocos2dxActivity 类的详细介绍,可参考我的另外一篇文章 站在 Android App 开发者角度分析 template project 之 proj.android(2)

assets 文件夹

assets 文件夹包含了一些图片资源和字体资源,这些资源可以在应用运行时被访问和使用。

bin 文件夹

理论上,bin 文件夹应该放置生成的文件,如 APK 文件。但目前该文件夹为空。

gen 文件夹

  • R.java:可以查看所有经过编译的资源信息,它是 Android 自动生成的一个类,用于引用项目中的资源。
  • BuildConfig.java:可以查看应用的 debug 模式相关信息。

jni 文件夹

JNI 文件夹是 SDK 编程与 NDK 编程的接口,主要包含以下重要文件:

Android.mk

  • call import-add-path:用于修改 NDK_MODULE_PATH,该路径用于设置 NDK_MODULE
  • LOCAL_MODULE:指明模块名称,不同的模块名称不能相同。
  • LOCAL_MODULE_FILENAME:设置模块的二进制文件名称,不同模块的该名称可以相同。它可以帮助你用 NDK 构建脚本选择正常或者优化版本,同时保持 Java 源代码中相同且简单的加载指令。
  • LOCAL_SRC_FILESLOCAL_C_INCLUDES:分别指明编译所需要的源文件和头文件。
  • LOCAL_STATIC_LIBRARIES:引入静态库。
  • include $(BUILD_SHARED_LIBRARY):告诉编译器要生成动态库。
  • call import-module:通过 NDK_MODULE_PATH 引入模块,在这里基本上将 cocos2d 中的所有路径都包含进去了,这样在 Java 层就可以调用 cocos2d 中 JNI 对应的 C++ 文件。

application.mk

application.mk 里面设置了一些变量,这些变量会影响 NDK 编译的行为。

main.cpp

main.cpp 中使用了 AppDelegate 类,并实例化了一个对象。关于 AppDelegate 类的详细介绍,可参考我的另外一篇文章 站在 Android App 开发者角度分析 template project 之 proj.android

lib 文件夹

理论上,lib 文件夹中应该存放 JNI 文件夹中通过 NDK 生成的本地库文件。但目前该文件夹中只有 2 个与 GDB 相关的文件。

obj 文件夹

obj 文件夹里面包含了很多中间文件,这些文件不会被打包到 APK 中。保留这些文件,下次编译时只会编译修改后的文件;如果删除了这些文件,就需要从头开始编译。

res 文件夹

res 文件夹根据分辨率不同,分别存放着不同大小的图片资源、布局文件以及变量文件,这样可以根据设备的不同分辨率加载合适的资源。

作者信息

menghao

menghao

共发布了 332 篇文章