導航:首頁 > 源碼編譯 > ril編譯環境

ril編譯環境

發布時間:2023-03-22 03:51:09

A. 請問誰能告訴我,學習安卓開發的話都要學哪些內容嗎需要HTML,javaWEB,CSS之類的嗎

學習安卓開發的話一般會涉及一部分Java的知識,但是Javaweb和HTML以及CSS屬於前端部分的知識,一般涉及的會比較少。安卓開發一般學習的內容有以下:

一、android基礎課程

二、Android應用開發

三、Android游戲開發

四、Android底層開發

B. 科脈 瑞通商業管理軟體 怎麼打不開了 急!點開軟體就會出現對話框 系統運行文件處理失敗(RIL)

方法1、開機不斷點擊F8鍵,進入系統操作選單(如果是Win8,Win8.1,Win10系統,在看見開機畫面後長按電源鍵關機,短時間內重復三次左右可以進入WinRE {Windows 恢復環境},但有的用戶可能需要直接斷開電源。這樣開機後應該能出現高級恢復的界面了),選「最後一次正確配置」,重啟電腦,看能否解決。

方法2、開機不斷點擊F8鍵,進入系統操作選單(如果是Win8,Win8.1,Win10系統,在看見開機畫面後長按電源鍵關機,短時間內重復三次左右可以進入WinRE {Windows 恢復環境},但有的用戶可能需要直接斷開電源。這樣開機後應該能出現高級恢復的界面了),然後尋找「安全模式」,並進入「安全模式」,如能成功進入,依次單擊「開始」→「所有程序」→「附件」→「系統工激高滾具」→「系統還原」,出現「系統還原對話框」,選擇「恢復我的計算機到一個較早的時間」。 這樣可以用Windows系統自帶的系統還原功能,還原到以前能正常開機的時候一個還原點。(如果有的話)

方法3、嘗試靜電釋放處理。關機後將您的電腦電源線及電池拆下;長按開機鍵(30秒以上),然後嘗試重新開機。

方法4、用系統安裝光碟或者系統安裝U盤,放入光碟機或者插入USB介面,重啟電腦,進入光念敏盤安裝系統狀態或者進入U盤安裝系統狀態,等到啟動界面閃過後,不要選安裝系統,而是選修復系統,對目明余前系統進行修復(可能會運行很長時間,2-4小時都可能),耐心等待修復完成,看看是否能解決問題。(本文結尾,詳述了:U盤設置為第一啟動順位設備的方法)

如以上4個方法都無效,只能重裝系統。

C. 當下哪種語言更重要

面向底層,或高效率用C:如單片機,操作系統,資料庫實現
面向上層應用面向對象編程C++高效率:VC/QT/GTK編程,現在WPSlinux版是QT實現的
面向對象編程JAVA, Android,網頁腳本,也能編寫PC機應用比如freemind, 也有嵌入式方面的應用.
再就是網路動態語言,jsp/php/asp , jsp一般用於大型網站,php是開源較多,主要一般網站伏沒規模不大的在用,asp 好像不溫不火,
比較流行的:go python 還要懂shell腳本編程,
面向硬體的有:VHDL/verilog

matlab:演算法模擬
無論選哪種語言,商業開發基本上都會涉及到資料庫,db2、oraclemysql好像比較出名
小型資料庫sqlite,Android 就是用的這個

總之,各有各的用處,看你對哪方面感興趣,要學的有很多.
我是學嵌入式的,看一下我收集的嵌入式方面需要掌握的知識與技能:
=================================================================
Altium Designer 原理圖和PCB製作

STM32處理器

需求分析、設計方案

嵌入式軟硬體系統的設計、測缺畢納試;

技術文檔;

生產工藝技術支持。

-------------------------------------------------------------------
Linux平台下進行軟體開發

音視頻編解碼SDK的進行封裝

音視頻流存儲、傳輸模塊,設計、實現、優化及測試

編寫相關開發文檔、技術支持文檔、使用說明

