多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
在分析Android系统源代码的过程中,常常会对系统的一些实现原理或者执行逻辑有不确定的地方,这时候就有必要亲自写一个应用程序来验证系统的行为,从而证实系统的实现原理或者执行逻辑。在本书后面的章节中,我们也会经常结合具体的应用程序实例来分析Android系统的源代码,本节就介绍如何在Android源代码工程环境中开发Android应用程序。 本节不打算详细介绍Android应用程序的开发方法,并假设读者已经熟悉如何使用Android SDK来开发Android应用程序,具体可以参考前面在1.2小节中所介绍的《Professional Android 2 Application Development》和《Google Android SDK开发范例大全》两本书。 在Android源代码工程环境中,我们通常把实验性质的Android应用程序放在packages/experimental目录下。本书将要开发的应用程序名称为HelloAndroid,它的目录结构如下: ~~~ ~/Android/packages/experimental/HelloAndroid ----AndroidManifest.xml ----Android.mk ----src ----shy/luo/hello ----HelloAndroid.java ----res ----layout ----main.xml ----values ----strings.xml ----drawable ----icon.png ~~~ Android应用程序工程一般包含有一个源代码目录src、一个资源目录res、一个配置文件AndroidManifest.xml和一个编译脚本文件Android.mk。接下来,我们就分别介绍这些文件的实现。 HelloAndroid.java ~~~ package shy.luo.hello; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class HelloAndroid extends Activity { private final static String LOG_TAG = "shy.luo.hello.HelloAndroid"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.i(LOG_TAG, "HelloAndroid Activity Created."); } } ~~~ 这是应用程序HelloAndroid的源代码文件,定义了一个Activity组件HelloAndroid,用作应用程序的主界面。 main.xml ~~~ <!--?xml version="1.0" encoding="utf-8"?--> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center"> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:text="@string/hello_android"> </textview> </linearlayout> ~~~ 这是应用程序HelloAndroid的主界面配置文件,在屏幕中间用一个TextView控件来显示一段“Hello Android”文本。 strings.xml ~~~ <!--?xml version="1.0" encoding="utf-8"?--> <resources> <string name="app_name">HelloAndroid</string> <string name="hello_android">Hello Android</string> </resources> ~~~ 这是应用程序HelloAndroid的字符串资源文件,定义了在应用程序中用到的各个字符串。 icon.png 这是应用程序HelloAndroid的图标,可以根据需要来放置不同的图片文件。 AndroidManifest.xml ~~~ <!--?xml version="1.0" encoding="utf-8"?--> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="shy.luo.hello" android:versioncode="1" android:versionname="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".HelloAndroid" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"></action> <category android:name="android.intent.category.LAUNCHER"></category> </intent-filter> </activity> </application> </manifest> ~~~ 这是应用程序HelloAndroid的配置文件,应用程序HelloAndroid中所用到的Activity组件HelloAndroid需要在这里配置之后才能使用。 Android.mk ~~~ LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := HelloAndroid include $(BUILD_PACKAGE) ~~~ 这是应用程序HelloAndroid的编译脚本文件,指定应用程序的名字为“HelloAndroid”。 应用程序HelloAndroid的各个文件都准备好以后,我们就可以对它们进行编译了。在Android源代码工程环境中开发Android应用程序不需要使用make命令来重新编译整个Android源代码工程,因为这将是一个漫长的过程。我们只需要单独编译新增的Android应用程序模块就可以了。在接下来的1.6小节中,我们将详细介绍如何单独编译Android源代码工程中的Android应用程序模块。 应用程序HelloAndroid经过编译,以及重新打包Android系统文件system.img之后,我们就可以使用这个新的system.img文件来启动Android模拟器了。Android模拟器启动起来之后,我们就可以在应用程序启动器中看到应用程序HelloAndroid的快捷图标了。点击应用程序HelloAndroid的快捷图标,就可以将它启动起来,如图1-2所示。 ![](https://box.kancloud.cn/581d446f43ad3752d35d10f8a99e83d5_794x564.png =794x564)