日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發(fā)布時間:2024/9/3 Android 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(三 APP应用) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

歡迎轉(zhuǎn)載,務(wù)必注明出處:http://blog.csdn.net/wang_shuai_ww/article/details/44416041

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


本篇是在本系列前三篇的基礎(chǔ)上做的。記錄盡量做的完善,讀者在閱讀本篇時,請確保前面的驅(qū)動和抽象層都已經(jīng)編譯沒問題,且在開發(fā)板上能夠正確跑起來,免得在參閱本篇文章寫自己的程序時出現(xiàn)莫名的錯誤。

本篇將會介紹兩種APP的編譯方法,不過編寫代碼還是需要在eclipse中進行的。

在前面第二篇文章中我們知道,我們?yōu)閍pp上層應(yīng)用創(chuàng)建了一個java類接口服務(wù)ILedService,所以我們在編寫配套的應(yīng)用程序時需要這個類才行。我們知道eclipse使用的官方sdk是不含有我們自己創(chuàng)建的ILedService服務(wù)的,這個服務(wù)只存在于我們編譯的Android源碼中。為此我們需要我們建立的eclipse工程能夠引用我們創(chuàng)建的ILedService類。

我網(wǎng)上搜索以及按照自己的理解嘗試了不少的方法,最后找到了這篇文章http://blog.csdn.net/beihai1212/article/details/8782700,介紹的還是很不錯的,經(jīng)過嘗試,我選擇了這篇文章的第二種方法,看著比較官方,O(∩_∩)O。其實管理起來也方便,下次再使用時直接添加就可以了。

下面介紹怎么使用我們創(chuàng)建的ILedService類。

1.首先找到編譯好的源碼目錄下的out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar這個文件,把它拷貝到eclipse所在的系統(tǒng)平臺,我eclipse使用的是Windows平臺。為了好管理,我就在官方sdk的platforms目錄下建立一個文件夾android-realarm來存放classes.jar這個文件,如下圖所示:


一般來說我們只需要classes.jar所包含的類就足夠使用了,其他的就不需要了。


下面就介紹怎么來寫app應(yīng)用和編譯了

一.eclipse 編寫和編譯app

1.首先創(chuàng)建一個簡單的工程,我命名為LedTest,具體的步驟就不再寫了,注意在選擇Target SDK和Compile With時要選擇API19,即Android4.4的版本,創(chuàng)建好的工程如下圖所示:

設(shè)置圖示:


工程圖示:


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,完成設(shè)置,這時這個classes類庫添加進我們的工程了,如下圖:


(5)選擇下圖的紅色部分,并點擊進入:


(6)右邊有up選項,把android-realarm移動到Android 4.4.2前面即可。


(7)OK確定,回到工程,確認庫的添加,如下圖:


如果結(jié)果如上圖所示,那么就說明我們需要的類庫添加成功了,那么下面我們就可以寫程序了。

(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="關(guān)燈" /><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)下面就可以編譯運行了。

我的編譯運行截圖如下:

關(guān)閉燈的狀態(tài):



打開燈的狀態(tài):


當(dāng)然了,同時觀察開發(fā)板的LED燈狀態(tài),跟這個是同步的。


二、Android源碼中編譯工程文件文件

這個比eclipse是簡單一些,不需要因為庫的問題頭疼。但是代碼的編寫可能沒有在eclipse下編譯時方便了,因為不知道哪里的代碼寫的有沒有錯誤,對于小工程來說還好,大的話,估計是個人都會瘋掉了。推薦使用上面的方法。

不過我這里還是簡單說一下方法。

這里我就直接使用上面eclipse編輯的代碼了,在Android源碼下編譯只需要res、src、AndroidManifest.xml、Android.mk、proguard.cfg、project.properties這幾個文件,其他都不需要拷貝。

當(dāng)然這里是缺少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目錄下,或者讀者自己創(chuàng)建其他目錄。

然后在終端進入Android源碼根目錄使用mmm ./packages/apps/LedTest/進行編譯,完成后在out/target/product/realarm/system/app目錄下就會生成LedTest.apk文件,把該文件push到開發(fā)板測試一下,當(dāng)然了,跟eclipse的效果是一樣的。

從eclipse拷貝源碼到Android目錄下編譯不會出錯的,大家放心好了,O(∩_∩)O~。


到此Android從底層到頂層的整個流程都記錄完畢了,讀者有什么疑問可以留言。能力有限,錯誤難免,大家見諒哈,勿噴。

總結(jié)

以上是生活随笔為你收集整理的s5p4418 Android 4.4.2 驱动层 HAL层 服务层 应用层 开发流程记录(三 APP应用)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。