=====
C/C++ 良好的編程習慣與文檔規范;
Linux 下進程間通信及內存管理機制
熟悉H.264,G.7xx,AMR,AAC等音視頻編碼
熟悉MP4,avi等文件格式
熟悉rtsp/rtp、rtmp、http
海思或者amberalla平台
通和協調能力
----------------------------------------------------------------------------
熟悉1種以上資料庫
--------------------------------------------------------------
機器人開發經歷或參加機器人相關研究
熟悉Android framework,以及Linux驅動開發,調試,有QT程經驗
熟練閱讀電路原理圖,以及PCB layout;
有效地對新人或普通開發工程師進行輔導
---------------------------------------------------------------------------
悉嵌入式環境下的 C/C++ 語言程序設計和匯編語言程序設計
精通個域網通信協議,如無線網路(Wi-Fi、BlueTooth、Zigbee等)等協議,具有智能家數轎居產品相關經驗
RM環境下的系統開發環境與工具,包括平台移植、驅動開發及調試,等等;
數字電路模擬電路基礎,熟悉uCOS,Linux,RThread,FreeRTOS等嵌入式操作系統內核程序設計
深入掌握一種或幾種嵌入式處理器系統(熟悉Arm、X86、PPC、MIPS)
---------------------------------------------------------------------------
WIFI模塊
----------------------------------------
懂日語、32歲以下
-------------------------------------------------------------------------------------
bootloader、內核板級移植、集成。
海思或者amberalla平台開發經驗
外設介面和通信協議,包括USB,CAN,LIN,TCP/IP等多種汽車和工業匯流排技術
無線通訊模塊、藍牙、GPRS、有線及無線通訊
物聯網電子消費品產品開發經驗
電氣電子產品開發和項目管理經驗
--------------------------------------------------------------------------------------
精通如下串列匯流排協議:USB/I2C/SPI/I2S/UART
悉Boot Loader,
具有Linux BSP經驗者
具備良好溝通、協作、學習能力,能夠主動在項目中承擔起責任
寫和移植內核設備驅動
裁剪和優化的Linux內核
----------------------------------------------------------------------------------
團隊管理經驗
硬體基本原理,能看懂原理圖和PCB
精通linux內核架構,熟悉多線程編程
精通多種常用傳輸匯流排協議,如IIC、SPI、CAN、IIS;
對無線網路數據傳輸有較深了解;使用過無線傳輸模塊,GPRS、3G等
WIFI驅動、WIFI應用、藍牙驅動、藍牙應用有較深的了解
對USB驅動有較深了解,做過USB設備驅動、對SD卡和TF卡
車載電子設備
熟悉視頻、音頻處理,熟悉視頻、音頻編解碼處理;
熟悉安卓架構,能編寫安卓中間件
ARM或DSP嵌入式軟體開發經驗
-----------------------------------------------------------------------------------------------
入式Linux系統體系結構設計,系統內核維護;
根據需求制定系統整體軟體方案,劃分軟體模塊;
優化uboot、Linux內核相關模塊;
深入了解ARM(Cortex-A8以上)體系結構
常用驅動程序及相關協議,如:Framebuffer、乙太網、USB、CAN匯流排、I2C、SPI等。可以對驅動程序進行深度的優化;
對視頻/圖像有較深刻認識,了解視頻/圖像編解碼相關知識;
使用OPenGL完成圖像渲染;
負責研究和開發3D引擎到Opengl的標准化介面;
深入理解QT底層實現機制。熟悉QT在不同平台之間的移植;
Ti/Freescale ARM開發經驗
認真對待每一項工作,同事之間團結互助;
良好的英文交流能力
--------------------------------------------------------------------------------------------
熟悉wifi,nrf2401,camera,audio 等外圍模組及相關協議
熟悉ucos—2
智能家居方面的實際開發經驗
----------------------------------------------------------------------------------
單片機、ARM、Cotrex-M3/M4等處理器
掌握網路、UART、LCD、SPI、I2C、RS485
搭建嵌入式Linux軟硬體系統
熟悉Linux內核機制
熟練完成嵌入式下linux的驅動開發與應用開發。
熟悉TCP/IP協議棧,Socket通信編程
熟悉HTTP、SNMP、DHCP等應用層協議。
CAN匯流排、WIFI、Zigbee等相關產品開發經驗
良好的語言表達溝通能力和團隊合作精神
------------------------------------------------------------------------------------
broad expertise

