s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(三 APP应用)

本文主要是介绍s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(三 APP应用),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

欢迎转载,务必注明出处:http://blog.csdn.net/wang_shuai_ww/article/details/44416041

eclipse完整工程下载地址:http://download.csdn.net/detail/u010406724/8515359


本篇是在本系列前三篇的基础上做的。记录尽量做的完善,读者在阅读本篇时,请确保前面的驱动和抽象层都已经编译没问题,且在开发板上能够正确跑起来,免得在参阅本篇文章写自己的程序时出现莫名的错误。

本篇将会介绍两种APP的编译方法,不过编写代码还是需要在eclipse中进行的。

在前面第二篇文章中我们知道,我们为app上层应用创建了一个java类接口服务ILedService,所以我们在编写配套的应用程序时需要这个类才行。我们知道eclipse使用的官方sdk是不含有我们自己创建的ILedService服务的,这个服务只存在于我们编译的Android源码中。为此我们需要我们建立的eclipse工程能够引用我们创建的ILedService类。

我网上搜索以及按照自己的理解尝试了不少的方法,最后找到了这篇文章http://blog.csdn.net/beihai1212/article/details/8782700,介绍的还是很不错的,经过尝试,我选择了这篇文章的第二种方法,看着比较官方,O(∩_∩)O。其实管理起来也方便,下次再使用时直接添加就可以了。

下面介绍怎么使用我们创建的ILedService类。

1.首先找到编译好的源码目录下的out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar这个文件,把它拷贝到eclipse所在的系统平台,我eclipse使用的是Windows平台。为了好管理,我就在官方sdk的platforms目录下建立一个文件夹android-realarm来存放classes.jar这个文件,如下图所示:


一般来说我们只需要classes.jar所包含的类就足够使用了,其他的就不需要了。


下面就介绍怎么来写app应用和编译了

一.eclipse 编写和编译app

1.首先创建一个简单的工程,我命名为LedTest,具体的步骤就不再写了,注意在选择Target SDK和Compile With时要选择API19,即Android4.4的版本,创建好的工程如下图所示:

设置图示:


工程图示:


2.添加我们自己的classes.jar类库

(1)右键工程名,选择下图所示的红圈:


(2)在Libraries栏,选择Add Library


(3)然后是User Library,点击next,选择User Libraries,点击new,填写一个库的名字,我的是android-realarm,下面的System library要勾上,确定,之后如下图所示:


(3)点击Add External JAR,弹出对话框,选择我们前面存储的xxx\sdk\platforms\android-realarm\classes.jar文件,如下图所示:


(4)OK确认,然后Finish,完成设置,这时这个classes类库添加进我们的工程了,如下图:


(5)选择下图的红色部分,并点击进入:


(6)右边有up选项,把android-realarm移动到Android 4.4.2前面即可。


(7)OK确定,回到工程,确认库的添加,如下图:


如果结果如上图所示,那么就说明我们需要的类库添加成功了,那么下面我们就可以写程序了。

(8)MainActivity.java代码如下:

package com.example.ledtest;import android.app.Activity;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.ToggleButton;
import android.os.ILedService;
public class MainActivity extends Activity {private final static String LOG_TAG = "sean.realarm.led.activity";private ILedService ledservice = null;private ToggleButton btnLed;private ImageView imageLed;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);btnLed = (ToggleButton) findViewById(R.id.btnLed);imageLed = (ImageView) findViewById(R.id.imageLed);ledservice = ILedService.Stub.asInterface(ServiceManager.getService("led"));try {Log.i(LOG_TAG, "Exception while reading value from led service0.");imageLed.setImageResource(R.drawable.bulboff);ledservice.setOff(0);} catch (RemoteException e) {Log.e(LOG_TAG, "Remote Exception while reading value from led service0.");}btnLed.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View arg0) {if(btnLed.isChecked()){try {Log.i(LOG_TAG, "Exception while reading value from led service1.");imageLed.setImageResource(R.drawable.bulbon);ledservice.setOn(0);} catch (RemoteException e) {Log.e(LOG_TAG, "Remote Exception while reading value from led service1.");}}else{try {Log.i(LOG_TAG, "Exception while reading value from led service2.");imageLed.setImageResource(R.drawable.bulboff);ledservice.setOff(0);} catch (RemoteException e) {Log.e(LOG_TAG, "Remote Exception while reading value from led service2.");}}}});}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}
代码中我引用了图片资源,如果读者不想使用图片,把含有图片的代码注释掉就行了。也就不会报错了。

(9)主布局文件activity_main.xml代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.ledtest.MainActivity" ><ToggleButtonandroid:id="@+id/btnLed"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignLeft="@+id/imageLed"android:layout_alignRight="@+id/imageLed"android:layout_centerVertical="true"android:textOff="开灯"android:textOn="关灯" /><ImageViewandroid:id="@+id/imageLed"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_above="@+id/btnLed"android:layout_centerHorizontal="true"android:layout_marginBottom="22dp"android:src="@drawable/bulboff" /></RelativeLayout>

(10)下面就可以编译运行了。

我的编译运行截图如下:

关闭灯的状态:



打开灯的状态:


当然了,同时观察开发板的LED灯状态,跟这个是同步的。


二、Android源码中编译工程文件文件

这个比eclipse是简单一些,不需要因为库的问题头疼。但是代码的编写可能没有在eclipse下编译时方便了,因为不知道哪里的代码写的有没有错误,对于小工程来说还好,大的话,估计是个人都会疯掉了。推荐使用上面的方法。

不过我这里还是简单说一下方法。

这里我就直接使用上面eclipse编辑的代码了,在Android源码下编译只需要res、src、AndroidManifest.xml、Android.mk、proguard.cfg、project.properties这几个文件,其他都不需要拷贝。

当然这里是缺少Android.mk文件,下面给出源码,拷贝保存一些即可:

TOP_LOCAL_PATH:= $(call my-dir)# Build activityLOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)LOCAL_MODULE_TAGS := engLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := LedTestLOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)# ============================================================# Also build all of the sub-targets under this one: the shared library.
include $(call all-makefiles-under,$(LOCAL_PATH))

把上面说的文件都拷贝到Android源码目录/packages/apps/LedTest目录下,或者读者自己创建其他目录。

然后在终端进入Android源码根目录使用mmm ./packages/apps/LedTest/进行编译,完成后在out/target/product/realarm/system/app目录下就会生成LedTest.apk文件,把该文件push到开发板测试一下,当然了,跟eclipse的效果是一样的。

从eclipse拷贝源码到Android目录下编译不会出错的,大家放心好了,O(∩_∩)O~。


到此Android从底层到顶层的整个流程都记录完毕了,读者有什么疑问可以留言。能力有限,错误难免,大家见谅哈,勿喷。

这篇关于s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(三 APP应用)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987037

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo