當前位置:編程學習大全網 - 源碼下載 - Yar源代碼分析

Yar源代碼分析

具體問題不指定,具體問題下面不指定。以下供大家參考。

1和32位系統下的編譯

如果需要在32位系統中編譯android系統,需要在編譯前修改壹些makefile。

首先修改build/core/main.mk,修改的內容如下:

-ifneq (64,$(findstring 64,$(build_arch)))

+ifneq

(i686,$(findstring i686,$(build_arch)))

$(警告

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)$(警告您正試圖在32位系統上構建。)

$(警告froyo/2.2之後只支持64位構建環境。)

其次,修改以下四個文檔:

外部/clearsilver/cgi/Android.mk

外部/clear silver/Java-JNI/Android . MK

外部/clearsilver/util/Android.mk

external/clear silver/cs/Android . MK #這將強制Java6使用64位版本

-LOCAL_CFLAGS += -m64

-LOCAL_LDFLAGS += -m64

+LOCAL_CFLAGS += -m32

+LOCAL_LDFLAGS += -m32也就是說,LOCAL_CFLAGS和LOCAL_LDFLAGS從-m64更改為-m32,從而指定使用32位系統進行編譯。如果您使用64位操作系統進行編譯,您不需要修改它們,但是請記住安裝它們:對於64位服務器,可能需要以下額外的軟件包:

" sudo apt-get install libc 6-dev-i386 "(如果是AMD CPU,則為libc6-dev-amd64)

" sudo apt-get install g++-multi lib lib 32 ncurses 5-dev lib 32 z 1-dev "

還有jdk64bit版本編譯2,build/core/base _ rules . MK:128:* * FrameWorks/opt/表情符號/JNI:

...libgl2jni已經由fram works/base/OpenGL/tests/gl2 _ JNI/JNI stop定義。

從編譯規則來看:

#確保此IS_HOST/CLASS/MODULE組合是唯壹的。

模塊標識:=模塊。$(如果\

$(LOCAL_IS_HOST_MODULE),HOST,TARGET)。$(LOCAL_MODULE_CLASS)。$(本地模塊)

ifdef $(模塊標識)