-----------------------------------------------------------------------------------------
具有linux,freeRTOS等主流嵌入式系統開發經驗
熟悉TCP/IP、WIFI、藍牙BLE、I2C等協議
有音頻、Andorid開發、Java虛擬機、雲端數據同步、智能家居產品等開發經驗
嵌入軟體, 驅動,協議棧,協議開發經驗
精通TCP/IP協議
用網路協議,了解防火牆, 路由交換技術
無線協議802.11,802.1X
熟悉Wi-Fi、ZigBee、藍牙,模擬信號、UART、RS232、RS485、各種現場匯流排、HART-IP、TCP/IP、OPC、OPC UA、BACNet等協議
立志於一起打造互聯網+工業。
---------------------------------------------------------------------------------------------
熟悉8583、EMV、PBOC等相關行業知識
3年以上 嵌入式 Linux 驅動開發經驗
讀懂硬體圖紙
熟練掌握 i2c、i2s、spi、gpio、uart、usb、lcd/framebuffer 等常用 Linux 驅動
Linux 中斷程序開發;
電機控制驅動、Linux系統管理、系統版本升級 等開發經驗
---------------------------------------------------------------------------------------------
雷達、超聲項目相關的研發
扎實全面的硬體電路設計、調試能力,熟悉模擬、數字及混合電路;
擁有DSP(TI TMS系列為佳),ARM, FPGA/CPLD 設計經驗;
解決並優化整體系統的信噪比、電磁屏蔽、能耗管理和熱耗散管理
熟悉PCB 布線,製版和調試

有擔任規模量產項目技術研發經歷
掌握交叉編譯環境、熟練典型Linux系統調用和應用程序開發
熟練掌握至少一種版本管理工具(如:SVN、GIT等);
對Linux系統內核及驅動程序有深入理解
對Linux內核進行深度定製和修改
------------------------------------------------------------------------------------------------
熟悉uC/OS下Camera,LCD、WIFI、RIL、IIC、SPI、UART、2G、各類型Sensor等各種外設驅動驅動模型
做過傳統單片機 pos 機 或類似stm32 pos機項目經驗
熟悉PBOC協議
能夠使用示波器和邏輯分析儀等
--------------------------------------------------------------------
C/C++ 網路及多線程編程
熟悉OpenWrt開發,移植
悉Qualcomm SDK者優先,有一定的演算法基礎,
----------------------------------------------------------------
用有電子工具軟體PROTEL\PADS等
網關產品,協議轉換類產品編程經驗
精通TCP/IP,ZIGBEE,MQTT協議,了解至少一種工業匯流排;
能獨立承擔產品的設計規劃,周邊介面硬體電路設計,功能軟體設計;
---------------------------------------------------------------------
熟悉C/C++/JAVA/J2ME語言編程
入式Linux操作系統,Linux驅動開發
精通Android開發平台及Framework框架原理
熟悉基本無線協議;
責任心和進取心
團隊協作
善於溝通和表達
獨立設計優化和移植HAL層外設模塊,如Camera、WiFi、藍牙、觸摸屏等模塊;
將Android系統移植到特定硬體平台上
給上層app及UI開發提供支持
--------------------------------------------------------------------------
移植和底層驅動
熟悉Linux內核架構;
Makefile、shell等腳本語言
熟悉RTP,RTCP,RTSP等流媒體協議
熟練使用Ethereal、Wireshark和Tcpmp等網路協議分析工具;
DVR、MDVR、DVS等監控產品開發經驗
-------------------------------------------------------------------------
產品的規劃設計、安卓等平台的底層驅動程序編寫調試
主板調試及外設調試,確保項目中驅動部分的質量和進度
獨立完成各業務模塊的驅動開發工作以及技術難題攻關、技術評估;
模塊的需求分析、詳細設計、編碼實現、和單元自測,參與產品需求分析並制定技術實施方案,根據產品功能需求設計並完成軟體實現,了解項目需求和業務流程。
2年以上單片機系統軟體開發經驗,2年以上的Android系統軟體驅動開發經驗(有成熟產品移植開發經驗),有WINCE平台開發經驗更佳;
uboot、kenel Driver開發以及HAL層等開發、調試和集成工作
熟悉ARM系列處理器架構,包括簡單的ARM處理器(Cortex-M3/M0)和復雜的多核ARM處理器的應用設計經驗;
無線網路數據傳輸有較深了解;使用過無線傳輸模塊,GPRS、3G等;
對USB驅動有較深了解,做過USB設備驅動、對SD卡和TF卡等實際應用上有獨到的心得體會或做過車載電子設備
夠獨立解決各類底層疑難問題,能夠同硬體和軟體應用工程師一起合作解決復雜問題;
責任心,主動學習,團隊溝通協作,文檔輸出, 英語讀寫
---------------------------------------------------------------------------------
精通Wifi協議及應用開發,熟悉博通與MTK系列wifi晶元;
熟悉TCPIP協議,熟悉HTTP、FTP等網路協議應用和開發
熟悉Wifi、射頻產品的生產和測試
必須有broadcom、Atheros或MTK的一種wifi方案經驗
自我驅動的學習和工作習慣
對未知技術和領域能快速掌握並實踐
溝通、協調, 項目管理、團隊管理
---------------------------------------------------------------------------------------
Socket編程,多線程編程,進程間通信
熟悉TCP/IP協議;熟悉HTTP,UDP/RTP/RTCP/RTS等流媒體傳輸與控制協議;
熟悉音視頻壓縮技術
------------------------------------------------------------
悉實時操作系統如ThreadX,FreeRTOS
熟悉串口,TCPIP協議,WIFI,GPIO,JTAG等底層編程
家電無線模塊軟體開發
不同硬體平台選型開發
撰寫並維護相關技術文檔
-----------------------------------------------------------------------
通32 bit ARM單片機系統開發,熟悉Atmel晶元
精通uCOSII系統,有相關開發經驗
OS(uCOSII與Linux)移植、驅動編寫與應用軟體開發
------------------------------------------------------------------------
主流單片機、ARM、FPGA硬體平台
熟悉VHDL/Verilog語言進行FPGA開發;
有效實現板級系統間數據通訊,
了解衛星通訊協議
熟悉使用LabView進行數據採集和系統測試
獨立進行PCB開發並聯系相關廠家進行生產
熟悉中國電子信息產業鏈,不僅懂得怎樣設計, 還要知道怎樣利用現有市場產品, 經濟快速有效地實現自己的設計
了解電子產品國際市場, 能夠從市場角度去開發產品;
英語能力可以應付國際化工作環境, 能夠熟練使用法語德語更好。
在本專業領域內有豐富人脈,能夠在全世界范圍內為具體問題找到合適的人;

