欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android学习笔记二:第一个应用程序的深入说明

程序员文章站 2022-03-02 20:27:49
...
    接上文
    第一个程序已经在模拟器中运行起来了,但是我们只是有了一个感性的认识,对程序结构没有说明,下面我们来对这个程序来做一些深入的说明。
    首先我们还是从代码结构来说起:
Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
    src目录下存放的是Java源代码,这和所有的Java项目都是一样的,没有特别之处。这里我们的包声明为org.ourpioneer。
    gen目录下是Aandroid自动控制生成的文件,这里面最重要的一个就是R.java,其中会自动放置我们添加的所有资源和组件,比文字信息,如图片信息,视图控件信息,布局信息等。我们不能修改该文件的任何内容,否则程序会引发严重错误。这里多说一点就是我们编写的程序不会直接和资源,组件文件打交道,都是通过R.java中的信息来获取的。
    Android 2.3.3是说我们构建Android项目使用的版本号,要说明一点这里是最低版本,也就是说我们构建的程序不能在低于2.3.3版本的Android设备上运行。在这里我们也可以看到我们引用Android类库的位置。
    Android Dependencies是我们项目引用的依赖,这里仅有一个,可以点看它的内容,作为程序类库上的依赖,这里没有可多说的地方。
    assets表示资源,也就是程序资源文件存放的地方,这些资源比如图片,音乐,文字和配置信息等。但是可以看到这个文件夹是空的,说明我们没有使用,原因是我们现在一般使用res文件夹来存放这些信息了,下面会说说到。
    bin目录,不用多说,存放的是我们项目编译之后的文件,同时在这里也可以找到生成的apk包,那么就可以在Android设备上使用该apk来进行安装。
    res目录是我们真正存放资源文件的地方,根据命名来看,以drawable开头的目录,肯定存放的是图片的文件夹。hdpi存放高清图片,ldpi存放低分辨率图片,mdpi存放中等分辨率图片,xhdpi存放的就是超高清的图片了。它们针对的是不同分辨率的Android设备。我们创建的项目中,这四个图片文件夹下都有内容相同的一个图片(ic_launcher.png),打开后发现它们的分辨率是不同的。
    res下的layout目录存放的是布局管理器的配置信息,values目录存放的是所有的文字信息,也就是用于显示的文字和布局的配置是分离的,便于项目的维护。layout下的main.xml会自动反映到R.java中,如果我们再在layout目录下创建一个布局文件,那么这个文件名也会自动反映到R.java中。
    res中的values下的文件都是资源文件,如果我们继续新建,都是resources类型的文件,而在resources中的string类型值会被自动反映到R.java中。resources有string,color,style等子类型,它们也都会自动反映到R.java中,因为这些都是我们程序中的资源。如果将它们的name属性修改或者将它们删除,那么R.java中的内容也会自动被修改或移除,这都是同步进行的。
    下面从strings.xml说起,我们打开看看这个文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, HelloAndroidActivity!</string>
    <string name="app_name">HelloAndroid</string>
</resources>

    根元素是resources,说明这也是一种资源,而子元素string说明是字符串类型的资源,这里有两个string类型的值,一个是app_name,一个是hello,我们可以在项目的其它地方使用它们。
    这里补充说明几点内容:

    为了今后的扩展,我们可以在res/values下创建其它文件,比如存放数组的arrays.xml,存放样式的styles.xml等。
    同时我们可以在res下创建raw文件夹用于放置多媒体原生文件,如视频,音频等。创建xml文件夹用于放置配置信息。创建anim文件夹用于放置动画效果。

    再来看main.xml,就是布局管理器配置文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
