第一篇:Android開發(fā)優(yōu)勢總結(jié)
Android開發(fā)優(yōu)勢總結(jié)
來源:扣丁學(xué)堂
目前市場上的移動端有兩種形式,一種是Android開發(fā),另一種是ios開發(fā),其中Android開發(fā)方面的人員要多一些,今天我們就一起來看一下扣丁學(xué)堂Android培訓(xùn)講師解讀的Android開發(fā)的優(yōu)勢。
Android開發(fā)優(yōu)勢:
1、Android價格占優(yōu),價廉性能并不低
消費者選擇產(chǎn)品,價格是必然要考慮的一大因素,iphone雖好,但是價格讓一般人望而卻步。蘋果就像是寶馬、奔馳,雖然大家都認(rèn)為它很好,但是一般人消費不起,只有看的份。而Android,如同大眾,滿大街跑的都是,不僅如此,還有一些型號是可以與寶馬、奔馳相媲美的。雖然Android平臺的手機(jī)價廉,但是其性能卻一點也不低廉,觸摸效果并不比蘋果差到哪里去。Android平臺簡單實用,無論是功能還是外觀設(shè)計,都可以與蘋果一決高下。當(dāng)消費者考慮價格因素之后,在數(shù)量眾多的android手機(jī)中,消費者總是會找到一款滿意的Android手機(jī)取代價格高昂的 iPhone。
2、應(yīng)用程序發(fā)展迅速
智能機(jī)玩的就是個應(yīng)用,雖然現(xiàn)在Android的應(yīng)用還無法與蘋果相競爭,但是隨著Android的推廣與普及,應(yīng)用程序數(shù)在成數(shù)量級增長,Android應(yīng)用在可預(yù)見的未來是有能力與蘋果相競爭的。而來自Android應(yīng)用商店最大的優(yōu)勢是,不對應(yīng)用程序進(jìn)行嚴(yán)格的審查,在這一點上優(yōu)于蘋果。
3、智能手機(jī)廠家助力
蘋果的自我中心是它成功的一大法寶,從硬件到軟件,到其獨特的推廣方式。蘋果形成了一個很好的很完整的產(chǎn)業(yè)鏈。在一個封閉的圈子中創(chuàng)造一個又一個的奇想,讓消費者的體驗得到了很大的滿足。但是這樣并不能使其長期占據(jù)有利位置?,F(xiàn)在,世界很多智能手機(jī)廠家?guī)缀醵技尤肓薃ndroid陣營,并推出了一系列的Android智能機(jī)。摩托羅拉、三星、HTC、LG、Lumigon等廠家都與谷歌建立了Android平臺技術(shù)聯(lián)盟。廠商加盟的越多,手機(jī)終端就會越多,其市場潛力就越大。
4、運營商的鼎力支持
在國內(nèi),三大運營商是卯足了勁的推出Android智能機(jī)。聯(lián)通的“0元購機(jī)”,電信的千元3G,移動的索愛A8i定制機(jī),都顯示了運營商對Android智能機(jī)的期望。在美國,T-Mobile、Sprint、AT&T和Verizon全部推出了Android手機(jī)。此外,日本的KDDI,NTT DoCoMo,Telecom Italia(意大利電信)、T-Mobile(德
國)、Telefónica(西班牙)等眾多運營商都是Android的支持者。有這么多的運營商支持Android,自然會占據(jù)巨大的市場份額。相對于Android的運營商聯(lián)盟,只有AT&T一家運營商銷售iPhone。而蘋果其特有的自我封閉性,無論是對手機(jī)廠商還是對運營商,都帶來了一定的威脅性。手機(jī)聯(lián)盟的形成,在一定程度上直指蘋果。
5、機(jī)型多 硬件配置優(yōu)
自從谷歌推出Android系統(tǒng)以來,各大廠家紛紛推出自己的Android平臺手機(jī),HTC、索尼愛立信、魅族、摩托羅拉、夏普、LG、三星、聯(lián)想等等,每一家手機(jī)廠商都推出了各自的Android手機(jī),機(jī)型多樣,數(shù)不勝數(shù)。摩托羅拉的Droid X、三星的Galaxy,HTC從開始的T-Mobile G1到當(dāng)前的 EVO 4G,每一款都有著優(yōu)秀的配置,都有可說之處。
6、系統(tǒng)開源 利于創(chuàng)新
蘋果的自我封閉性,使其創(chuàng)新必須源自內(nèi)部。而Android是開源的,允許第三方修改,這在很大程度上容許廠家根據(jù)自己的硬件更改版本,從而能夠更好的適應(yīng)硬件,與之形成良好的結(jié)合。
扣丁學(xué)堂Android視頻教程講師:相比于蘋果的封閉,開源能夠提供更好的安全性能,也給開發(fā)人員提供了一個更大的創(chuàng)新空間,從而使Android版本升級更快??鄱W(xué)堂有大量的的Android視頻教程可供Android開發(fā)者觀看學(xué)習(xí),喜歡的話就關(guān)注扣丁學(xué)堂吧。
第二篇:Android項目開發(fā)總結(jié)
項目開發(fā)總結(jié)報告
1引言
1.1編寫目的
總結(jié)開發(fā)經(jīng)驗與學(xué)習(xí)中的不足
1.2背景
以方便用戶記錄日常學(xué)習(xí)心得,生活體會為目的,進(jìn)行主題為“隨心筆記”的應(yīng)用開發(fā)
2實際開發(fā)結(jié)果
2.1產(chǎn)品
2.2主要功能和性能
能夠查看筆記的目錄,記錄筆記完成時間。能夠改變主題顏色,目錄排版方式,擁有簡潔的主題。對于涂鴉功能,插入圖片,密碼鎖等功能未能實現(xiàn)。
3開發(fā)工作評價
3.1對產(chǎn)品質(zhì)量的評價
本應(yīng)用擁有簡單實用的功能,能夠滿足一般用戶的需要
3.3對技術(shù)方法的評價
開發(fā)中使用了軟件工程中的增量開發(fā)模型,黑盒測試等技術(shù),使開發(fā)逐步向前發(fā)展
3.4出錯原因的分析
對于部分Android版本支持性不好,不能正常使用安裝等
4經(jīng)驗與教訓(xùn)
通過這次開發(fā),我們體驗了開發(fā)不易,需要很多人員的合作。開發(fā)過程中,必須明確整體目標(biāo),不能東一榔頭,西一棒槌。另外由于學(xué)習(xí)時間短,對很多東西都不太了解,還好通過CSDN等一些網(wǎng)站能夠找到有益的幫助,感謝那些博客,論壇。
第三篇:Android開發(fā)基本知識總結(jié)-Android課件
Android開發(fā)基礎(chǔ)教程
2015-4-13周一2CJ02 目錄
1.什么是Android? 2.Android應(yīng)用開發(fā)環(huán)境 3.Gradle 4.模擬器Emulator 5.開發(fā)一個安卓應(yīng)用程序的步驟 6.關(guān)于多個模擬器的問題 7.安卓工程文件的結(jié)構(gòu) 8.android界面文件---xml文件 9.android程序文件---java文件 10.界面布局方式 11.幾個常用組件 12.Roast組件 13.對話框AlertDialog 14.幾條重要的語句 15.監(jiān)聽器Listener 16.識別響應(yīng)事件的組件 17.界面切換
18.界面之間的數(shù)據(jù)傳遞 19.Activity生命周期 20.多媒體播放
21.日志文件在程序調(diào)試中的使用 22.使用XML文件保存數(shù)據(jù)
23.使用TXT文件保存數(shù)據(jù) 24.使用數(shù)據(jù)庫保存數(shù)據(jù) 25.時間組件 26.線程Thread 27.視頻播放VideoView 28.MediaPlayer,SurfaceView和SurfaceHolder播放視頻 29.錄制音頻MediaRecorder 30.菜單組件
1.什么是Android? 移動設(shè)備(常常指手機(jī)mobile)的操作系統(tǒng),由google公司出品,是免費的, 最早是基于Linux平臺的;目前已經(jīng)推出的Android3.0是平板電腦上的操作系統(tǒng)。
其它的手機(jī)操作系統(tǒng)有:iPhone系統(tǒng)等。
手機(jī)廠商:三星(Samsung,宏達(dá)電(HTC),摩托羅拉(Motorola),華碩,索尼,Garmin等都支持iPhone系統(tǒng)。
Android系統(tǒng)功能:自定義用戶界面,支持藍(lán)牙,多點觸摸,具有導(dǎo)航功能和語音識別功能,結(jié)合了google地圖。
Android軟件開發(fā)工具SDK
4.0。
Android系統(tǒng)特點:虛擬鍵盤,以WebKit為核心的WebView組件,可以使用HTML, javascript等。
2.Android應(yīng)用開發(fā)環(huán)境 Eclipse+ADT+Android SDK。ADT---Android開發(fā)工具插件(Android Plugs for Eclipse).開發(fā)環(huán)境安裝注意事項:關(guān)閉防毒軟件,按順序安裝,保持網(wǎng)絡(luò)暢通,比較耗時。特別說明,安裝和運行需要高配置機(jī)器和高速網(wǎng)絡(luò),比較費時。
(1)安裝Java
JDK。甲骨文
網(wǎng)站: http://004km.cn ”);Intent in = new Intent(Intent.ACTIN_VIEW, uri);startActivity(in);(2)調(diào)用系統(tǒng)撥號界面
Uri uri = Uri.parse(“tel:*** ”);Intent in = new Intent(Intent.ACTIN_DIAL, uri);startActivity(in);(3)調(diào)用系統(tǒng)撥號功能
Uri uri = Uri.parse(“tel:*** ”);Intent in = new Intent(Intent.ACTIN_CALL, uri);startActivity(in);注意:需要在AndroidManifest.xml文件中進(jìn)行設(shè)置,才可以自動撥號:
= new Bundle();bndle.pushString(“name”, “David”);bndle.pushInt(“age”, 22);//pushChar, putShort,put Boolean, pushChar等等
Uri uri = Uri.parse(“http://004km.cn ”);Intent in = new Intent(Intent.ACTIN_VIEW, uri);in.putExtras(bundle);startActivity(in);在第二個界面中: Intent in = this.get Intent();Bundle bundle
= in.getExtras();String studentName = bundle.getInt();//getDouble, 2.方法2:調(diào)用有返回參數(shù) 例1,在第一個界面中: private static final int ACTIVITY_EDIT = 1;Bundle bundle = new Bundle();bundle.pushString(“name”, “David”);Intent in = new Intent();
getShort, getIntArray等 in.putExtras(bundle);in.setClass(FullscreenActivity.this, SecondActivity.class);startActivityForResult(in, ACTIVITY_EDIT);注意:startActivityForResult后所有語句無效,不執(zhí)行;在第一個界面中,第二個界面可以在不同位置被多次調(diào)用;在第一個界面中,在其它位置可以調(diào)用其它界面。
在第一個界面中,重寫onActivityResult,接收所有被調(diào)用界面返回的參數(shù)(如果有):@Override protected void onActivityResult(int
requestCode,int resultCode,Intent
data){ super.onActivityResult(requestCode, resultCode, data);if(requestCode== ACTIVITY_EDIT)
//此參數(shù)可以區(qū)分不同的調(diào)用
{
Bundle bundle = data.getExtras();if(resultCode == RESULT_OK)
//此參數(shù)可以判斷有無返回參數(shù)
{
Bundle bundle = data.getExtras();……
} if
(resultCode == RESULT_CANCELED)
{ } }
…… } ……
問題
:如何判斷被調(diào)用界面是否傳遞返回參數(shù)?如何區(qū)分返回參數(shù)是由不同的被調(diào)用界面?zhèn)鬟f的?android的這種解決方法并不是完美的。例2,在第二個界面中:
讀取第一個界面?zhèn)鬟f的參數(shù),省略;下面是向調(diào)用程序傳遞返回參數(shù): Bundle bundle
= new Bundle();bndle.pushString(“name”, “賀昌峰373780592”);Intent
setResult(RESULT_CANCELED);//傳遞參數(shù)返回
// 或setResult(RESULT_OK, in);//不傳遞參數(shù)返回 finish();注意:這時,第二個界面返回到第一個界面,可以不傳遞參數(shù)直接返回(RESULT_CANCELED),in = new Intent();
in.putExtras(bundle);也可以傳遞參數(shù)返回(RESULT_OK)。19.Activity生命周期
onCreate
---onStart
---onResume
---onPause---onStop
---onDestroy 也就是說,有: protected void oncreate(…){ ….} protected void onStart(…){ ….} protected void onResume(…){ ….} protected void onPause(…){
….} protected void onStop(…){ ….} protected
void onDestroy(…){ ….} 20.多媒體播放MediaPlayer public MediaPlayer player = new MediaPlayer();//生成語句可省略 try{ player.reset();
//重新播放音樂
player.setDataSource(“/sdcard/music/music_file_name.mp3”);
// player = MediaPlayer.create(getApplicationContext(), R.raw.music);
// 打開音樂文件
//music為音樂資源文件
player.prepare();player.start();
// player.isPlaying()
//準(zhǔn)備播放 //播放音樂
//判斷是否正在播放
//音樂播放完成觸發(fā)事件
player.setOnCompletionListener(new OnCompletionListener){ public void onCompletion(){ //音樂播放完成后,處理代碼 } }
player.pause();player.start();player.stop();
} catch(IllegalStateException e){ ……} catch(IOException e){ ……}
//播放暫停 //繼續(xù)播放音樂 //停止播放音樂 player.release();
//釋放存儲空間
//注意:可以播放存儲卡上任意一個音樂文件;也可以播放資源列表中的音樂文件 21.日志文件在程序調(diào)試中的使用
import android.util.Log;對應(yīng)的方法有:debug,verbose,info,warn,error。注意,使用簡寫。問題:如何查看系統(tǒng)日志文件?
Log.d(“這里是分類標(biāo)簽”, “這里是輸出信息”);22.使用XML文件保存數(shù)據(jù)
對XML文件進(jìn)行操作,形式為(key,value)。SharedPreferences
sp = get SharedPreferences(文件名,權(quán)限);
權(quán)限:MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE 例:
//1打開XML文件 SharedPreferences
//2更改數(shù)據(jù)
Editor editor = sp.eidt();
//更改數(shù)據(jù)
sp = get SharedPreferences(“myconfig”,MODE_PRIVATE);
editor.putString(“name”, “賀昌峰373780592”);editor.putInt(“age”, 48);editor.putFloat(“salary”, 2048.5);//putLong,putBoolean等;
editor.commit();
//保存數(shù)據(jù)
//3讀取數(shù)據(jù)
String myname = sp.getString(“name”, “”);
//4刪除數(shù)據(jù)
editor.remove(“name”);//刪除數(shù)據(jù) editor.commit();
editor.clear();//刪除全部數(shù)據(jù) editor.commit();
//5簡寫形式如下: Editor editor = sp.eidt()
//更改數(shù)據(jù)
//讀取數(shù)據(jù)
.putString(“name”,.commit();
“賀昌峰”)23.使用TXT文件保存數(shù)據(jù) FileOutPutStream
fout = openFileOutput(文件名, 文件權(quán)限);文件權(quán)限: MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE
1.在文件中寫入數(shù)據(jù)
try { //打開TXT文件 FileOutPutStream
BufferedOutputStream
String
//向文件中寫入數(shù)據(jù)
bufferoutput.write(s.getBytes());s = “大家跟我學(xué)習(xí)android”;
bufferoutput = new BufferedOutputStream(fout);fout = openFileOutput(“myconfig.txt”, MODE_PRIVATE);
//關(guān)閉文件 bufferoutput.close();fout.close();} Catch(Exception e){
2.從文件中讀取數(shù)據(jù)
try { FileInputStream
BufferedInputStream
byte[] bufferbytes = new byte[20];int flag = bufferoutput.read(bufferbytes);if(flag==-1){ //文件讀取到文件末尾,否則可以繼續(xù)讀出
}
//僅讀取長度為20個字節(jié)的數(shù)據(jù)
bufferoutput = new BufferedInputStream(fout);
fout = openFileInput(“myconfig.txt”);
//打開文件
e.printStackTrace();} bufferoutput.close();fout.close();} Catch(Exception e){
24.使用數(shù)據(jù)庫保存數(shù)據(jù) 1.數(shù)據(jù)庫相關(guān)類
//關(guān)閉緩沖區(qū) //關(guān)閉文件
e.printStackTrace();} import android.content.ContentValues;import android.content.Context;import android.database.Coursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;
2.SQLiteDataBase類
注意:數(shù)據(jù)庫操作時,要求捕獲異常,此處省略。
SQLiteDataBase db = openOrCreateDatabase(“databasename.db”, MODE_PRIVATE);//說明:數(shù)據(jù)庫權(quán)限同文件權(quán)限
// Context就是this指針 db.execSQL(sql_exp): 執(zhí)行SQL語句
Cursor cs = db.rawQuery(select_exp, null): 返回數(shù)據(jù)集。Cursor cs1 = db.query(arg0, ……): 使用較繁瑣,可用rawQuery替換。
db.insert(arg0, ……): 使用較繁瑣,可用rawQuery替換。db.delete(arg0, ……): 使用較繁瑣,可用rawQuery替換。db.update(arg0, ……):
使用較繁瑣,可用rawQuery替換
db.close(): 一般寫在onDestroy事件中。3.Cursor類 方法有:
move, moveToPosition, moveToFirst, moveToLast,moveToNext, getCount(), getInt(),getString(),isNull(), isFirst()等等。
4.ContentValues類
一般用在SQLiteDataBase.insert中, 此處省略。
ContentValues content
= new ContentValues();
content.put(“name”, “賀昌峰”);
moveToPrevious, content.put(“age”, 48);5.SimpleCursorAdapter類
SimpleCursorAdapter是界面組件如ListView和Cursor的橋梁。例, 在ListView組件listview1中,顯示數(shù)據(jù)集(有綁定功能嗎?):
Cursor cs = db.rawQuery(“select SimpleCursorAdapter
adapter
* from table”, null);
= new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2, new String[]{“id”, “name”}, new int[]{ android.R.id.text1, android.R.id.text2});// 注意:第2個參數(shù)的作用
listview1.setAdapter(cs);
//在ListView組件顯示數(shù)據(jù)集
25.時間組件
1.常用組件AnalogClock,DigitClock 用法比較簡單,無需過多設(shè)置,僅僅顯示當(dāng)前時間:機(jī)械式,數(shù)字式
2.計時組件:Chronometer 常用方法:start開始計時, stop停止計時, setBase設(shè)置時間 setFormat(“秒表:%s”):設(shè)置組件時間顯示格式。
附:與時間格式有關(guān)的函數(shù) SimpleDateFormat String
sformat = new SimpleDateFormats(“hh:mm:ss”);
//得得當(dāng)前時間 s = sformat.format(new Date());
例,Chronometer對象是chroTime: chroTime.setOnChronometerTickListeter(chrolisteten);
private Chronometer.onChronometerTickListeter Chronometer.onChronometerTickListeter(){ @Override public
void OnChronometerTickListeter(Chronometer chronomoter){ //每秒執(zhí)行一次該方法 } }
3.計時組件Timer和TimerTask
chrolisteten = new 常用函數(shù):schedule(TimerTask對象, Timer對象延遲時間, TimerTask對象間隔時間);
TimerTask對象用法: private TimerTask { public void run(){ //按設(shè)定間隔調(diào)用執(zhí)行 handle.sendMessage(msg);//特別注意:此處不能對界面進(jìn)行更新,因為影響計時精度,所有需要使用Handle配合。見下。} }
4.Handle和Message的配合使用 Handle handle { public void handleMessage(){ super.handleMessage();//進(jìn)行其它處理 }
= new Handle()
timetask = new TimerTask()} Message
msg.what = “******”;handle.sendMessage(msg);
26.線程Thread
1.Thread的定義
public class ClockThread extends Thread{ @Override public void run(){ //進(jìn)行其它處理
//注意:不會自動重復(fù)執(zhí)行多次的 } } 2.Thread的啟動、延時啟動、停止 使用Handle對線程進(jìn)行控制: msg = new Message();Handle handle = new Handle();
ClockThread clock = new ClockThread();
handle.post(clock);
//啟動線程 5000);
//延時5000ms啟動線程 //停止線程 handle.postDelayed(clock, handle.removeCallbacks(clock);
問題:使用Handle有什么優(yōu)點? 27.視頻播放VideoView 支持的文件格式:H.264的mp4, wmv, 3gp等。1.視頻播放
private VideoView
videoview.setVideoPath(“/sdcard/robot.mp4”);//增加控制面板
videoview.setMediaController(new MediaController(getApplicationContext()));
videoview
= new VideoView();videoview.start();//開始播放
2.視頻準(zhǔn)備播放事件
videoview.setOnPreparedListener(videoPreparedListener);videoview.setOnCompletionListener(videoCompletionListener);
private MediaPlayer.onPreparedListener videoPreparedListener = new MediaPlayer.onPreparedListener(){ @Override public
void onPrepared(MediaPlayer
mp){ //視頻準(zhǔn)備播放 } }
3.視頻播放完成事件
private MediaPlayer.onCompletionListener videoCompletionListener = MediaPlayer.onCompletionListener(){ @Override public
void onCompletion(MediaPlayer
mp){
new //視頻播放完成 } }
28.MediaPlayer,SurfaceView和SurfaceHolder播放視頻
MediaPlayer也可以播放視頻,需要SurfaceView和SurfaceHolder配合,其中SurfaceView為可視化組件可以播放視頻,SurfaceHolder為橋梁。
private SurfaceView surfview = new SurfaceView();//此組件可視化設(shè)計,無需這里聲明 private MediaPlayer
surfholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);mediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaplayer.setDisplay(surfholder);
mediaplayer.setDataSource(“/sdcard/vedio.mp4”);mediaplayer.reset();
//打開視頻文件
mediaplayer = new MediaPlayer();
= surfview.getHolder();private SurfaceHolder surfholder
//重新播放視頻 mediaplayer.prepare();mediaplayer.start();mediaplayer.stop();mediaplayer.release();
//準(zhǔn)備播放視頻 //播放視頻
29.錄制音頻MediaRecorder MediaRecorder
mediaRecorder.SetAudioSource(MediaRecorder.AudioSource.MIC);mediaRecorder.SetAudioEncode(MediaRecorder.AudioEncode.DEFAULT);mediaRecorder.SetOutputFormat(MediaRecorder.OutputFormat.DEFAULT);mediaRecorder.SetOutputFile(“/sdcard/recorder.amr”);mediaRecorder.prepare();mediaRecorder.start();
注意:要有寫入SD卡的權(quán)限,在AndroidManifest.xml文件中:
//準(zhǔn)備錄音 //開始錄音
mediaRecorder = new MediaRecorder(); :
1.附1:ImageView.setAlpha(50)的含義?設(shè)置透明色 2.附2:遍歷目錄下所有文件: private File pathfile;pathfile = Environment.getExternalStorageDirectory();
//疑問:pathfile + ”/myfilename.txt” 這個用法正確嗎? for(File file: pathfile.listFiles()){ if {(file.getName().toLowerCase().endsWith(“.amr”))……
// File.getAbsolutePath(), File.getName()的區(qū)別 } } 30.菜單組件 //添加系統(tǒng)菜單 protected protected static final int MENU_ABOUT
= Menu.FIRST;static final int MENU_QUIT = Menu.FIRST + 1;
//得到SD卡路經(jīng) protected
@Override static final int MENU_EDIT = Menu.FIRST + 2;public boolean onCreateOptionsMenu(Menu menu){ menu.add(0,MENU_ABOUT,0,“關(guān)于本軟件...”).setShortcut('0','A');
menu.add(0,MENU_QUIT,1,“結(jié)束”).setShortcut('1','E');
menu.add(0,MENU_EDIT,2,“編輯”).setShortcut('2','D');
menu.add(0,MENU_FILE,3,“文件”).setShortcut('3','F');
return super.onCreateOptionsMenu(menu);} //添加菜單響應(yīng)事件 @Override public boolean onOptionsItemSelected(MenuItem switch(item.getItemId()){ case MENU_ABOUT: // 響應(yīng)處理 break;case MENU_QUIT: // 響應(yīng)處理 break;}
return super.onOptionsItemSelected(item);}
//添加快捷菜單 protected static final int MENU_BACKCOLOR protected static final int MENU_SMALLSIZE =
item){
= Menu.FIRST;
Menu.FIRST + 1;//定義快捷菜單組件 private LinearLayout private TextView
layout;
txtview1,txtview2;在onCreate中, 增加以下語句: layout =(LinearLayout)findViewById(R.id.layout);txtview1 =(TextView)findViewById(R.id.txtview1);txtview2 =(TextView)findViewById(R.id.txtview2);registerForContextMenu(txtview1);registerForContextMenu(txtview2);
在java文件類中, 增加以下語句: @Override public boolean onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){ //注意:父類函數(shù)先調(diào)用,或最后調(diào)用? super.onCreateOptionsMenu(menu, v, menuInfo);
if(v == txtview1)menu.add(0, MENU_BACKCOLOR,0,“設(shè)置背景顏色”); if(v == txtview2)menu.add(0, MENU_SMALLSIZE,1,“較小字體”);
}
//添加菜單響應(yīng)事件 @Override public boolean onContextItemSelected(MenuItem switch(item.getItemId()){ case MENU_BACKCOLOR: // 響應(yīng)處理
layout.setBackgroundColor(Color.BLUE);break;case MENU_SMALLSIZE: // 響應(yīng)處理
txtview2.setTextSize(12);break;}
return super.onContextItemSelected(item);}
item){
第四篇:Qualcomm平臺android開發(fā)總結(jié)
1、高通平臺android開發(fā)總結(jié).7 1.1 搭建高通平臺環(huán)境開發(fā)環(huán)境.7 1.2 搭建高通平臺環(huán)境開發(fā)環(huán)境.7 1.2.1 高通android智能平臺概述.7
1.2.1.1 什么是L4,REX,BREW,AMSS以及相互之間的關(guān)系.7 1.2.2 選擇合適的源代碼以及工具.8
1.2.2.1 獲取經(jīng)過高通打補(bǔ)丁的android 源代碼.8 1.2.2.2 獲取高通針對不同處理器的vendor源代碼.9 1.2.2.3 獲取 modem 源代碼.9
1.2.2.3.1 高通 modem 源代碼編譯前的修正.13 1.2.3 建立 Android 開發(fā)環(huán)境.14 1.2.4 建立 modem 開發(fā)環(huán)境.15 1.2.4.1 補(bǔ)充.16
1.2.4.1.1 獲取 licenses 16
1.2.4.1.2 Flex 簡單使用指南.16 1.2.4.1.3 啟動 license 服務(wù)器.18
1.2.4.1.4 license 沒有辦法從服務(wù)器獲取的幾種情況.18 1.2.4.1.5 破解 rvds 的license 19 1.2.5 在高通開發(fā)板上燒錄文件系統(tǒng).19
1.3 高通平臺,android和 modem 編譯流程分析.21 1.3.1 android代碼編譯流程分析.21 1.3.1.1 編譯工具檢測.22 1.3.1.1.1 22
1.3.1.2 appsboot.mbn 生成過程解析.22
1.3.1.3 boot.img 生成過程解析,怎樣手動生成 boog.img 28 1.3.1.4 編譯過程存在的問題.32
1.3.1.4.1 prelinkmap 的時候 base 0xaff00000 out of range 32 1.3.1.4.2 LOCAL_SDK_VERSION 使應(yīng)用程序不能訪問hide的api 32 1.3.1.4.3 armv5te-vfp 導(dǎo)致一些游戲運行不了.32 1.3.2 分布式編譯 android 代碼.33 1.3.3 modem 代碼編譯流程分析.33
1.3.3.1 單獨編譯某個模塊(如:qcsbl oemsbl).34 1.3.3.2 $(TARGETDIR)/exist 規(guī)則解析.36 1.3.3.3 setup規(guī)則解析.36
1.3.3.3.1 corebsp_create_incpaths 36 1.3.3.3.2 create_incpaths 36 1.3.3.3.3 amsssetup 36
1.3.3.3.4 amsslinkaddress 36 1.3.3.3.5 firmware 38 1.3.3.4 deps規(guī)則解析.38
1.3.3.5 corebsp_build規(guī)則解析.38 1.3.3.5.1 corebsp_build_action 38 1.3.3.5.1.1 corebsp_scons 規(guī)則.39 1.3.3.5.1.1.1 corebsp_scons_start 39 2.3.3.5.1.1.1 corebsp_scons_action 39
1.3.3.5.1.1.2.1 命令 pboot_gen_elf image_header pboot_add_hash 解析.40
1.3.3.5.1.1.2.2 env.BinBuilder 過程解析.41 1.3.3.5.1.1.2.3 env.MbnBuilder 過程解析.41
1.3.3.5.1.1.2.4 env.MbnDummyBuilder 過程解析.42 1.3.3.5.1.1.2.5 fsbl.mbn 生成過程解析.43 1.3.3.5.1.1.2.6 dbl.mbn 生成過程解析.43
1.3.3.5.1.1.2.7 AMSS_AABBQOLYM.mbn 生成過程解析.43 1.3.3.5.1.1.2.8 adsp.mbn 生成過程解析.43 1.3.3.5.1.1.2.9 osbl.mbn 生成過程解析.44
1.3.3.5.1.1.2.10 enandprg_AABBQOLYM.mbn 生成過程解析.44 1.3.3.5.1.1.2.11 nandprg_AABBQOLYM.mbn 生成過程解析.45 1.3.3.5.1.1.2.12 emmcbld.mbn 生成過程解析.45 3.3.3.5.1.1.1 corebsp_scons_done 46 1.3.3.5.1.2 corebsp 46
1.3.3.5.2 corebsp_create_incpaths 46 1.3.3.5.3 corebsp_setup 46 1.3.3.6 libs 46
1.3.3.7 copybar規(guī)則解析.47 1.3.3.8 exe規(guī)則解析.47
1.3.3.8.1 CORELIBS_AABBQOLYM.mbn生成過程解析.47 1.3.3.8.2 amss.mbn 生成過程解析.47 1.3.3.9 bldprod規(guī)則解析.48
1.3.3.10 create_mem_feat_html規(guī)則解析.48 1.3.3.10.1 50
1.3.3.11 partition規(guī)則解析.50
1.3.3.11.1 eMCC 啟動和 NAND 啟動的分區(qū)格式是不一樣的,如果是 eMCC 啟動,多了編譯選項:.50
1.4 高通平臺 7630 啟動流程分析.52 1.4.1 啟動流程概述.52 1.4.2 pbl 流程.52 1.4.3 dbl 流程.52 1.4.4 osbl 流程.54
1.4.4.1 osbl 裝載 appsbl 過程分析.56
1.4.5 appsbl 流程(源代碼在 android中).56
1.4.5.1 aboot_init 過程分析(需要側(cè)重關(guān)心的部分).58 1.4.5.1.1 fastboot 模式分析.61
1.4.5.1.1.1 什么是 fastboot 模式.61
1.4.5.1.1.2 fastboot 模式與 recovery 模式的區(qū)別.61 1.4.5.1.1.3 怎樣進(jìn)入 fastboot 模式.62
1.4.5.1.1.4 android 系統(tǒng)手機(jī)刷機(jī)過程分析(補(bǔ)充知識)62 1.4.5.1.2 appsbl 引導(dǎo) android 系統(tǒng).63
1.4.5.1.2.1 Android 系統(tǒng)啟動過程中存在的問題.67 1.4.5.1.1.1.1 linker 問題導(dǎo)致系統(tǒng)無法啟動.67 1.4.6 AMSS 流程.69
1.5 android 系統(tǒng)重啟關(guān)機(jī)流程分析.82 1.5.1 c語言中調(diào)用 reboot 函數(shù).82 1.5.2 通過 adb 讓系統(tǒng)重啟.82
1.5.3 fastboot 模式下系統(tǒng)重啟.83 1.5.4 系統(tǒng)關(guān)機(jī).84
1.5.5 內(nèi)核中的系統(tǒng)調(diào)用 reboot 85 1.6 軟件調(diào)用流程分析.89 1.6.1 設(shè)置sim卡狀態(tài).89 1.6.2 設(shè)置背光.90 1.6.3 獲取電池信息.90
1.7 python scons 語法學(xué)習(xí).94 1.8 python 語法學(xué)習(xí).94 1.8.1 Python中文全攻略.94
1.8.2 推薦一款Python編輯器.94
1.8.3 使用 pyExcelerator 讀 Execl 文件.94 1.8.4 xlrd 解析 xls 文件.95 1.8.5 xlrd 生成 xls 文件.95
1.9 Python 語言之 scons 工具流程分析.95 1.9.1 Program 方法.100 1.9.2 Library 方法.100
2、高通常用工具使用.101 2.1 QPST 101 2.2 QXDM 101 2.3 QCAT 101
3、工程模式.101
4、Android 系統(tǒng)更新升級總結(jié).104 4.1 刷機(jī)基本知識.104
4.1.1 各品牌代表手機(jī)刷機(jī)模式進(jìn)入方法.104 4.1.1.1 HTC G1 104
4.1.1.2 三星 Galaxy i7500 104 4.1.1.3 Google Nexus One 105 4.1.2 fastboot 模式.105
4.1.2.1 fastboot 模式概述.105
4.1.2.2 PC端fastboot 命令分析.106 4.1.2.2.1 命令選項 –w –s-p –c 106 4.1.2.3 手機(jī)端fastboot 命令分析.107 4.1.2.3.1 boot 107 4.1.2.3.2 erase 107 4.1.2.3.3 flash 107 4.1.2.3.4 continue 107 4.1.2.3.5 reboot 107
4.1.2.3.6 reboot-bootloader 107 4.1.2.3.7 getvar 107 4.1.2.3.8 download 108 4.1.2.3.9 update 108
4.1.2.3.9.1 system/core/fastboot/fastboot.c:294: 108 4.1.2.3.9.2 fprintf(stderr, “archive does not contain '%s'n”, name);108 4.1.2.4 fastboot 模式流程分析.108 4.1.3 recovery 模式.108
4.1.3.1 recovery 模式概述.108 4.1.3.2 軟件升級包.109
4.1.3.3 recovery v1跟recovery v2的區(qū)別.109 4.1.3.4 軟件升級腳本語法解析.109 4.1.3.4.1.1 mount 110 4.1.3.4.1.2 getprop 111
4.1.3.4.1.3 file_getprop 111 4.1.3.4.1.4 assert 111 4.1.3.4.1.5 format 111
4.1.3.4.1.6 apply_patch_check 111 4.1.3.4.1.7 apply_patch_space 111 4.1.3.4.1.8 apply_patch 111
4.1.3.4.1.9 package_extract_file 112 4.1.3.4.1.10 ui_print 112
4.1.3.4.1.11 META-INF/com/google/android/update-script 腳本分析.1124.1.3.4.2 Recovery 模式中 install_package 函數(shù)解析.117 4.1.3.5 Recovery 流程分析.118 4.1.3.5.1 恢復(fù)出廠設(shè)置.118 4.1.3.5.2 系統(tǒng)更新流程.119
4.1.3.5.3 通過sd卡實現(xiàn)刷機(jī).121 4.1.3.6 系統(tǒng)升級包案例分析.122 4.1.4 工程模式(HBoot)模式.122 4.1.4.1 HBOOT降級方法.122
4.2 如何制作升級包 update.zip 123 4.2.1 手動制作升級包.123 4.2.2 自動制作升級包.123 4.3 Android 簽名機(jī)制.125
4.4 android 文件系統(tǒng)權(quán)限概述.125 4.4.1 獲取手機(jī)root權(quán)限.127 4.4.2 adb默認(rèn)權(quán)限分析.128
4.4.3 adb root命令切換到 root 權(quán)限.129 4.4.4 掛載系統(tǒng)分區(qū)為讀寫(remount)130
4.4.5 通過修改 boot.img 獲取 Nexus One 權(quán)限.132 4.5 系統(tǒng)應(yīng)用移植.132
4.5.1 Android 2.2在線升級的移植.132
4.5.2 解決donut Gtalk、Market登錄不了的問題.133 4.5.3 apk反編譯問題總結(jié).133
4.5.4 系統(tǒng)重啟.133
5、高通linux內(nèi)核驅(qū)動開發(fā).133 5.1 添加串口調(diào)試.133 5.2 Sensor 傳感器.133
5.3 USB 枚舉 USB Composition 134 5.4 USB 枚舉 USB Composition 136
6、從 android 源代碼制作 sdk 136 6.1 linux sdk 137 6.2 windows sdk 137
7、程序安裝與調(diào)試.138
8、android 框架流程分析.138 8.1 屏幕顯示相關(guān).138 8.1.1 屏幕分辨率.138 8.1.2 屏幕模式.139
8.2 Android 開機(jī)充電.141 8.3 Android 開機(jī)動畫.141 8.3.1 內(nèi)核開機(jī)畫面.141 8.3.2 文件系統(tǒng)開機(jī)畫面.141
8.3.2.1 開機(jī)顯示的 ANDROID 文字.141 8.3.2.2 ANDROID 發(fā)光動畫.142
8.3.2.3 initlogo.rle 文件分析.143
8.3.2.4 bootanimation.zip 文件分析.143 8.3.3 三星I9000 開機(jī)動畫.144 8.4 JNI調(diào)用流程.145
8.5 Android 開機(jī)鈴聲.145 8.6 GPS 導(dǎo)航.145
8.6.1 GPS導(dǎo)航原理.145 8.6.2 GPS導(dǎo)航軟件.145
9、高通modem框架流程分析.146 9.1.1 添加自定義rpc調(diào)用.146
9.1.1.1 從AP端獲取modem的系統(tǒng)分區(qū)信息.146 9.1.2 添加自定義 AT命令.146
10、linux 應(yīng)用.146
10.1 嵌入式Linux通過幀緩存截圖包括Scheduling(調(diào)度), File system(文件系統(tǒng)), Networking(網(wǎng)絡(luò)), Device driver(設(shè)備驅(qū)動程序), Memory management(存儲管理), Paging(存儲頁面管理)-都在內(nèi)核中完成.一直到現(xiàn)在廣泛應(yīng)用的操作系統(tǒng),如UNIX,Linux,和Windows還大都是monolithic kernel操作系統(tǒng).但隨著操作系統(tǒng)變得越來越復(fù)雜(現(xiàn)代操作系統(tǒng)的內(nèi)核有一兩百萬行C程序是很常見的事情),把所有這些功能都放在內(nèi)核中使設(shè)計難度迅 速增加.微內(nèi)核是一個與Monolithic Kernel相反的設(shè)計理念.它的目的是使內(nèi)核縮到最小,把所有可能的功能模塊移出內(nèi)核.理想情況下,內(nèi)核中僅留下Address Space Support(地址空間支持),IPC(Inter-Process Communication,進(jìn)程間通訊),和Scheduling(調(diào)度),其他功能模塊做為用戶進(jìn)程運行。
REX 是在 L4 之上封裝的服務(wù),是一個搶占式,多任務(wù)的RTOS,所有的任務(wù)都以task的形式存在,REX提供包括任務(wù)創(chuàng)建,同步,互斥,計時器,中斷控制等功能的 API,這里的task實際上就是我們的線程,每個 task對應(yīng)著一個線程。REX維護(hù)一個task list(雙向鏈表),始終運行高優(yōu)先級的task。products里面所有的服務(wù)包括3g協(xié)議棧等都是以task的形式跑在rex之上的。而Brew的話是運行的環(huán)境,跟Java 有點兒類似,相當(dāng)于是一個虛擬機(jī)。AMSS――高級的移動用戶軟件(Advanced Mobile Subscriber Software)技術(shù),是一種新的軟件架構(gòu),是對原來軟件架構(gòu) DMSS 的升級。AMSS源代碼實際上是QC BREW(Binary Runtime Environment For Wireless)平臺的的底層部分,去掉了為應(yīng)用程序提供接口的AEE(application execution environment)部分,高通在Dual Proc芯片上的其他平臺基本上都是采用的這樣的架構(gòu)。
參考文檔:
微內(nèi)核操作系統(tǒng)及L4概述
http://wenku.baidu.com/view/90929762caaedd3383c4d311.html MSM平臺上的AMSS http://blog.csdn.net/yili_xie/archive/2010/01/04/5129469.aspx
1.2.2 選擇合適的源代碼以及工具 要編譯出可供燒寫使用的鏡像文件需要三部分代碼: 1)獲取經(jīng)過高通打補(bǔ)丁的 android 源代碼 2)獲取高通針對不同處理器的 vendor 源代碼 3)獲取 modem 源代碼
1.2.2.1 獲取經(jīng)過高通打補(bǔ)丁的android 源代碼 網(wǎng)址:
http://004km.cn1312 Chipset(such as QSC6270):MSM7227-1 RF chipset(such as RGR6240):RTR6285 PMIC chipset(such as PM7540):PM7540 WCMDA Supported Bands(900,1900,2100?.if support WCDMA):2100 CMDA Supported Bands(450,850,1900,2100? if support CDMA):not suport OS(Brew,BMP,Android,WM,ThinUI(no UI)?):android froyo OS version(Android Donuts?): android froyo
1.2.2.3.1 高通 modem 源代碼編譯前的修正
從高通獲取的源代碼直接編譯會存在一些問題,以下為可能的問題以及解決方法:
1)為相應(yīng)的腳本加上編譯選項
vim./AMSS/products/7x30/build/ms/xxxxxx.cmd 加上: BUILD_UNIX=yes
2)如果編譯過程出現(xiàn).pl 文件沒有執(zhí)行權(quán)限而退出,那么為工程下面所有的 pl 文件加上可執(zhí)行屬性,命令:
find./-name “*.pl” |xargs chmod 755
3)無法找到需要的 pl 腳本解析器
vim./AMSS/products/7x30/tools/build/depgen.pl 修改
#!/pkg/perl/5.6.1/bin/perl-w 為
#!/usr/bin/perl-w
4)如果出現(xiàn)錯誤:
“AMSS/products/7x30/core/bsp/build/data/incpathsaaabqmlym.py”, line 14 IndentationError: expected an indented block 修改文件:./AMSS/products/7x30/core/bsp/build/scripts/genpaths.pl 內(nèi)容:
#if($line =~ /^# makefile(from/)為:
if($line =~ /^# makefile /)原因分析:
genpaths.pl 會對編譯過程的中間信息 :...line=# makefile(from'incpaths.min',line 363)line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc...等信息進(jìn)行解析,由于我們使用的是中文系統(tǒng),所以以上內(nèi)容變?yōu)椋?line=# makefile(從'incpaths.min',行 363)line=QVPCODEC_AUDIOINC = $(QVPCODEC)/audio/inc 所以導(dǎo)致:
#if($line =~ /^# makefile(from/)判斷條件為為 false 無法正確生成 incpathsaaabqmlym.py,python 在解析該文件的時候認(rèn)為存在語法錯誤。
在 modem 代碼 M7630AABBQMAZM2020(HY11-N2280-2.zip)中開始使用 genincpaths.py 產(chǎn)生
./AMSS/products/7x30/core/bsp/build/data/incpathsaaabqoazm.py 文件,所以修改文件 amend-source-code-qualcomm-modem.sh 在腳本中需要加入以下內(nèi)容: incpathsxxx_py=$PRODUCT_DIR/core/bsp/build/scripts/genincpaths.py if test-f $incpathsxxx_py;then PERL=`which /usr/bin/perl` sed-i “s/(from//g” $incpathsxxx_py fi./AMSS/products/7x30/multimedia/audio/drivers/Adie/AdieCodecDb/src/DALAdieCodecDb.c #DalAdieCodecDbInternal.h 改為: #include “DALAdieCodecDbInternal.h”
5)如果出現(xiàn) make: execvp:../../../../platform/cs/bin/cifc: Permission denied 錯誤,執(zhí)行以下命令:
chmod-R 755 AMSS/platform/cs/bin/*
1.2.3 建立 Android 開發(fā)環(huán)境(略)
curl http://android.git.kernel.org/repo >~/bin/repo chmod a+x ~/bin/repo export PATH=~/bin:$PATH 1)安裝基本軟件
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl sun-java5-jdk zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev
2)安裝 sun-java5-jdk ubuntu 下通過命令: sudo apt-get install sun-java5-jdk 將會安裝下面的包 sun-java5-bin sun-java5-demo sun-java5-jdk sun-java5-jre sun-java5-plugin 如果ubuntu 發(fā)布版本中沒有 sun-java5-jdk 那么 sudo vim /etc/apt/source.list #for sun-java5-jdk deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse sudo apt-get update sudo apt-get sun-java5-jdk 或者,如果 ubuntu 版中不支持 apt-get,那么用手動安裝: sudo mount-t nfs 172.20.127.15:/home/shared /mnt sudo dpkg-i /mnt/tools/debs/java-1.5.0-sun/sun-java5-*
3)配置usb cd /etc/udev/rules.d/ sudo vi 50-android.rules # adb single interface device SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18d1”, SYSFS{idProduct}==“d00d”, MODE=“0664”, GROUP=“plugdev” # adb composite interface device SUBSYSTEM==“usb_device”, SYSFS{idVendor}==“18d1”, SYSFS{idProduct}==“deed”, MODE=“0664”, GROUP=“plugdev” # Sooner low-level bootloader BUS==“usb”, SYSFS{idVendor}==“0bb4”, SYSFS{idProduct}==“0a51”, MODE=“0664”,GROUP=“plugdev” sudo /etc/init.d/udev restart
1.2.4 建立 modem 開發(fā)環(huán)境
與android 源代碼不同,modem 編譯工具使用的是 RVDS ,實際上只用到其中的 RVCT 編譯器,高通不提供該工具,我們必須從arm公司獲取相應(yīng)的授權(quán),RVDS 是 ADS 的升級版本,從 ADS 1.2 開始到 RVDS 3.1 我們公司都有其授權(quán),按照高通的要求我們目前必須使用 RVDS 2.2 并且使用他的 349 patch。RVDS 2.2 安裝以及使用步驟如下:
1).RVDS 2.2 共享在 172.20.127.15:/home/shared/ 目錄 sudo mount-t nfs 172.20.127.15:/home/shared/ /mnt cd /mnt/qualcommon/RVDS-2.2/ linux下rvds2.2的安裝程序為:
./rvds2.2_linux-pentium/setuplinux.bin 執(zhí)行以上命令,按照默認(rèn)步驟安裝,安裝路徑為:~/ARM 注意事項:
安裝過程如果出現(xiàn)錯誤:
..................java.lang.UnsatisfiedLinkError: /tmp/ismp001/6073753.tmp: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory 從網(wǎng)上下載 libstdc++-libc6.2-2.so.3 拷貝到 /usr/lib 目錄 ,或者從下面地址獲?。?/p>
http://172.20.127.15/repositories/DocsAndTools/Tools/Qualcomm/RVDS-2.2-patch/patch/libstdc++-libc6.2-2.so.3 工具的安裝通過腳本進(jìn)行了簡化,具體過程請參考文檔: 80-N0216-2_A_M7630AABBQMAZM1170.pdf 80-VR881-7_B_M7630AABBQMLZA1200.pdf 80-VR192-1_C_AMSS_Linux_Software_Users_Guide.pdf 80-VR192-1_D_AMSS_Linux_Software_Users_Guide.pdf
2)安裝高通指定的 593 patch cd /mnt/qualcommon/RVDS2.2/下執(zhí)行命令:./setup-patch-rvct2.2-bin593-lib349.sh
目前版本只支持 32 位的系統(tǒng) 1.2.4.1 補(bǔ)充
vim./AMSS/products/7x30/core/bsp/build/scripts/defaults.py 定義了工作線程
#num_jobs = num_cpu * 2 modified by mhf num_jobs = 2 if num_jobs < 4: num_jobs = 2 if num_jobs > 8: num_jobs = 8 env.SetOption('num_jobs', num_jobs)――――――― 獲取 RVDS 官方網(wǎng)站下載評估版本
https://silver.arm.com/browse http://004km.cn/wiki/QAEP#Branch_Releases http://004km.cn/wiki/QLBEP 下載 M7630AABBQMLZA1150 分支:
February 1, 2010 M7630AABBQMLZA1150 msm7630 eclair M7630AABBQMLZA1150.xml 命令如下:
mkdir-pv ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 cd ~/workspace/gphone/eclair-M7630AABBQMLZA1150-20100201 repo init-u git://codeaurora.org/platform/manifest.git-b eclair-m M7630AABBQMLZA1150.xml nohup repo sync 代碼下的 vendor/qcom-proprietary 來自包 HY11-VR881-5.zip 以上兩部分代碼已經(jīng)下載并且合并,共享在:
http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150---------------編譯 eclair 代碼
svn co http://172.20.127.15/repositories/TD1002/trunk/eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150 cd eclair-M7630AABBQMLZA1150$../setenv.sh../make-image.sh ======= modem代碼從高通網(wǎng)站:https://support.cdmatech.com/login/ 上獲取 我們目前使用的是: 共享在:
http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220-------編譯 modem 代碼
svn co http://172.20.127.15/repositories/TD1002/trunk/modem-M7630AABBQMAZM1220 cd modem-M7630AABBQMAZM1220../setenv-qualcomm.sh../make ======== 編譯結(jié)果分別如下:------------其中 adsp.mbn,amss.mbn,dbl.mbn,osbl.mbn,partition.mbn 位于以下目錄:./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/adsp.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/amss.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/dbl.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/osbl.mbn./modem-M7630AABBQMAZM1220/AMSS/products/7x30/build/ms/bin/AAABQMAZ/partition.mbn------------appsboot.mbn,boot.img,system.img,userdata.img 位于以下目錄:./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/appsboot.mbn./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/boot.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/system.img.ext3./eclair-M7630AABBQMLZA1150/out/target/product/msm7630_surf/userdata.img.ext3------------eMMC 啟動使用的是 ext3 文件系統(tǒng),需要使用鏡像 system.img.ext3 userdata.img.ext3 補(bǔ)充說明:
partition.mbn 文件的原始數(shù)據(jù)來自配置文件:
./AMSS/products/7x30/tools/jsdcc/partition_load_pt/partition.xml
1.3 高通平臺,android和 modem 編譯流程分析 android 代碼編譯流程分析 modem 代碼編譯流程分析 1.3.1 android代碼編譯流程分析
1.從服務(wù)器下載 android 源碼到當(dāng)前目錄
http://smartphone/repositories/TD1014/branch/froyo_almond-M76XXTSNCJNLYA6050-drivers/ svn co http://172.20.127.15/repositories/TD1014/trunk/froyo_almond-M76XXTSNCJNLYA6050/ cd froyo_almond-M76XXTSNCJNLYA6050/../setenv.sh 設(shè)置環(huán)境變量 Setting Environment...通常情況下 generic 用于編譯模擬器版本 Options are: 1.generic 2.msm7627_surf 3.msm7627_ffa 4.tiny-system ====從以上列表中選擇==== Which would you like? [1]
燒錄的鏡像文件appsboothd.mbn appsboot.mbn boot.img system.img userdata.img persist.img 來自 android 源碼 appsboot.mbn 的主要功能是裝載 linux 內(nèi)核,通過 linux 的引導(dǎo)來完成 android 系統(tǒng)的加載,appsboot.mbn 被燒寫在相應(yīng)的分區(qū),它的加載由 osbl.mbn 來完成,osbl.mbn 程序來自 modem。
7x30 7x27 系列 appsboot 不一樣,7x30 的 appsboot.mbn 是 7x27 appsboothd.mbn appsboot.mbn 兩個文件的合并
1)appsboot.mbn 生成過程解析
2)boot.img 生成過程解析,怎樣手動生成 boog.img
1.3.1.1 編譯工具檢測
make out/target/product/msm7630_surf/appsboot.mbn 1.3.1.1.1
1.3.1.2 appsboot.mbn 生成過程解析
make out/target/product/msm7630_surf/appsboot.mbn make out/target/product/msm7630_surf/nandwrite make out/target/product/msm7630_surf/emmc_appsboot.mbn 分別執(zhí)行:
make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_EMMC_OBJ msm7630_surf EMMC_BOOT=1 生成 nandwrite =============== #build nandwrite as a part of Android Build TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk NANDWRITE_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/nandwrite
nandwrite_clean: $(hide)rm-f $(TARGET_NANDWRITE)$(hide)rm-rf $(NANDWRITE_OUT)
$(NANDWRITE_OUT): mkdir-p $(NANDWRITE_OUT)
$(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)@echo $(TARGET_PRODUCT)_nandwrite $(MAKE)-C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT)$(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1 ================
vim./bootable/bootloader/lk/makefile:98: TARGET := msm7630_surf #./bootable/bootloader/lk/project/msm7630_surf.mk PLATFORM := msm7x30 #./bootable/bootloader/lk/target/msm7630_surf/rules.mk msm7x30 msm7630_surf.mk msm7630_surf_nandwrite ============================= include project/$(PROJECT).mk include target/$(TARGET)/rules.mk include target/$(TARGET)/tools/makefile include platform/$(PLATFORM)/rules.mk include arch/$(ARCH)/rules.mk include platform/rules.mk include target/rules.mk include kernel/rules.mk include dev/rules.mk include app/rules.mk...include make/module.mk...include make/build.mk ======================== vim bootable/bootloader/lk/make/module.mk INCMODULES := $(MODULES)$(info including $(INCMODULES))include $(addsuffix /rules.mk,$(INCMODULES))展開為:./bootable/bootloader/lk/app/nandwrite/rules.mk./bootable/bootloader/lk/dev/fbcon/rules.mk./bootable/bootloader/lk/dev/keys/rules.mk./bootable/bootloader/lk/lib/debug/rules.mk./bootable/bootloader/lk/lib/heap/rules.mk./bootable/bootloader/lk/lib/libc/rules.mk./bootable/bootloader/lk/lib/ptable/rules.mk ======================== bootable/bootloader/lk/make/build.mk:29: include arch/$(ARCH)/compile.mk
./bootable/bootloader/lk/project/msm7630_surf_nandwrite.mk 中有: MODULES += app/nandwrite./bootable/bootloader/lk/platform/msm7x30/rules.mk中有: MODULES += dev/fbcon./bootable/bootloader/lk/kernel/rules.mk 中有: MODULES += lib/libc lib/debug lib/heap./bootable/bootloader/lk/target/msm7630_surf/rules.mk 中有: MODULES += dev/keys lib/ptable 所以:
MODULES= app/nandwrite dev/fbcon dev/keys lib/debug lib/heap lib/libc lib/ptable 因為
ifeq($(BUILD_NANDWRITE), 1)APPSBOOTHDR_FILES := else out/host/linux-x86/bin/acp-fpt out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk out/target/product/msm7630_surf/nandwrite
25780 184 34000 59964 ea3c../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk arm-eabi-objcopy-O binary../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.bin generating listing:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.lst generating listing:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.debug.lst generating symbols:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.sym generating size map:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.size make[2]:正在離開目錄
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk make[1]:正在離開目錄
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk target Prebuilt:(out/target/product/msm7630_surf/nandwrite)
make-C bootable/bootloader/lk BOOTLOADER_OUT=./out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 make[2]: 正在進(jìn)入目錄
`/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk` msm7630_surf_nandwrite make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/nandwrite msm7630_surf_nandwrite BUILD_NANDWRITE=1 ==》生成 mkheader 工具
gcc target/msm7630_surf/tools/mkheader.c-o target/msm7630_surf/tools/mkheader
$(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld @echo generating $@ @$(MKDIR)$(NOECHO)sed “s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/” < $< > $@
generating../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/system-onesegment.ld compiling arch/arm/crt0.S compiling arch/arm/crt0.S。。compiling lib/ptable/ptable.c compiling lib/ptable/ptable.c
vim bootable/bootloader/lk/platform/msm7x30/rules.mk-----LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld include platform/msm_shared/rules.mk-----
./build/core/product_config.mk:177:TARGET_DEVICE := $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_DEVICE)./build/core/envsetup.mk:152:OUT_DIR := $(TOPDIR)out./build/core/envsetup.mk:159:TARGET_OUT_ROOT_release := $(OUT_DIR)/target./build/core/envsetup.mk:161:TARGET_OUT_ROOT := $(TARGET_OUT_ROOT_$(TARGET_BUILD_TYPE))./build/core/envsetup.mk:178: TARGET_PRODUCT_OUT_ROOT := $(TARGET_OUT_ROOT)/product./build/core/envsetup.mk:184:PRODUCT_OUT := $(TARGET_PRODUCT_OUT_ROOT)/$(TARGET_DEVICE)build/core/envsetup.mk:200:TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj bootable/bootloader/lk/AndroidBoot.mk:4:BOOTLOADER_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_OBJ bootable/bootloader/lk/makefile:32:BUILDDIR := $(BOOTLOADER_OUT)/build-$(PROJECT)bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk 所以:
TARGET_PRODUCT_OUT_ROOT=out/target/product/ PRODUCT_OUT=out/target/product/msm7630_surf/ TARGET_OUT_INTERMEDIATES=out/target/product/msm7630_surf/obj/ BOOTLOADER_OUT=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/ 所以:
BUILDDIR=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf 所以:
OUTELF=out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk
make-C bootable/bootloader/lk BOOTLOADER_OUT=../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ msm7630_surf
bootable/bootloader/lk/makefile OUTELF := $(BUILDDIR)/lk./bootable/bootloader/lk/make/build.mk $(OUTELF): $(ALLOBJS)$(LINKER_SCRIPT)@echo linking $@ $(NOECHO)$(LD)$(LDFLAGS)-T $(LINKER_SCRIPT)$(ALLOBJS)$(LIBGCC)-o $@
vim./bootable/bootloader/lk/AndroidBoot.mk TARGET_NANDWRITE := $(PRODUCT_OUT)/obj/nandwrite/build-$(TARGET_PRODUCT)_nandwrite/lk $(TARGET_NANDWRITE): nandwrite_clean $(NANDWRITE_OUT)@echo $(TARGET_PRODUCT)_nandwrite $(MAKE)-C bootable/bootloader/lk BOOTLOADER_OUT=../../../$(NANDWRITE_OUT)$(TARGET_PRODUCT)_nandwrite BUILD_NANDWRITE=1
BOOTLOADER_EMMC_OUT := $(TOP)/$(TARGET_OUT_INTERMEDIATES)/BOOTLOADER_EMMC_OBJ
vim./bootable/bootloader/lk/make/build.mk $(OUTELF): $(ALLOBJS)$(LINKER_SCRIPT)@echo linking $@ $(NOECHO)$(LD)$(LDFLAGS)-T $(LINKER_SCRIPT)$(ALLOBJS)$(LIBGCC)-o $@
bootable/bootloader/lk/makefile:33:OUTBIN := $(BUILDDIR)/lk.bin bootable/bootloader/lk/makefile:34:OUTELF := $(BUILDDIR)/lk
./lk/platform/msm7x30/rules.mk:23:LINKER_SCRIPT += $(BUILDDIR)/system-onesegment.ld
==》鏈接 lk linking../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk linking../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk generating image:../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk.bin generating image:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin text data bss dec hex filename 29592 7388 42720 79700 13754../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk text data bss dec hex filename 25780 184 34000 59964 ea3c../../.././out/target/product/msm7630_surf/obj/nandwrite/build-msm7630_surf_nandwrite/lk
==》以 binary 格式,把文件
out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk 輸出到:
out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin arm-eabi-objcopy-O binary out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin ==》
生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.debug.lst 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym 生成...out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size make[1]:正在離開目錄 /opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/bootable/bootloader/lk ==》
make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi-msm7630-perf_defconfig make[1]: 正在進(jìn)入目錄
/opt/workspace/gphone/qualcomm/eclair-M7630AABBQMLZA1150/kernel generating symbols:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.sym generating size map:../../.././out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.size
mkheader 從 lk.bin 生成 appsboothd.mbn 語法: mkheader
out/target/product/msm7630_surf/appsboot.mbn cat out/target/product/msm7630_surf/appsboothd.mbn out/target/product/msm7630_surf/obj/BOOTLOADER_OBJ/build-msm7630_surf/lk.bin > out/target/product/msm7630_surf/appsboot.mbn 刪除:out/target/product/msm7630_surf/appsboothd.mbn ==== 1.3.1.3 boot.img 生成過程解析,怎樣手動生成 boog.img boot.img 包括兩個部分: kernel 和 ramdisk,通過命令: make out/target/product/msm7630_surf/boot.img showcommands 會自動生成 kernel 和 ramdisk,然后把兩者合并制作成燒寫的鏡像文件:boot.img kernel 為
out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage 或者 out/target/product/$TARGET_PRODUCT/kernel , kernel 是 zImage 的拷貝
編譯內(nèi)核之前必須獲取一個默認(rèn)的配置文件.config ,此配置文件可以生成,或者來自默認(rèn)配置,高通中 msm7630_surf 的
默認(rèn)配置文件名為: msm7630-perf_defconfig 在文件: vendor/qcom/msm7630_surf/AndroidBoard.mk:45 中通過: KERNEL_DEFCONFIG := msm7630-perf_defconfig 進(jìn)行了指定。我們可以通過命令:
make-j3 ARCH=arm CROSS_COMPILE=arm-eabi-kernel showcommands 或者通過如下命令一步步完成:
1.獲取默認(rèn)的內(nèi)核配置并生成.config 的命令如下: make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ ARCH=arm CROSS_COMPILE=arm-eabi-msm7630-perf_defconfig-C kernel 告訴 make 進(jìn)入 kernel 工作目錄,到其下面尋找 makefile 文件
O 內(nèi)核編譯的中間文件以及編譯結(jié)果等都存儲在該目錄下,此做法的好處是不會在kernel源代碼目錄下生成垃圾文件
ARCH=arm 告訴系統(tǒng)到./kernel/arch/$ARCH/configs/ 目錄下找文件 msm7630-perf_defconfig,生成的.config 保存在:
out/target/product/msm7630_surf/obj/KERNEL_OBJ/.config 2.手動編譯內(nèi)核
make-C kernel O=../out/target/product/msm7630_surf/obj/KERNEL_OBJ/ 3.如果需要配置內(nèi)核,使用下面的命令 make kernelconfig 他首先會進(jìn)入 menuconfig 界面,用戶配置完成以后,會把修改后的配置文件$(KERNEL_OUT)/.config 更新為默認(rèn)的配置文件
cp out/target/product/msm7627_ffa/obj/KERNEL_OBJ/.config kernel/arch/arm/configs/msm7627-perf_defconfig kernel/arch/arm/configs/$(KERNEL_DEFCONFIG)
4.手動生成 ramdisk 執(zhí)行命令
make out/target/product/msm7630_surf/ramdisk.img showcommands 會用到命令:
out/host/linux-x86/bin/mkbootfs out/target/product/msm7630_surf/root | out/host/linux-x86/bin/minigzip > out/target/product/msm7630_surf/ramdisk.img 5.手動生成 boot.img 需要使用命令 mkbootimg ,語法如下: mkbootimg--kernel 內(nèi)核--ramdisk ramdisk鏡像--cmdline 命令行--base 基地址--pagesize 大小--output 輸出的boot.img ========== KERNEL=out/target/product/$TARGET_PRODUCT/kernel KERNEL=out/target/product/$TARGET_PRODUCT/obj/KERNEL_OBJ/arch/arm/boot/zImage RAMDISK=out/target/product/$TARGET_PRODUCT/ramdisk.img CMDLINE=“console=ttyDCC0 androidboot.hardware=qcom” BASE=0x00200000 PAGESIZE=4096 OUTPUT=out/target/product/$TARGET_PRODUCT/boot.img out/host/linux-x86/bin/mkbootimg--kernel $KERNEL--ramdisk $RAMDISK--cmdline “$CMDLINE”--base $BASE--pagesize $PAGESIZE--output $OUTPUT =========================================
編譯 bootloader(appsboot.mbn),nandwrite 生成過程解析./vendor/qcom/msm7630_surf/AndroidBoard.mk:25: include bootable/bootloader/lk/AndroidBoot.mk =================== 因為有:
bootable/bootloader/lk/AndroidBoot.mk:3: TARGET_BOOTLOADER := $(PRODUCT_OUT)/appsboot.mbn INSTALLED_BOOTLOADER_TARGET := $(PRODUCT_OUT)/bootloader file := $(INSTALLED_BOOTLOADER_TARGET)
第五篇:android開發(fā)實習(xí)報告總結(jié)
Android開發(fā)實習(xí)總結(jié)
有一名話叫做:不經(jīng)過風(fēng)雨,怎么見彩虹?我想改一下:不真正進(jìn)入社會,怎能了解社會呢?
在這次實習(xí)中,給我收獲最大的是我覺得很多工作需要我去摸索和探討,要不怕吃苦,勇于激流勇進(jìn),有的工作雖然單挑又重復(fù),但這是磨練意志最有效的方法,我告誡自己要認(rèn)真完成,對每項工作都要他看成是公司對自己的一次考核,做到每一件事的過程中遇到困難,一定要爭取不拋棄,不放棄,堅持“戰(zhàn)斗”,只要希望還在,勝利一定屬于我們。
在此次專業(yè)實習(xí)的過程中,我進(jìn)入了廣州外語通科技有限公司當(dāng)任Android開發(fā)實習(xí)生,并參加了兩次大項目的研發(fā),從實際到理論,加深了我們對軟件技術(shù)專業(yè)的理解,和對于與社會接軌的深刻感受。
作為學(xué)生,我們更多的是課本的知識的理解,理論的優(yōu)勢是我們的特色,但是怎樣將理論結(jié)合實際卻是擺在我們面前的難題。而參觀廣州外語通科技有限公司正視給了我們直觀的解讀。廣州外語通科技有限公司建立了一整套符合國際標(biāo)準(zhǔn)的質(zhì)量、成本和交付體系,軟件開發(fā)質(zhì)量控制和過程改善能力已達(dá)到了國際先進(jìn)水平,秉承“用開拓的意識、創(chuàng)造新的價值”的企業(yè)理念,不斷跟蹤國際先進(jìn)技術(shù)與管理思想,研發(fā)和提供優(yōu)質(zhì)軟件產(chǎn)品和技術(shù)服務(wù),為客戶不斷創(chuàng)造和提升價值。正是因為秉持這樣的理念其完整的價值鏈和細(xì)致的軟件服務(wù),給了我們以軟件技術(shù)專業(yè)的具體實際的體驗。與此同時,廣州外語通科技有限公司企業(yè)的參觀使我們對中國物流企業(yè)的現(xiàn)狀有了大概的了解,參觀過程中不同倉庫的設(shè)施和地面的設(shè)置的挑選更是讓我們多了超出理論的認(rèn)識。通過指導(dǎo)人員的講解我們對中國物流企業(yè)的信息化有了大致的了解:中國物流企業(yè)信息化整體水平不高是其信息化建設(shè)的核心問題。這包括:標(biāo)準(zhǔn)不統(tǒng)一,資源浪費嚴(yán)重;大型應(yīng)用軟件系統(tǒng)應(yīng)用不普遍,應(yīng)用層次低;現(xiàn)有各軟件系統(tǒng)之間相互孤立,形成“信息孤島”;信息化建設(shè)發(fā)展不平衡,造成“信息鴻溝”;硬件設(shè)備的利用率不高,資源浪費嚴(yán)重;綜合信息系統(tǒng)是物流業(yè)信息化建設(shè)的必然趨勢。
如果說前兩次的參觀實習(xí)是給的我們直觀的視覺沖突和心理震撼,那么后來的信息化講座就揭開了信息化和軟件技術(shù)專業(yè)的神秘面紗。通過經(jīng)驗豐富的演講者的ppt演示我們了解了多個行業(yè)的信息化實施過程和具體的商務(wù)轉(zhuǎn)變成軟件技術(shù)專業(yè)活動的流程?,F(xiàn)實中簡單的商務(wù)活動一旦設(shè)計成成功的xx專業(yè)流程將涉及多個業(yè)務(wù)流程,整體的實施過程是復(fù)雜而艱難的。鑒于中國Android專業(yè)已經(jīng)很成熟,各方面的支持還不夠很完備,這使得中國Android專業(yè)的發(fā)展有很大的擴(kuò)展性。
作為應(yīng)屆畢業(yè)生,在畢業(yè)前的這次專業(yè)實習(xí),無疑是給了我們對Android專業(yè)的清晰認(rèn)識,這也是最為軟件技術(shù)專業(yè)專業(yè)的學(xué)生的最大感悟。當(dāng)然實習(xí)中還有著更多的感觸,包括學(xué)習(xí),生活,工作各個方面。
就學(xué)習(xí)而言,專業(yè)實習(xí)它更偏重于應(yīng)用,更加細(xì)致,要求也更加嚴(yán)格。作為應(yīng)屆畢業(yè)生的我們要想適合自己的工作,在實際中實現(xiàn)自己的理想,必需不斷的增加自己的能力,做事情更加專注。
就生活而言,專業(yè)學(xué)習(xí)展示給我們看各個不同的行業(yè)的人們的生活,不同行業(yè)的人們將自己的行業(yè)融入自己的生活,這樣大的人群的生活展示給我們未來的生活遠(yuǎn)景,選擇什么樣的生活也是我們現(xiàn)在的最重要的抉擇。一旦下定決心,也就要開始為自己的生活做準(zhǔn)備,勝利是屬于有準(zhǔn)備的人的?,F(xiàn)在的我就要為自己的生活做準(zhǔn)備,不斷的充實自己。
就工作而言,無疑的本次的xx專業(yè)專業(yè)實習(xí),展示給我們了多種職業(yè),而作為應(yīng)屆畢業(yè)生,擇業(yè)的選擇是大多數(shù)人所面對的問題。就我們xx專業(yè)而言,面試時常遇見的問題就是“Android專業(yè)是干什么的?”或許大多數(shù)的學(xué)生跟我一樣對android專業(yè)并沒有清晰的概念,所以也并不能很好的回答這樣的問題。不管怎樣,勤勞的人是讓人欽敬的,但所接觸的朋友說“多年的工作讓我清楚這個社會的運轉(zhuǎn)不是控制在辛勤勞動的人手上,而是那一班根深帝固的政治家、資本家手中...工作中的認(rèn)真負(fù)責(zé)不是為了討好表現(xiàn),而是為了要冶練自己的品性,是在為自己,不是為老板”。
上面的認(rèn)識都是正面的,也是自己受益的主要部分,但就個人而言,本次的xx專業(yè)實習(xí)更多的是讓自己認(rèn)識到自己的不足。作為一個即將畢業(yè)的應(yīng)屆生,通過此次的實習(xí),更多的是對大學(xué)四年的回顧和反省。進(jìn)入了社會,和學(xué)校的感覺是完全不一樣的。只有在剛進(jìn)入公司的一個月里,大家還把你當(dāng)作新人,時間久了公司的領(lǐng)導(dǎo)就把你與其它同事相比較;當(dāng)你開始跑客戶時,客戶把你與做了很多年的銷售相比較,沒人把再把你當(dāng)新人看待,而你把你當(dāng)作一個正式的有能力的人使用。
看著那些員工忙忙碌碌的來來去去,堅定的態(tài)度是那么一點一滴在鑄就起來,一個被人認(rèn)可的人首先一定是一個認(rèn)真負(fù)責(zé)的人,一個認(rèn)真負(fù)責(zé)的人無論到哪里都可以站得正。相對于經(jīng)驗和技術(shù)而言,這些都是可以積累的,可以日久能熟的,但是否能有正確的態(tài)度卻是因人而異的,有的人永遠(yuǎn)讓人感覺畏鎖。我從來沒有把現(xiàn)在的工作當(dāng)作實習(xí),我就是認(rèn)定我是在工作,而不是來學(xué)習(xí)東西的。我是為工作而學(xué)習(xí),學(xué)習(xí)是為了把工作做得更好。
總的來說,我們這一次實習(xí)是比較成功的,大家都能學(xué)習(xí)到了很多在校園、在課堂上、課本上學(xué)不到的東西,也了解很多和懂得了做人的道理,特別是體會到生活中的艱辛和找工作的不容易。
感謝這次實習(xí),感謝這次實習(xí)的教師,感謝為我們爭取了這實習(xí)機(jī)會的領(lǐng)導(dǎo)。這次實習(xí),一定會令我的人生走向新一頁!
XXX
2016-01-08