Android的应用程序结构分析:HelloActivity 第二部分【转】
生活随笔
收集整理的這篇文章主要介紹了
Android的应用程序结构分析:HelloActivity 第二部分【转】
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
第二部分: 編譯的中間結(jié)果
這個(gè)HelloActivity工程經(jīng)過編譯后將生成out/target/common/obj/APPS /HelloActivity_intermediates/目錄,這個(gè)目錄中的內(nèi)容都是HelloActivity工程相關(guān)的,更具體地說都與 development/samples/HelloActivity/中的Android.mk文件相關(guān)。
out/target/common/obj/APPS/HelloActivity_intermediates/
|-- classes.dex? ?? ?? ?? ?? ?? ?? ???(字節(jié)碼)
|-- classes.jar? ?? ?? ?? ?? ?? ?? ???(JAR文件)
|-- public_resources.xml? ?? ?? ?? ???(根據(jù)resources結(jié)構(gòu)生成的xml)
`-- src
|-- R.stamp
`-- com
`-- example
`-- android
`-- helloactivity
`-- R.java? ?? ???(resources生成的文件)
classes.dex是一個(gè)最重要的文件,它是給Android的JAVA虛擬機(jī)Dalvik運(yùn)行的字節(jié)碼文件。
classes.jar是一個(gè)JAR文件,JAR的含義為Java ARchive,也就是Java 歸檔,是一種與平臺(tái)無關(guān)的文件格式,可將多個(gè)文件合成一個(gè)文件。解壓縮之后的目錄結(jié)構(gòu):(JAVA標(biāo)準(zhǔn)編譯得到的類)
classes
|-- META-INF
|? ?`-- MANIFEST.MF
`-- com
`-- example
`-- android
`-- helloactivity
|-- HelloActivity.class
|-- R$attr.class
|-- R$id.class
|-- R$layout.class
|-- R$string.class
`-- R.class
各個(gè)以class為擴(kuò)展名的文件,事實(shí)上是JAVA程序經(jīng)過編譯后的各個(gè)類的字節(jié)碼。
第三部分: 目標(biāo)apk文件
目標(biāo)apk文件是Android的JAVA虛擬機(jī)Dalvik安裝和運(yùn)行的文件,事實(shí)上這個(gè)apk文件將由編譯的中間結(jié)果和原始文件生成。apk文件的本 質(zhì)是一個(gè)zip包。這個(gè)APK包解壓縮后的目錄結(jié)構(gòu)如下所示:
out/target/product/generic/obj/APPS/HelloActivity_intermediates/package.apk_FILES/
|-- AndroidManifest.xml
|-- META-INF
|? ?|-- CERT.RSA
|? ?|-- CERT.SF
|? ?`-- MANIFEST.MF
|-- classes.dex
|-- res
|? ?`-- layout
|? ?? ? `-- hello_activity.xml
`-- resources.arsc
值得注意的是,這里的xml文件經(jīng)過了處理,和原始的文件不太一樣,不能按照文本文件的方式閱讀。
第四部分: 源代碼的各個(gè)文件
Android.mk是整個(gè)工程的“Makefile”,其內(nèi)容如下所示:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := samples
# Only compile source java files in this apk.
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := HelloActivity
LOCAL_SDK_VERSION := current
include $(BUILD_PACKAGE)
# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
這個(gè)文件在各個(gè)Android的工程中都是類似的,其中LOCAL_PACKAGE_NAME表示了這個(gè)包的名字。LOCAL_MODULE_TAGS 表示了模塊的標(biāo),在這里使用的是
samples,正式的應(yīng)用程序(packages目錄中的應(yīng)用)中多使用eng development。
AndroidManifest.xml是這個(gè)HelloActivity工程的描述文件,其內(nèi)容如下所示:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"
package=\"com.example.android.helloactivity\">
<application android:label=\"Hello, Activity!\">
<activity android:name=\"HelloActivity\">
<intent-filter>
<action android:name=\"android.intent.action.MAIN\"/>
<category android:name=\"android.intent.category.LAUNCHER\"/>
</intent-filter>
</activity>
</application>
</manifest>
其中package用于說明這個(gè)包的名稱,android:labeapplication中的內(nèi)容是表示這個(gè)應(yīng)用程序在界面上顯示的標(biāo) 題,activity中的android:name表示這個(gè)Android的活動(dòng)的名稱。
文件src/com/example/android/helloactivity/HelloActivity.java是程序主要文件,由JAVA語 言寫成
package com.example.android.helloactivity;
import android.app.Activity;? ?? ?? ?? ?? ?
import android.os.Bundle;? ?? ?? ?? ?? ?? ?
public class HelloActivity extends Activity {
public HelloActivity() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_activity);
}
}
com.example.android.helloactivity表示的是這個(gè)包的名稱,在文件的頭部引入了兩個(gè)包 android.app.Activity是一個(gè)Android活動(dòng)(Activity)包,每一個(gè)Android活動(dòng)都需要繼承Activity類。
包android.os.Bundle用于映射字符串的值。
onCreate()是一個(gè)重載的函數(shù),在這個(gè)函數(shù)中實(shí)現(xiàn)應(yīng)用程序創(chuàng)建的所執(zhí)行的過程。其中setContentView()設(shè)置當(dāng)前的視圖 (View)。
設(shè)置的方法是使用一個(gè)文件,這個(gè)文件因此決定了視圖中包含的內(nèi)容。這里使用的是R.layout.hello_activity,表示從 res/layout/目錄中使用hello_activity.xml文件。
res/layout/hello_activity.xml文件的內(nèi)容如下所示:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<EditText xmlns:android=\"http://schemas.android.com/apk/res/android\" android:id=\"@+id/text\"
android:layout_width=\"fill_parent\"
android:layout_height=\"fill_parent\"
android:textSize=\"18sp\"
android:autoText=\"true\"
android:capitalize=\"sentences\"
android:text=\"@string/hello_activity_text_text\" />
其中定義了一個(gè)可編輯的文本(EditText),下面的各項(xiàng)其實(shí)是它的各種屬性,android:text表示這個(gè)文本的內(nèi) 容,string/hello_activity_text_text表示找到相應(yīng)的文件,也就是res/value/string.xml文件中的 hello_activity_text_text文本。
res/value/string.xml的內(nèi)容如下所示:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<resources>
<string name=\"hello_activity_text_text\">Hello, World!</string>
</resources>
hello_activity_text_text文本被res/layout/hello_activity.xml文件引用,正是應(yīng)用程序運(yùn)行時(shí)在屏 幕顯示的文本。 閱讀全文
類別:android教程?查看評(píng)論
這個(gè)HelloActivity工程經(jīng)過編譯后將生成out/target/common/obj/APPS /HelloActivity_intermediates/目錄,這個(gè)目錄中的內(nèi)容都是HelloActivity工程相關(guān)的,更具體地說都與 development/samples/HelloActivity/中的Android.mk文件相關(guān)。
out/target/common/obj/APPS/HelloActivity_intermediates/
|-- classes.dex? ?? ?? ?? ?? ?? ?? ???(字節(jié)碼)
|-- classes.jar? ?? ?? ?? ?? ?? ?? ???(JAR文件)
|-- public_resources.xml? ?? ?? ?? ???(根據(jù)resources結(jié)構(gòu)生成的xml)
`-- src
|-- R.stamp
`-- com
`-- example
`-- android
`-- helloactivity
`-- R.java? ?? ???(resources生成的文件)
classes.dex是一個(gè)最重要的文件,它是給Android的JAVA虛擬機(jī)Dalvik運(yùn)行的字節(jié)碼文件。
classes.jar是一個(gè)JAR文件,JAR的含義為Java ARchive,也就是Java 歸檔,是一種與平臺(tái)無關(guān)的文件格式,可將多個(gè)文件合成一個(gè)文件。解壓縮之后的目錄結(jié)構(gòu):(JAVA標(biāo)準(zhǔn)編譯得到的類)
classes
|-- META-INF
|? ?`-- MANIFEST.MF
`-- com
`-- example
`-- android
`-- helloactivity
|-- HelloActivity.class
|-- R$attr.class
|-- R$id.class
|-- R$layout.class
|-- R$string.class
`-- R.class
各個(gè)以class為擴(kuò)展名的文件,事實(shí)上是JAVA程序經(jīng)過編譯后的各個(gè)類的字節(jié)碼。
第三部分: 目標(biāo)apk文件
目標(biāo)apk文件是Android的JAVA虛擬機(jī)Dalvik安裝和運(yùn)行的文件,事實(shí)上這個(gè)apk文件將由編譯的中間結(jié)果和原始文件生成。apk文件的本 質(zhì)是一個(gè)zip包。這個(gè)APK包解壓縮后的目錄結(jié)構(gòu)如下所示:
out/target/product/generic/obj/APPS/HelloActivity_intermediates/package.apk_FILES/
|-- AndroidManifest.xml
|-- META-INF
|? ?|-- CERT.RSA
|? ?|-- CERT.SF
|? ?`-- MANIFEST.MF
|-- classes.dex
|-- res
|? ?`-- layout
|? ?? ? `-- hello_activity.xml
`-- resources.arsc
值得注意的是,這里的xml文件經(jīng)過了處理,和原始的文件不太一樣,不能按照文本文件的方式閱讀。
第四部分: 源代碼的各個(gè)文件
Android.mk是整個(gè)工程的“Makefile”,其內(nèi)容如下所示:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := samples
# Only compile source java files in this apk.
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := HelloActivity
LOCAL_SDK_VERSION := current
include $(BUILD_PACKAGE)
# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
這個(gè)文件在各個(gè)Android的工程中都是類似的,其中LOCAL_PACKAGE_NAME表示了這個(gè)包的名字。LOCAL_MODULE_TAGS 表示了模塊的標(biāo),在這里使用的是
samples,正式的應(yīng)用程序(packages目錄中的應(yīng)用)中多使用eng development。
AndroidManifest.xml是這個(gè)HelloActivity工程的描述文件,其內(nèi)容如下所示:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"
package=\"com.example.android.helloactivity\">
<application android:label=\"Hello, Activity!\">
<activity android:name=\"HelloActivity\">
<intent-filter>
<action android:name=\"android.intent.action.MAIN\"/>
<category android:name=\"android.intent.category.LAUNCHER\"/>
</intent-filter>
</activity>
</application>
</manifest>
其中package用于說明這個(gè)包的名稱,android:labeapplication中的內(nèi)容是表示這個(gè)應(yīng)用程序在界面上顯示的標(biāo) 題,activity中的android:name表示這個(gè)Android的活動(dòng)的名稱。
文件src/com/example/android/helloactivity/HelloActivity.java是程序主要文件,由JAVA語 言寫成
package com.example.android.helloactivity;
import android.app.Activity;? ?? ?? ?? ?? ?
import android.os.Bundle;? ?? ?? ?? ?? ?? ?
public class HelloActivity extends Activity {
public HelloActivity() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_activity);
}
}
com.example.android.helloactivity表示的是這個(gè)包的名稱,在文件的頭部引入了兩個(gè)包 android.app.Activity是一個(gè)Android活動(dòng)(Activity)包,每一個(gè)Android活動(dòng)都需要繼承Activity類。
包android.os.Bundle用于映射字符串的值。
onCreate()是一個(gè)重載的函數(shù),在這個(gè)函數(shù)中實(shí)現(xiàn)應(yīng)用程序創(chuàng)建的所執(zhí)行的過程。其中setContentView()設(shè)置當(dāng)前的視圖 (View)。
設(shè)置的方法是使用一個(gè)文件,這個(gè)文件因此決定了視圖中包含的內(nèi)容。這里使用的是R.layout.hello_activity,表示從 res/layout/目錄中使用hello_activity.xml文件。
res/layout/hello_activity.xml文件的內(nèi)容如下所示:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<EditText xmlns:android=\"http://schemas.android.com/apk/res/android\" android:id=\"@+id/text\"
android:layout_width=\"fill_parent\"
android:layout_height=\"fill_parent\"
android:textSize=\"18sp\"
android:autoText=\"true\"
android:capitalize=\"sentences\"
android:text=\"@string/hello_activity_text_text\" />
其中定義了一個(gè)可編輯的文本(EditText),下面的各項(xiàng)其實(shí)是它的各種屬性,android:text表示這個(gè)文本的內(nèi) 容,string/hello_activity_text_text表示找到相應(yīng)的文件,也就是res/value/string.xml文件中的 hello_activity_text_text文本。
res/value/string.xml的內(nèi)容如下所示:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<resources>
<string name=\"hello_activity_text_text\">Hello, World!</string>
</resources>
hello_activity_text_text文本被res/layout/hello_activity.xml文件引用,正是應(yīng)用程序運(yùn)行時(shí)在屏 幕顯示的文本。 閱讀全文
類別:android教程?查看評(píng)論
轉(zhuǎn)載于:https://www.cnblogs.com/alex77lee/archive/2010/05/19/1789928.html
總結(jié)
以上是生活随笔為你收集整理的Android的应用程序结构分析:HelloActivity 第二部分【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java父线程子线程
- 下一篇: 了解员工工作的四种方法