</LinearLayout>

    先不深究布局管理器,这里面是我们第一个程序的界面中的内容。一个线性布局管理器中仅有一个组件,就是TextView,用于显示文本信息,这里的android:text属性就是使用的strings.xml中的hello字符串“Hello World, HelloAndroidActivity!”。
    下面来看一下AndroidManifest.xml,这是我们一个Android项目级的配置文件,是Android项目中最重要的组成部分。比如,现在这个文件中有如下信息:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.ourpioneer"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="10" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".HelloAndroidActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

    这里根元素是manifest,schema声明也没什么多说的,其中的package是我们打包的信息,versionCode和versionName表示我们程序的版本。uses-sdk元素的minSdkVsersion表示的是最小版本,2.3.3就是10。
    <application>元素icon表示我们程序安装在Android设备上的图标,也就是drawable文件夹下的ic_launcher.png。label表示在Android设备中程序的显示名称,就是前面strings.xml中的app_name字符串。
    <activity>元素是程序中的Activity声明,其中的name连同根元素manifest中的package共同组成Activity的类全名,就是org.ourpioneer.HelloAndroidActivity。子元素<intent-filter>这里先不做说明。
    图片文件夹中的内容就先不看了,下面看看R.java,看看此时项目为我们自动生成了哪些信息:
/* AUTO-GENERATED FILE.  DO NOT MODIFY.
 *
 * This class was automatically generated by the
 * aapt tool from the resource data it found.  It
 * should not be modified by hand.
 */
package org.ourpioneer;
public final class R {
    public static final class attr {
    }
    public static final class drawable {
        public static final int ic_launcher=0x7f020000;
    }
    public static final class layout {
        public static final int main=0x7f030000;
    }
    public static final class string {
        public static final int app_name=0x7f040001;
        public static final int hello=0x7f040000;
    }
}

    注释中声明,这是Android生成的文件,不允许修改。final类型的类,是不允许被继承的,在R.java中声明的静态内部类就是我们上面说的各种资源,比如attr,drawable,layout,string等,那么我们在程序中就可以通过R.string.hello来获取到hello。
     最后来看一下我们仅有的一个Java类,也就是HelloAndroidActivity,这是一个Activity程序,简单来说就是我们和Android程序进行交互的接口,通过Activity程序,我们可以完成界面的显示和事件的处理。
package org.ourpioneer;
import android.app.Activity;
import android.os.Bundle;
public class HelloAndroidActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);//Android生命周期方法
		setContentView(R.layout.main);//设置使用的布局管理器
	}
}

    HelloAndroidActivity类继承了android.app.Activity类,那么就是Android中的一个人机交互程序,覆盖onCreate方法,说明在程序创建时要做的事情,调用父类中方法,也就是可以看作为Android程序的生命周期方法。之后设置使用的布局管理器,调用方式就是通过R.java来进行的。这里R.layout.main就是调用我们layout目录下的main.xml中编写的布局管理器和组件。
    至此,我们解释了第一个应用程序。之前我们已经在模拟起中看到了这个程序,但是还没有在真正的Android设备中来运行。那么要在Android设备中安装,就要先进行apk文件的创建。我们在项目的bin目录下可以获得为我们自动创建的apk文件,但是我们还是通过手动的方式来看看如何进行apk文件的打包。
    首先在AndroidManifest.xml中添加下面的内容:
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>

    也就是说我们要有安装包的权限。
    之后在Eclipe中的项目上点击邮件,选择Export导出,看到如下内容:
Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
    我们选择Export Android Application继续,
Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
    这里是选择我们要导出的Aandroid项目,现在,我们只有一个HelloAndroid,那么就选择继续,
Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
    首次导出,要创建keystore文件,我们选择一个keystore文件的位置,并输入密码继续,
Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
    填写这么多内容就足够了,密码是我们上个页面设置的,然后继续,
Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
    选择apk文件的位置,点击完成,我们就得到了导出的apk安装文件。
    下面我们在Android设备中来进行实际安装。这里的运行环境为Motorola Defy+,Android版本为2.3.7的MIUI,我们最终得到如下的运行效果,和在模拟器中的运行效果是一致的,至于UI显示略有不同,这就取决于Android设备使用的ROM了:
Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
    接下文
  • Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
  • 大小: 22.7 KB
  • Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
  • 大小: 51.1 KB
  • Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
  • 大小: 45.6 KB
  • Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
  • 大小: 47.6 KB
  • Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
  • 大小: 49.6 KB
  • Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
  • 大小: 45 KB
  • Android学习笔记二:第一个应用程序的深入说明
            
    
    博客分类: 积少成多 javaandroid 
  • 大小: 26.4 KB
相关标签: java android