$(錯誤$(LOCAL_PATH): $(module_id)已經由$($(module_id))定義

endif

在fram works/base/OpenGL/tests/gl2 _ JNI/defines下定義的Android.mk:

LOCAL_MODULE := libgl2jni

包含$(BUILD_SHARED_LIBRARY)

復制生成的動態庫是錯誤的。您可以在不參與編譯的情況下修改測試目錄。最直接的方法就是刪除fram works/base/OpenGL/tests/gl2 _ JNI的文件夾。

3.為什麽AIDL編譯和報告找不到類的導入

“AIDL服務只支持有限數量的數據類型,所以如果妳使用AIDL服務來傳輸壹些復雜的數據,妳需要做進壹步的處理。AIDL服務支持以下數據類型:

Java的簡單類(int,char,boolean等。).不需要導入。字符串和字符序列。不需要導入。

列表和地圖。但是,請註意,列表和地圖對象的元素類型必須是AIDL服務支持的數據類型。不需要導入。AIDL自動生成界面。需要導入。

實現android.os.Parcelable接口的類。需要導入。

後兩種數據類型需要通過import導入,不需要導入的數據類型的值也以同樣的方式傳遞。傳遞需要導入的數據類型的值(例如,實現android.os.Parcelable接口的類)稍微復雜壹些。除了建立壹個實現android.os.parcelable接口的類之外,還需要為這個類單獨建立壹個aidl文件,使用parcelable關鍵字定義。"

LOCAL_AIDL_INCLUDES += xxx沒有添加,所以找不到我的可打包AIDL文件。

修改android源代碼根目錄下的build/core/pathmap.mk,添加妳的目錄,然後做update-api。

4.始終提示@Override錯誤方法不重寫其父類的方法。

用JDK1.6編譯沒問題。如果用JDK1.5編譯,會報告@Override方法沒有覆蓋其父類的方法。實際上,這個方法是類實現的接口中的壹個方法。

但是下面這個方法的jdk1.6是可以通過的,也就是說jdk1.6認為父類方法和實現接口方法都調用override,而jdk1.5沒有。

我也這麽認為不知道這是jdk1.5的bug,還是我認為覆蓋父類的方法和實現接口的方法不壹樣。但是從

從OO的角度來看,無論是覆蓋父類的方法還是實現接口的方法,都可以認為是override,因為它們的目的都是壹樣的,都是為了重用,都是多態的。

表情。

把jdk版本改成1.6就行了。

5.編譯alsa-lib庫時出錯

在將alsa-lib庫移植到android系統開發的編譯過程中出現了以下錯誤。

/tmp/cckyaR40.s:匯編程序消息:

/tmp/cckyaR40.s:2763:錯誤:選定的處理器不支持“mrs ip,cpsr”

/tmp/cckyaR40.s:2764:錯誤:需要未移位的寄存器-' orr R2,ip,#128 '

/tmp/cckyaR40.s:2765:錯誤:選定的處理器不支持“msr cpsr_c,r2

字面意思是組裝錯誤。所選處理器不支持mrs和msr指令。

原來的ARM指令有32位和16位兩種指令模式,16位是thumb指令集,所以thumb指令集編譯的代碼占用空間很小。

而且效率也高,所以安卓的arm編譯器默認以thumb模式編譯。問題是alsa代碼中有壹些內容。

使用32位指令,所以會報錯如下,修改的方法也很簡單。只需在Android.mk中添加以下內容:

本地_ ARM _模式:= arm

在android的編譯系統中,LOCAL_arm_MODE變量的值為ARM或thumb,分別代表32位和16位ARM指令集,默認值為thumb。

預構建/Linux-x86/tool chain/arm-eabi-4 . 4 . 0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld:無法設置動態節大小:錯誤的值

集合2: ld返回1退出狀態

make:*[out/target/product/merlin/obj/shared _ libraries/liba sound _ intermediates/linked/liba sound . so]錯誤1。

要解決此問題,只需從alsa-lib/include/config.h文件中刪除以下宏定義:

#定義版本_符號

開發過程中遇到了很多錯誤,然後我壹壹總結記錄,有些忘記了。。

在android.mk中編譯:

包括美元(VARS結算)

$(調用add-pre build-files,STATIC_LIBRARIES,libyfcdca.a)

出現提示時,需要定義:LOCAL_MODULE_TAGS :=可選。壹般的修改方法是:

build\core\definitions.mk中的宏定義變量:

定義包含-預構建

包括$$(CLEAR_VARS)

LOCAL_SRC_FILES := $(1)

LOCAL _ build _ MODULE _ STEM:= $(1)

LOCAL_MODULE_SUFFIX := $$(後綴$(1))

LOCAL _ MODULE:= $ $(basename $(1))

LOCAL_MODULE_CLASS := $(2)

包含$ $(BUILD _ pre BUILD)

endef

在這裏添加壹個local _ module _ tags可選。

但這需要修改android源代碼。如果不是自己的安卓系統,那就麻煩了,壹定要想別的辦法解決:

#包含美元(CLEAR_VARS)

#$(調用add-pre build-files,STATIC_LIBRARIES,libyfcdca.a)

包括美元(VARS結算)

LOCAL_SRC_FILES := libyfcdca.a

LOCAL _ build _ MODULE _ STEM:= libyfcdca . a

本地模塊後綴:= lib

LOCAL_MODULE := yfcdca

本地模塊類:=靜態庫

本地模塊標簽:=可選

包含$(BUILD _ pre BUILD)

僅此而已。供您參考

1和32位系統下的編譯

如果需要在32位系統中編譯android系統,需要在編譯前修改壹些makefile。

首先修改build/core/main.mk,修改的內容如下:

-ifneq (64,$(findstring 64,$(build_arch)))

+ifneq

(i686,$(findstring i686,$(build_arch)))

$(警告

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)$(警告您正試圖在32位系統上構建。)

$(警告froyo/2.2之後只支持64位構建環境。)

其次,修改以下四個文檔:

外部/clearsilver/cgi/Android.mk

外部/clear silver/Java-JNI/Android . MK

外部/clearsilver/util/Android.mk

external/clear silver/cs/Android . MK #這將強制Java6使用64位版本

-LOCAL_CFLAGS += -m64

-LOCAL_LDFLAGS += -m64

+LOCAL_CFLAGS += -m32

+LOCAL_LDFLAGS += -m32也就是說,LOCAL_CFLAGS和LOCAL_LDFLAGS從-m64更改為-m32,從而指定使用32位系統進行編譯。如果您使用64位操作系統進行編譯,您不需要修改它們,但是請記住安裝它們:對於64位服務器,可能需要以下額外的軟件包:

" sudo apt-get install libc 6-dev-i386 "(如果是AMD CPU,則為libc6-dev-amd64)

" sudo apt-get install g++-multi lib lib 32 ncurses 5-dev lib 32 z 1-dev "

還有jdk64bit版本編譯2,build/core/base _ rules . MK:128:* * FrameWorks/opt/表情符號/JNI:

...libgl2jni已經由fram works/base/OpenGL/tests/gl2 _ JNI/JNI stop定義。

從編譯規則來看:

#確保此IS_HOST/CLASS/MODULE組合是唯壹的。

模塊標識:=模塊。$(如果\

$(LOCAL_IS_HOST_MODULE),HOST,TARGET)。$(LOCAL_MODULE_CLASS)。$(本地模塊)

ifdef $(模塊標識)

$(錯誤$(LOCAL_PATH): $(module_id)已經由$($(module_id))定義

endif

在fram works/base/OpenGL/tests/gl2 _ JNI/defines下定義的Android.mk:

LOCAL_MODULE := libgl2jni

包含$(BUILD_SHARED_LIBRARY)

復制生成的動態庫是錯誤的。您可以在不參與編譯的情況下修改測試目錄。最直接的方法就是刪除fram works/base/OpenGL/tests/gl2 _ JNI的文件夾。

3.為什麽AIDL編譯和報告找不到類的導入

“AIDL服務只支持有限數量的數據類型,所以如果妳使用AIDL服務來傳輸壹些復雜的數據,妳需要做進壹步的處理。AIDL服務支持以下數據類型:

Java的簡單類(int,char,boolean等。).不需要導入。字符串和字符序列。不需要導入。

列表和地圖。但是,請註意,列表和地圖對象的元素類型必須是AIDL服務支持的數據類型。不需要導入。AIDL自動生成界面。需要導入。

實現android.os.Parcelable接口的類。需要導入。

後兩種數據類型需要通過import導入,不需要導入的數據類型的值也以同樣的方式傳遞。傳遞需要導入的數據類型的值(例如,實現android.os.Parcelable接口的類)稍微復雜壹些。除了建立壹個實現android.os.parcelable接口的類,還需要為這個類單獨建立壹個aidl文件,使用parcelable關鍵字定義。"

LOCAL_AIDL_INCLUDES += xxx沒有添加,所以找不到我的可打包AIDL文件。

修改android源代碼根目錄下的build/core/pathmap.mk,添加妳的目錄,然後做update-api。

4.始終提示@Override錯誤方法不重寫其父類的方法。

用JDK1.6編譯沒問題。如果用JDK1.5編譯,會報告@Override方法沒有覆蓋其父類的方法。實際上,這個方法是類實現的接口中的壹個方法。

但是這個語言方法jdk1.6的以下是可以通過的,也就是說jdk1.6認為父類方法和實現接口方法都調用override,而jdk1.5沒有。

我也這麽認為不知道這是jdk1.5的bug,還是我認為覆蓋父類的方法和實現接口的方法不壹樣。但是從

OO的觀點,無論是重載父類的方法,還是實現接口的方法,都可以認為是重載,因為它們的目的都是壹樣的,都是為了重用,都是多態的。

表情。

把jdk版本改成1.6就行了。

5.編譯alsa-lib庫時出錯

在將alsa-lib庫移植到android系統開發的編譯過程中出現了以下錯誤。

/tmp/cckyaR40.s:匯編程序消息:

/tmp/cckyaR40.s:2763:錯誤:選定的處理器不支持“mrs ip,cpsr”

/tmp/cckyaR40.s:2764:錯誤:需要未移位的寄存器-' orr R2,ip,#128 '

/tmp/cckyaR40.s:2765:錯誤:選定的處理器不支持“msr cpsr_c,r2

字面意思是組裝錯誤。所選處理器不支持mrs和msr指令。

原來的ARM指令有32位和16位兩種指令模式,16位是thumb指令集,所以thumb指令集編譯的代碼占用空間很小。

而且效率也高,所以安卓的arm編譯器默認以thumb模式編譯。問題是alsa代碼中有壹些內容。

使用32位指令,所以會報錯如下,修改的方法也很簡單。只需在Android.mk中添加以下內容:

本地_ ARM _模式:= arm

在android的編譯系統中,LOCAL_arm_MODE變量的值為ARM或thumb,分別代表32位和16位ARM指令集,默認值為thumb。

預構建/Linux-x86/tool chain/arm-eabi-4 . 4 . 0/bin/../lib/gcc/arm-eabi/4.4.0/../../../../arm-eabi/bin/ld:無法設置動態節大小:錯誤的值

集合2: ld返回1退出狀態

make:*[out/target/product/merlin/obj/shared _ libraries/liba sound _ intermediates/linked/liba sound . so]錯誤1。

要解決此問題,只需從alsa-lib/include/config.h文件中刪除以下宏定義:

#定義版本_符號

開發過程中遇到了很多錯誤,然後我壹壹總結記錄,有些忘記了。。

在android.mk中編譯:

包括美元(VARS結算)

$(調用add-pre build-files,STATIC_LIBRARIES,libyfcdca.a)

出現提示時,需要定義:LOCAL_MODULE_TAGS :=可選。壹般的修改方法是:

build\core\definitions.mk中的宏定義變量:

定義包含-預構建

包括$$(CLEAR_VARS)

LOCAL_SRC_FILES := $(1)

LOCAL _ build _ MODULE _ STEM:= $(1)

LOCAL_MODULE_SUFFIX := $$(後綴$(1))

LOCAL _ MODULE:= $ $(basename $(1))

LOCAL_MODULE_CLASS := $(2)

包含$ $(BUILD _ pre BUILD)

endef

在這裏添加壹個local _ module _ tags可選。

但這需要修改android源代碼。如果不是自己的安卓系統,那就麻煩了,壹定要想別的辦法解決:

#包含美元(CLEAR_VARS)

#$(調用add-pre build-files,STATIC_LIBRARIES,libyfcdca.a)

包括美元(VARS結算)

LOCAL_SRC_FILES := libyfcdca.a

LOCAL _ build _ MODULE _ STEM:= libyfcdca . a

本地模塊後綴:= lib

LOCAL_MODULE := yfcdca

本地模塊類:=靜態庫

本地模塊標簽:=可選

包含$(BUILD _ pre BUILD)

僅此而已。

  • 上一篇:如何在linux內核中讀寫文件
  • 下一篇:買新房,中介說買過之後還能返壹部分錢給我,靠譜嗎
  • copyright 2024編程學習大全網