今天老谢要学习如何编写自己的第一个Hello Android程序,并使其在UT4418开发板上运行。
经过几番纠结,老谢做了一个决定,将学习平台从原先的虚拟处理器goldfish换到了实际的UT4418开发板(免费给友坚科技打广告了)。老谢做这个决定,主要原因如下:
此货将会在未来很长一段时间陪伴老谢,它就是UT4418。
购买此货时,友坚科技有提供相应的source code(android 4.4)、使用手册、开发工具等,老谢分享于此,
http://pan.baidu.com/s/1i58Qadn
如果有涉及侵权等,请第一时间联系老谢,谢谢。
由于换了平台,编译环境、编译方法等与之前介绍goldfish时有小小差别,不过是大同小异了。无论你的学习是基于goldfish、UT4418、还是别的开发平台,编译source code等都是最基本的前提,方式方法存在小小差异,但理论绝对统一,老谢在此也不过多解释。
变更平台后,老谢花了小小时间熟悉了开发板的使用(包括开发环境的搭建,source code的编译,以及如何升级开发板程序等)。待一切都已经ready后,编写属于自己的第一个Android程序才是今天的重点。
大家都知道Android开发有两个大的方向:
老谢的主要方向是后者,那为何还要学习apk程序编写呢?其实,在后续的学习中,我们需要验证自己对某个知识点的理解是否正确,极有可能需要自己写一些测试程序来验证,那么自己写apk自然就很重要。但是,这种重要仅限于按照自己的实验需求来编写极其简单的apk应用程序。
Hello Android这个apk的编写,就是为了打通一条路,告诉我们如何在Android源代码中添加一个Android应用程序,并将其编译进Android系统,最后使其在开发板上运行。
第一步,
在./packages/apps目录下新建HelloAndroid文件夹,并按照如下目录结构,建立相应的folder
第二步,
在HelloAndroid/src/bo/xie/hello目录下新建HelloAndroid.java文件,并在其内输入:
package bo.xie.hello;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class HelloAndroid extends Activity{
private final static String LOG_TAG = "bo.xie.hello.HelloAndroid";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(LOG_TAG, "HelloAndroid Activity Created.");
}
}
这是应用程序的源代码文件,定义了Activity组件HelloAndroid,作为应用程序的主界面。
第三步,
在HelloAndroid/res/layout目录下新建文件main.xml,并在其中输入:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.androidcom/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>
在屏幕中间用TextView控件来显示一段“Hello Android”文本。
第四步,
在HelloAndroid/res/values目录下新建文件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/res/drawable目录下放入图片文件icon.png,这是应用程序的图标。
第六步,
在HelloAndroid目录下新建AndroidManifest.xml文件,输入:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="bo.xie.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" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
这是Android应用程序的配置文件,Activity等组件需要在这个文件中配置后方可使用。
第七步,
在HelloAndroid目录下新建Android.mk编译脚本文件,指定应用程序的名字为“HelloAndroid”
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程序代码已经编写完成,那如何将此程序编译进入我们的系统里呢?接着往下看。
我们还需要修改Android的makefile来配置需要编译的apk程序。进入./build/target/product目录找到generic.mk,此mk文件include了generic_no_telephony.mk文件,按照如下方式修改:
编译Android body
现在的修改只是涉及到Android部分,单独编译Android即可,UT4418的编译方式如下:
./build.sh -t android
最后,我们可以在./out/target/product/urbetter_s5p4418/system/app目录下看到编译生成的HelloAndroid.apk。此时在./out/target/product/urbetter_s5p4418目录下编译生成的system.img已经包含了HelloAndroid.apk。
升级验证
将编译出来的system.img升级到开发板中,待升级完毕后,在开发板上就能看到咱们的第一个HelloAndroid程序了,第二排第二个,看见了吧。
最后,老谢要感谢罗升阳老师,对Android的贡献与分享,谢谢您。
itxiebo
20160419