您的位置:首页 > 移动开发 > Android开发

Android源码开发----如何编写Android系统应用

2015-01-16 22:27 477 查看
上一篇博客已经完成了Android源码的编译工作,我们来看下源码目录(我的源码为三方移植包,所以目录会多了一点)


其中,package/app目录下放着我们的系统应用,也就是我们手机中出厂自带的,不能卸载掉的应用。其实是可以卸载掉的,具体操作请看我的博客。



现在我们要自己写系统应用,我就拿已经写好的来分析



分析:系统应用是没有eclipse下一下这些目录的,也就是该包不能在eclipse下打开,在编译该包是才会生成相应的R.java文件



其次,一个核心文件是:Android.mk文件,代码如下:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# LOCAL_SRC_FILES := $(call all-java-files-under, src)
# Also link against our own custom library.
# LOCAL_JAVA_LIBRARIES := framework
LOCAL_PACKAGE_NAME :=
LOCAL_JNI_SHARED_LIBRARIES := librockchip_update_jni
LOCAL_REQUIRED_MODULES := librockchip_update_jni
LOCAL_STATIC_JAVA_LIBRARIES += ftp4j-1.7.2
#LOCAL_CERTIFICATE := media
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := ftp4j-1.7.2:/libs/ftp4j-1.7.2.jar
include $(BUILD_MULTI_PREBUILT)
# ============================================================
# Also build all of the sub-targets under this one: the shared library.
include $(call all-makefiles-under,$(LOCAL_PATH))
因为涉及到jni调用库文件,所以相对复杂了点,假如没有jni调用的话,我们的结构如下,读者可以作对比:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES :=$(call all-java-files-under, src)
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
#  将编译生成RKUpdateService.apk文件
LOCAL_PACKAGE_NAME := RKUpdateService
LOCAL_CERTIFICATE := platform
include $(BUILD_PACKAGE)


Android.mk文件的大多数内容都是标准的写法,只有下面两行代码需要了解一下。

LOCAL_PACKAGE_NAME := RKUpdateService
LOCAL_CERTIFICATE := platform


其中第一行需要根据不同的Android系统应用进行修改。系统会根据LOCAL_PACKAGE_ NAME变量的值生成APK文件,例如,本例该变量的值是FirstSystemApp,所以会在out/target/product/
maguro/system/app目录生成FirstSystemApp.apk文件,如果Android设备已经获取了root权限,直接将该文件使用adb push命令上传到/system/app目录即可。如果Android设备没有root权限,就只能通过刷机的方式安装系统应用了。要注意的是FirstSystemApp.apk不能通过普通应用的方式进行安装。LOCAL_CERTIFICATE变量表示签名类型,系统应用通常设为platform,表示Platform签名。

以下是具体的编译流程

1:用文本编辑器编辑工程RKUpdateService(不能用eclipse)。

2:将工程导入rk3188_4.2_qnb01\packages\apps中。

3:退出到根rk3188目录执行:source build/envsetup.sh

4:执行lunch 然后选择9

5:mmm packages/apps/RKUpdateService/ 将在rk3188_4.2_qnb01/out/target/product/rk30sdk/system/app下生成RKUpdateService.apk

6:删掉rk3188_4.2_qnb01\packages\apps\RKUpdateService

到此即可结束,自己写的系统APK已经写到系统里面了,make了整个工程之后会写到system.img中,以下步奏读者可不理会,只是写给自己的。
7:将rk3188_4.2_qnb01/out/target/product/rk30sdk/system/app/RKUpdateService.apk复制到rk188_4.2_qnb01\device\rockchip\common\app\apk\RKUpdateService(不确定是否必须)。

8:make -j16

9:./mkimage.sh ota打包
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: