分析template project之proj.android(1)
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_FILES
、LOCAL_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
文件夹根据分辨率不同,分别存放着不同大小的图片资源、布局文件以及变量文件,这样可以根据设备的不同分辨率加载合适的资源。