当前位置:操作系统 > 安卓/Android >>

浅谈Android的资源编译过程

由于直接粘贴复制原因,故直接上传文档至此

转载请注明出处


 
一.APK的结构以及生成

APK是Android Package的缩写,即Android application package文件或Android安装包。每个要安装到Android平台的应用都要被编译打包为一个单独的文件,扩展名为 .apk。APK文件是用编译器编译生成的文件包,其中包含了应用的二进制代码、资源、配置文件等。通过将APK文件直接传到Android手机中执行即可安装。APK文件其实就是zip格式,但其扩展名被改为apk。在这里我们为了详细讲述Android应用程序我们将创建一个永恒的话题, 它就是HelloWorld

程序,在这里我们创建的Android的HelloWorld程序的目录结构如下所示:

一个典型的APK文件通常由下列内容组成:

   AndroidManifest.xml       程序全局配置文件

   classes.dex                Dalvik字节码

   resources.arsc             资源索引表, 解压缩resources.ap_就能看到

   res\                      该目录存放资源文件(图片,文本,xml布局)

   assets\                    该目录可以存放一些配置文件

   src\                       java源码文件

   libs\                     存放应用程序所依赖的库

   gen\                     编译器根据资源文件生成的java文件

   bin\                      由编译器生成的apk文件和各种依赖的资源

   META-INF\                该目录下存放的是签名信息

首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,示意图如下,其中包含编译、链接和签名等:

 


(1). 使用aapt工具将资源文件生成R.java文件, resources.arsc和打包资源文件

(2). 使用aidl工具将.aidl文件编译成.java文件

(3). 使用javac工具将.java文件编译成.class文件

(4). 使用dx脚本将众多.class文件转换成一个.dex文件

(5). 使用apkbuilder脚本将资源文件和.dex文件生成未签名的apk安装文件

(6). 使用jdk中的jarsigner对apk安装文件进行签名

上述工具都保存在android-sdk-linux中的tools/和platform-tools文件夹下面.

范例:

src/com.example.helloworldactivity:

package com.example.helloworldactivity;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.TextView;

public class MainActivity extends Activity {

    private final static String TAG = "MainActivity";

    private TextView mTextView = null;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        mTextView = (TextView)findViewById(R.id.text_view);

        Button showButton = (Button)findViewById(R.id.button);

        showButton.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                mTextView.setText(R.string.hello_world);

            }

        });

    }

}

res/layout/activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:orientation="vertical"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    <Button

        android:id="@+id/button"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="@string/show" />

    <TextView

        android:id="@+id/text_view"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="" />

</LinearLayout>

res/values/strings.xml:

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <string name="app_name">HelloWorldActivity</string>

    <string name="action_settings">Settings</string>

    <string name="show">Show</string>

    <string name="hello_world">Hello world!</string>

</resources>

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.example.helloworldactivity"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="17" />

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.example.helloworldactivity.MainActivity"

            android:label="@string/app_name" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

     

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,