D. 如何單獨編譯android系統的ril模塊

Android源碼目錄下的build/envsetup.sh文件,描述編譯的命令

- m: Makes from the top of the tree.

- mm: Builds all of the moles in the current directory.

- mmm: Builds all of the moles in the supplied directories.

要想使用這些命令,首先需塵兄要在android源碼根目錄執行. build/envsetup.sh 腳本設置環境

m:編譯所有的模塊

mm:編譯當前目錄下的模塊余殲,當前目錄下要有Android.mk文件

mmm:編譯指定路徑下的模塊,指定路徑下要有Android.mk文件

下面舉個例子說明,假設我要編譯android下的\hardware\libhardware_legacy\power模塊,當前目錄為源碼根目錄,方法如下:

1、. build/envsetup.sh

2、mmm hardware/libhardware_legacy/power/

編派毀襲譯完後 運行 make snod

會重新將你改過的模塊打入到system.img中

E. ril位於android哪一層

上圖清楚的標識了ril在整個Android系統各層的表現形式,我們這里主要分析Ril(RIDL、librefrenece_ril.so、libril.so);
…/Hardware/ril/rild RILD的代核悔碼實現,有main函數,作為ril層的入口點,常駐系統進程,負責與上下層交互
…/Hardware/ril/libril 負責與守護進程交互???
…/Hardware/ril/reference-ril/ Ril庫的實現,主要負責與modem進行交互

實現詳細分析:

從init.rc中service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so -- -d /dev/ttyUSB1 -u /dev/ttyUSB2
可以知道,Android啟動時,系統會啟動一個與ril相關的service (ril-daemon),其入口命令為/system/bin/rild

