Android应用程序的编译流程及使用Ant编译项目的攻略
一、Android应用程序的编译流程
Android应用程序的编译流程通常分为以下几个步骤:
- 编写Java代码和Android资源文件;
- 使用Android SDK中的工具将Java代码和Android资源文件编译成.dex文件(Dalvik可执行文件)和资源文件(资源文件可以是二进制文件或XML文件);
- 使用Android SDK中的aapt工具将.dex文件和资源文件打包成APK文件;
- 使用签名工具对APK文件进行签名;
- 使用zipalign工具对APK文件进行对齐。
编写Java代码和Android资源文件的过程就不多赘述了,下面主要介绍一下使用Ant编译Android项目的过程。
二、使用Ant编译项目的攻略
1. 安装Ant
首先,要确保已经安装了Ant。可以从官方网站(https://ant.apache.org/)下载Ant安装包并进行安装。
安装完成后,在命令行中输入“ant”命令,如果能正常运行Ant,则表示安装成功。
2. 配置环境变量
为了让Ant能够正常工作,还需要配置一些环境变量。具体来说,需要将以下路径添加到系统的PATH环境变量中:
- Ant的bin目录;
- Java JDK的bin目录;
- Android SDK的tools和platform-tools目录。
3. 编写build.xml文件
Ant使用build.xml文件来构建项目,因此需要在Android项目的根目录下创建一个build.xml文件。
build.xml文件的主要内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyApp" default="dist" basedir=".">
<property name="src.dir" value="src"/>
<property name="out.dir" value="out"/>
<property name="build.dir" value="${out.dir}/build"/>
<property name="dist.dir" value="${out.dir}/dist"/>
<property name="android.jar" value="${android.sdk}/platforms/${android.target}/android.jar"/>
<path id="android.antlibs">
<pathelement path="${android.sdk}/tools/lib"/>
<pathelement path="${android.sdk}/tools/lib/ant-tasks"/>
</path>
<taskdef name="dex" classname="com.android.ant.DexExecTask" classpathref="android.antlibs"/>
<taskdef name="aapt" classname="com.android.ant.AaptExecTask" classpathref="android.antlibs"/>
<taskdef name="signjar" classname="org.apache.tools.ant.taskdefs.SignJar" />
<target name="clean">
<delete dir="${out.dir}"/>
</target>
<target name="build">
<mkdir dir="${build.dir}"/>
<javac srcdir="${src.dir}" destdir="${build.dir}" includeantruntime="false">
<classpath>
<pathelement path="${android.jar}"/>
</classpath>
</javac>
<aapt executable="${android.sdk}/build-tools/${build.tools.version}/aapt">
<sourcefile file="${manifest.file}"/>
<arg value="package"/>
<arg value="-f"/>
<arg value="-m"/>
<arg value="-J"/>
<arg path="${gen.dir}"/>
<arg value="-S"/>
<arg path="${res.dir}"/>
<arg value="-I"/>
<arg path="${android.jar}"/>
<arg value="-F"/>
<arg path="${out.apk}"/>
<arg value="--debug-mode"/>
</aapt>
<dex executable="${android.sdk}/build-tools/${build.tools.version}/dx">
<inputpath path="${build.dir}"/>
<outputpath path="${intermediate.dex.file}"/>
</dex>
<mkdir dir="${dist.dir}"/>
<signjar alias="${keystore.alias}" storetype="${keystore.type}" keystore="${keystore.file}" signedjar="${out.signed.apk}" storepass="${keystore.password}">
<fileset dir="${out.dir}" includes="*.apk"/>
</signjar>
<zipalign executable="${android.sdk}/build-tools/${build.tools.version}/zipalign" verbose="true" input="${out.signed.apk}" output="${out.dist.apk}"/>
</target>
<target name="dist">
<echo message="Building APK file..."/>
<antcall target="clean"/>
<antcall target="build"/>
</target>
</project>
build.xml文件中定义了以下属性:
- src.dir:源代码目录;
- out.dir:输出目录;
- build.dir:编译目录;
- dist.dir:最终生成的APK文件目录;
- android.sdk:Android SDK安装目录;
- android.target:目标版本;
- build.tools.version:编译工具版本;
- keystore.alias:签名别名;
- keystore.file:签名证书文件;
- keystore.password:签名证书密码。
build.xml文件中定义了以下任务:
- clean:清除输出目录;
- build:编译Java代码,生成R.java文件和.aapt文件,将Java代码和资源文件打包成.dex文件,签名生成APK文件,对APK文件进行对齐;
- dist:生成APK文件,包括清除输出目录和编译过程。
4. 配置build.properties文件
除了build.xml文件之外,Ant还需要读取另一个配置文件build.properties。该文件的内容如下:
# Android SDK
android.sdk = /path/to/android-sdk
# Target version
android.target = android-26
# Build tools version
build.tools.version = 26.0.2
# Keystore properties
keystore.file = /path/to/keystore
keystore.alias = my_alias
keystore.type = JKS
keystore.password = your_password
# Manifest properties
manifest.file = AndroidManifest.xml
# Resources properties
gen.dir = gen
res.dir = res
# Output properties
out.apk = ${out.dir}/MyApp.apk
out.signed.apk = ${out.dir}/MyApp-signed.apk
out.dist.apk = ${dist.dir}/MyApp.apk
# Intermediate properties
intermediate.dex.file = ${out.dir}/classes.dex
其中,主要需要修改的属性包括:
- android.target:目标版本;
- build.tools.version:编译工具版本;
- keystore.file:签名证书文件;
- keystore.alias:签名别名;
- keystore.password:签名证书密码。
5. 使用Ant编译Android项目
配置完build.xml和build.properties文件后,就可以使用Ant来编译Android项目了。在项目根目录下执行以下命令即可:
$ ant dist
如果一切顺利,将在dist.dir目录下生成一个名为MyApp.apk的APK文件。
6. 示例说明
下面给出两个示例:
示例1:Hello World
假设我们现在要编写一个简单的Hello World程序,界面只包含一个TextView,显示“Hello World!”。首先,我们在Android Studio中创建一个新的Android项目,并在MainActivity中添加以下代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.text_view);
textView.setText("Hello World!");
}
}
接着,在res/layout目录中创建一个名为activity_main.xml的布局文件,代码如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24sp"
android:textStyle="bold"
android:textColor="#000000" />
</RelativeLayout>
完成这些步骤后,可以在Android Studio中运行项目并查看效果。
然后,我们将这个项目导出为一个Android工程,并使用Ant编译。为此,需要在项目根目录下创建一个build.xml文件,并按照上面的方法进行配置。
接着,执行以下命令即可编译项目:
$ ant dist
如果一切顺利,将在dist.dir目录下生成一个名为HelloWorld.apk的APK文件。
示例2:使用第三方库
假设我们现在要编写一个使用了第三方库的Android应用程序。为了方便演示,我们将使用Google提供的Gson库。
首先,我们在Android Studio中创建一个新的Android项目,并在app/build.gradle文件中添加以下依赖:
dependencies {
implementation 'com.google.code.gson:gson:2.8.5'
}
接着,在MainActivity中添加以下代码:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "GsonDemo";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textView = findViewById(R.id.text_view);
Gson gson = new Gson();
String json = "{\"name\":\"Alice\",\"age\":18}";
Person person = gson.fromJson(json, Person.class);
textView.setText(person.toString());
Log.d(TAG, "onCreate: " + person);
}
private static class Person {
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
}
在示例代码中,我们使用了Gson库将一个JSON字符串转换为一个Person对象,并将该对象输出到TextView和日志中。
完成这些步骤后,可以在Android Studio中运行项目并查看效果。
然后,我们将这个项目导出为一个Android工程,并使用Ant编译。为此,需要在项目根目录下创建一个build.xml文件,并按照上面的方法进行配置。
另外,还需要在build.properties文件中添加Gson库的依赖路径,例如:
# Libraries
libs.dir = lib
gson.jar = ${libs.dir}/gson-2.8.5.jar
接着,将Gson库的JAR文件复制到libs目录下,并将以下代码添加到build.xml文件中:
<path id="classpath">
<pathelement path="${android.jar}"/>
<pathelement path="${gson.jar}"/>
</path>
这样就可以指定Ant编译时使用Gson库了。
最后,执行以下命令即可编译项目:
$ ant dist
如果一切顺利,将在dist.dir目录下生成一个名为GsonDemo.apk的APK文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android应用程序的编译流程及使用Ant编译项目的攻略 - Python技术站