(一)那麼首先看看rild(/hardware/ril/rild/*);該目錄下有兩文鎮迅件radiooptions.c、rild.c
Radiooptions.c 看Makefile知道最終會被編譯成radiooptions二進制工具,放在/system/bin/下面,具體用法我在這里就不說了,我到終點裡面執行一下御氏此,把他的help信息打出了,再詳細的就自己看吧,源碼不長,也不復雜。
# radiooptions

F. RIL文件怎麼編輯,用什麼軟體修改

UltraEdit載入.pak文件慧握 直前族慶接修改里邊穗歲的數據
UltraEdit下載地址:http://www.onlinedown.net/soft/7752.htm

G. 怎麼查看是否調到ril的log

Android源碼,編譯之擾雀後在開發板中運行,我修改了hardware\ril\rild.c的代碼,在main函數中森梁加了LOGD函數列印log,但是使用adb shell logcat查看不到我所列印的信息。google查找原因說是默認情況下, init 執行的程序輸出的信息和錯緩春早誤到 /dev/null。如是按照其中的解決方法做了:
1.添加/system/bin/logwrapper,可以用logcat查看,例如
service /system/bin/logwrapper /system/bin/rild
2.添加console,像sh一樣直接輸出到console
service console /system/bin/sh
console

H. Android應用程序怎麼通過socket跟守護進程通信

一般的native和framework的通信是通過jni,但是這一般只是framework調用native,native如果有消息要怎樣通知上層 呢?android中GSP模塊提供一種解決思路,但是實現有些復雜,這里介紹一種使用socket通信的方法可以使native和framework自 由通信,具體實現如下:
java層主要代碼:
view sourceprint?
1.LocalSocket s =null;
2.LocalSocketAddress l;
3.s = new LocalSocket();
4.l = newLocalSocketAddress(SOCKET_NAME,LocalSocketAddress.Namespace.RESERVED);
5.s.connect(l);

到此時如果socket連接沒有源埋弊問題,就可以像正常液伍的讀寫了。
native層主要代碼:

view sourceprint?
1.s_fdListen = android_get_control_socket(SOCKET_NAME);
2.ret = listen(s_fdListen, n);
3.s_fdCommand = accept(s_fdListen, (sockaddr *) &peeraddr, &socklen);
連接沒有問題就可以使用linux中的write/read來對socket進行讀和寫了;
這里有必要解釋一下SOCKET_NAME,它的值是一個字元串,它在init.rc中定義的一個字元串。也就是說,我們可以通過修改init.rc中來申請我們需要的socket資源。
這里以ril為例來說明:

service ril-daemon /system/bin/rild
socket rild stream 660 root radio
socket rild-debug stream 660 radio system
user root
group radio cache inet misc audio
作用是由init.c來解析init.rc,並為我們啟動一個名為rild的守護進程,它是一個可執行程序,我們通過 adb shell在system/bin中可以找到雹族對應的rild文件。socket表示為這個守護進程分配一個socket資源,這個socket資源可以在 /dev/socket/下找到rild。也就是本文要這里最關鍵的地方,socket能不能通就看守護進程能不能很好的起來。上面SOCKET_NAME也就是這里定義的字元串(在ril.java和ril.cpp中就有一個字元串常量SOCKET_NAME_RIL,他的值就是 rild,和上面的對應)。 如果我們要自定義一個socket來進行通信,我們可以在init.rc的最後面加上

service myserver-daemon /system/bin/server
socket server stream 666
oneshot
system/bin/server就是我們編譯生成的伺服器程序,在裡面我們調用

s_fdListen = android_get_control_socket(「server」);
ret = listen(s_fdListen, n);
s_fdCommand = accept(s_fdListen, (sockaddr *) &peeraddr, &socklen);
就可以建立一個伺服器端程序。
java只需要使用最上面的代碼就可以和native通信了,注意SOCKET_NAME值必須上下統一和init.rc中的相等,此處為「rild」。這里的oneshot必須有,沒有的話,你的server很可能起不來。 剩下的是編譯了,先用mm編譯自己加的模塊,編譯好後,將添加的模塊考出,在源碼的根目錄下make snod。將編譯輸出文件加到system.img中。最後將system.img和randisk.img拷到sdk對應的平台中。即可。主要這兩個 img文件都要拷,system.img中有你的可執行程序,而randisk.img中有你的init.rc。userdata.img不確定。 此時只需要用java寫一個客戶端程序即可。

I. 如何編譯libcurl

1. Android
1.1配置
將curl源文件加到在Android源代碼external/curl/中。創建shell腳本configure.sh,並把它放到external/curl/中。
腳本內容如下:
#!/bin/sh SDK_ROOT=/home/nudtzxm/android_sdk export PATH="$SDK_ROOT/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin:$PATH" ./configure --host=arm-linux CC=arm-eabi-gcc \ CPPFLAGS="-I $SDK_ROOT/system/core/include -I $SDK_ROOT/hardware/libhardware/include -I $SDK_ROOT/hardware/libhardware_legacy/include -I $SDK_ROOT/hardware/ril/include -I $SDK_ROOT/dalvik/libnativehelper/include -I $SDK_ROOT/frameworks/base/include -I $SDK_ROOT/frameworks/base/opengl/include -I $SDK_ROOT/external/skia/include -I $SDK_ROOT/out/target/proct/generic/obj/include -I $SDK_ROOT/bionic/libc/arch-arm/include -I $SDK_ROOT/bionic/libc/include -I $SDK_ROOT/bionic/libstdc++/include -I $SDK_ROOT/bionic/libc/kernel/common -I $SDK_ROOT/bionic/libc/kernel/arch-arm -I $SDK_ROOT/bionic/libm/include -I $SDK_ROOT/bionic/libm/include/arch/arm -I $SDK_ROOT/bionic/libthread_db/include -I $SDK_ROOT/bionic/libc/kernel/common -I $SDK_ROOT/bionic/libc/kernel/arch-arm -I $SDK_ROOT/system/core/libcutils -I $SDK_ROOT/out/target/proct/generic/obj/STATIC_LIBRARIES/libcutils_intermediates -I $SDK_ROOT/out/target/proct/generic/obj/STATIC_LIBRARIES/libwebcore_intermediates -I $SDK_ROOT/system/core/include/arch/linux-arm/ -include $SDK_ROOT/system/core/include/arch/linux-arm/AndroidConfig.h" \ CFLAGS="-nostdlib -fno-exceptions -fpic -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -Wno-multichar -msoft-float -march=armv5te -mtune=xscale -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -mthumb-interwork -DANDROID -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -DSK_RELEASE -DNDEBUG -g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once -fgcse-after-reload -frerun-cse-after-loop -frename-registers -DNDEBUG -UDEBUG -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64" \ LIBS="-L$SDK_ROOT/out/target/proct/generic/obj/lib -L$SDK_ROOT/out/target/proct/generic/obj/STATIC_LIBRARIES/libcutils_intermediates/libcutils.a -lc -lm -ldl $SDK_ROOT/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/interwork/libgcc.a"
進入到curl的根目錄,運行這個腳本:
1.2 Make
進入curl的根目錄,運行make curl命令:
1.3 參數配置
您可能會看到參數配置是復雜的。如何設置呢?你應該閱讀curl/ Android.mk的注釋。
2 iOS
我改變了參數的配置,所以配置命令是:
./configure –disable-shared –host=arm-apple-darwin10
3.視窗
打開的vc6curl.dsw,並選擇「DLL Release」來編譯。您會在CURL_ROOT\lib\DLL-Release
發現libcurl.dll和libcurl_imp.lib。
4.關於頭文件
curl/include的頭文件,只在成功配置後使用,頭文件在不同的平台上是不同的。

J. android開發用libcurl多嗎

下面是移植步驟:
1. 下載curl源碼
我這里下載的是curl-7.22.0,源碼下載地址為:http://curl.haxx.se/download.html

2. 准備android源碼編譯環境,
android源碼應已全部編譯過,具體細節這里不詳述,我這里使用的是android2.2 froyo源碼樹。

3. 在android中編譯curl
在最新的curl源碼里其實已經帶有Android.mk這個編譯文件了,而且在這文件的開頭注釋部分比較詳細地介紹編譯方法。
1)拷貝curl源碼至android源碼樹下的external/curl

2)cd 到 external/curl目錄下,輸入(紅色字部分根據自己的環境做相應的更改):
ANDROID_HOME=/home/braincol/workspace/android/froyo && \
NDK_HOME=/home/braincol/workspace/android/froyo/ndk && \
PATH="$ANDROID_HOME/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin:$PATH" \
./configure --host=arm-linux CC=arm-eabi-gcc --with-random=/dev/urandom \
CPPFLAGS="-I$NDK_HOME/platforms/android-8/arch-arm/usr/include \
-I $ANDROID_HOME/external/curl/include/ \
-I $ANDROID_HOME/external/curl/3rd/include \
-I $ANDROID_HOME/external/curl \
-I $ANDROID_HOME/out/target/proct/generic/obj/STATIC_LIBRARIES/libcurl_intermediates \
-I $ANDROID_HOME/dalvik/libnativehelper/include/nativehelper \
-I $ANDROID_HOME/system/core/include \
-I $ANDROID_HOME/hardware/libhardware/include \
-I $ANDROID_HOME/hardware/libhardware_legacy/include \
-I $ANDROID_HOME/hardware/ril/include \
-I $ANDROID_HOME/dalvik/libnativehelper/include \
-I $ANDROID_HOME/frameworks/base/include \
-I $ANDROID_HOME/frameworks/base/opengl/include \
-I $ANDROID_HOME/frameworks/base/native/include \
-I $ANDROID_HOME/external/skia/include \
-I $ANDROID_HOME/out/target/proct/generic/obj/include \
-I $ANDROID_HOME/bionic/libc/arch-arm/include \
-I $ANDROID_HOME/bionic/libc/include \
-I $ANDROID_HOME/bionic/libstdc++/include \
-I $ANDROID_HOME/bionic/libc/kernel/common \
-I $ANDROID_HOME/bionic/libc/kernel/arch-arm \
-I $ANDROID_HOME/bionic/libm/include \
-I $ANDROID_HOME/bionic/libm/include/arch/arm \
-I $ANDROID_HOME/bionic/libthread_db/include \
-include $ANDROID_HOME/system/core/include/arch/linux-arm/AndroidConfig.h \
-I $ANDROID_HOME/system/core/include/arch/linux-arm/ \
-D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID -DNDEBUG -DNDEBUG -DHAVE_CONFIG_H" \
CFLAGS="-fno-exceptions -Wno-multichar -msoft-float -fpic -ffunction-sections \
-funwind-tables -fstack-protector -Wa,--noexecstack -Werror=format-security \
-fno-short-enums -march=armv5te -mtune=xscale -Wno-psabi -mthumb-interwork \
-fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith \
-Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point \
-g -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once \
-fgcse-after-reload -frerun-cse-after-loop -frename-registers -UDEBUG \
-mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 \
-Wpointer-arith -Wwrite-strings -Wunused -Winline -Wnested-externs \
-Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal \
-Wno-multichar -Wsign-compare -Wno-format-nonliteral -Wendif-labels \
-Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers" \
LIBS="-nostdlib -Bdynamic -Wl,-T,$ANDROID_HOME/build/core/armelf.x \
-Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections -Wl,-z,noreloc \
-L$ANDROID_HOME/out/target/proct/generic/obj/lib -Wl,-z,noexecstack \
-Wl,-rpath-link=$ANDROID_HOME/out/target/proct/generic/obj/lib \
-lc -llog -lcutils -lstdc++ \
-Wl,--no-undefined $ANDROID_HOME/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/lib/gcc/arm-eabi/4.4.0/libgcc.a \
$ANDROID_HOME/out/target/proct/generic/obj/lib/crtend_android.o \
-lm $ANDROID_HOME/out/target/proct/generic/obj/lib/crtbegin_dynamic.o \
-L$ANDROID_HOME/external/curl/3rd/libs"

如果$ANDROID_HOME目錄下沒有ndk的開發包,那麼到google的官網上下載一個放進去就行了。

3)cd 到源碼根目錄 mmm extern/libcurl:
編譯完成之後,會生成靜態庫:out/target/proct/generic/obj/STATIC_LIBRARIES/libcurl_intermediates/libcurl.a 。

4)如果要生成動態庫需要修改curl下的Android.mk :
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE:= libcurl
LOCAL_MODULE_TAGS := optional
# Copy the licence to a place where Android will find it.
# Actually, this doesn't quite work because the build system searches
# for NOTICE files before it gets to this point, so it will only be seen
# on subsequent builds.
ALL_PREBUILT += $(LOCAL_PATH)/NOTICE
$(LOCAL_PATH)/NOTICE: $(LOCAL_PATH)/COPYING | $(ACP)
$(-file-to-target)
#include $(BUILD_STATIC_LIBRARY)
include $(BUILD_SHARED_LIBRARY)

4. 在android中測試curl
1)在android froyo源碼樹中下建立一個mytest目錄,該目錄下再建立一個curltest目錄。

2)在目錄curtest下創建curl-test.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#include "curl/curl.h"
#include <stdio.h>;
int main() {
CURL *curl;
CURLcode res;

curl_global_init(CURL_GLOBAL_ALL);

curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "http://www.cnblogs.com/hibraincol/");
res = curl_easy_perform(curl);
if (0!=res) {
printf("curl error: %d\n", res);
}

curl_easy_cleanup(curl);
}

curl_global_cleanup();
return 0;
}

3)在目錄curtest下創建Android.mk:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

# curl test executable
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/3rd/include

LOCAL_SRC_FILES:= curl-test.cpp

# No shared libraries.
LOCAL_SHARED_LIBRARIES :=

# No static libraries.
LOCAL_STATIC_LIBRARIES := libcurl

LOCAL_MODULE := curl-test
include $(BUILD_EXECUTABLE)

4)把libcurl的頭文件拷貝到curtest目錄下的3rd/include目錄下:
cp -rf out/target/proct/generic/obj/include/libcurl/curl mytest/curltest/3rd/include

5)到android源碼樹的根目錄下:mmm /mytest/curltest/
braincol@ubuntu:~/workspace/android/froyo$ mmm mytest/curltest/
============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=2.2
TARGET_PRODUCT=generic
TARGET_BUILD_VARIANT=eng
TARGET_SIMULATOR=
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
HOST_ARCH=x86
HOST_OS=linux
HOST_BUILD_TYPE=release
BUILD_ID=MASTER
============================================
make: Entering directory `/home/braincol/workspace/android/froyo'
target thumb C++: curl-test <= mytest/curltest/curl-test.cpp
mytest/curltest/curl-test.cpp:2:19: warning: extra tokens at end of #include directive
target Executable: curl-test (out/target/proct/generic/obj/EXECUTABLES/curl-test_intermediates/LINKED/curl-test)
target Non-prelinked: curl-test (out/target/proct/generic/symbols/system/bin/curl-test)
target Strip: curl-test (out/target/proct/generic/obj/EXECUTABLES/curl-test_intermediates/curl-test)
Install: out/target/proct/generic/system/bin/curl-test
make: Leaving directory `/home/braincol/workspace/android/froyo'

可以看到在out/target/proct/generic/system/bin/下生成了curl-test這個測試程序。

6)將curl-test拷貝到真機或者模擬器中運行。
a.我這里是在android真機的根目錄下建立了一個test目錄.
b.然後通過adb push將curl-test拷貝到該目錄下,並更改curl-test為可執行許可權:chmod 777 curl-test.
c. adb shell 進入shell控制台,然後cd到test目錄下, ./curl-test 執行,可以看到列印出的網頁源碼,移植成功。

這樣在之後的android app開發中,如果需要用到libcurl的庫,就可以直接out/target/proct/generic/obj/include/libcurl/curl里的頭文件和out/target/proct/generic/obj/STATIC_LIBRARIES/libcurl_intermediates/libcurl.a拿到app工程中去用就行了。

閱讀全文

與ril編譯環境相關的資料

熱點內容
加密機操作手冊 瀏覽:860
dos命令自動關閉 瀏覽:328
心田花開app在哪裡評價 瀏覽:449
求索記錄頻道哪個app可以看 瀏覽:730
金梅瓶pdf下載 瀏覽:985
機器軟體用什麼編程 瀏覽:843
java虛擬機指令 瀏覽:671
shell編程入門書籍 瀏覽:946
大連桶裝水溯源碼售價 瀏覽:302
php怎麼跳轉到電腦 瀏覽:414
如何在電腦上創建新網路連接伺服器 瀏覽:61
c語言編譯之後如何運行 瀏覽:569
mfc多線程編程視頻 瀏覽:411
c編譯的中文怎麼寫 瀏覽:92
單片機連接蜂鳴器電路 瀏覽:845
程序員買房前後對比照 瀏覽:1006
cmdjava中文亂碼 瀏覽:949
窗口app哪個好 瀏覽:732
xzforandroid 瀏覽:580
程序員那麼可愛歌曲完整版 瀏覽:926