锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏍規嵁eoeandroid涓婄殑鐨勮繛杞斤紝榪涜涓浜涙洿鏂般佷慨鏀瑰拰鍔犱寒銆?/span>
浠婂ぉ緲昏瘧ANDROID-MK.TXT鏂囦歡錛堣嫳鏂囧師鏂囦歡鍦?/span>/development/Ndk/Docs/android-mk.txt錛?/span>
Android.mk鏂囦歡璇硶瑙勮寖
Introduction:
Android.mk緙栬瘧鏂囦歡鏄敤鏉ュ悜Android NDK鎻忚堪浣犵殑C,C++婧愪唬鐮佹枃浠剁殑錛?/span> 榪欑瘒鏂囨。鎻忚堪浜嗗畠鐨勮娉曘傚湪闃呰涓嬮潰鐨勫唴瀹逛箣鍓嶏紝鍋囧畾浣犲凡緇忛槄璇諱簡docs/OVERVIEW.TXT鏂囦歡錛屼簡瑙d簡瀹冧滑鐨勮剼鑹插拰鐢ㄩ斻?/span>
姒傝堪:
涓涓?/span>Android.mk file鐢ㄦ潵鍚戠紪璇戠郴緇熸弿榪頒綘鐨勬簮浠g爜銆傚叿浣撴潵璇達細-璇ユ枃浠舵槸GNU Makefile鐨勪竴灝忛儴鍒嗭紝浼氳緙栬瘧緋葷粺瑙f瀽涓嬈℃垨鏇村嬈$殑build緋葷粺銆傚洜姝わ紝鎮ㄥ簲灝介噺鍑忓皯鎮ㄥ0鏄庣殑鍙橀噺錛屼笉瑕佽涓烘煇浜涘彉閲忓湪瑙f瀽榪囩▼涓笉浼氳瀹氫箟銆?/span>-榪欎釜鏂囦歡鐨勮娉曞厑璁告妸浣犵殑婧愪唬鐮佺粍緇囨垚妯″潡錛屼竴涓ā鍧楀睘涓嬪垪綾誨瀷涔嬩竴錛?/span>
闈欐佸簱
鍏變韓搴?/span>
鍙湁鍏變韓搴撳皢琚畨瑁?/span>/澶嶅埗鍒版偍鐨勫簲鐢ㄨ蔣浠跺寘銆傝櫧鐒墮潤鎬佸簱鑳借鐢ㄤ簬鐢熸垚鍏變韓搴撱?/span>
浣犲彲浠ュ湪姣忎竴涓?/span>Android.mk file涓畾涔変竴涓垨澶氫釜妯″潡錛屼綘涔熷彲浠ュ湪鍑犱釜妯″潡涓嬌鐢ㄥ悓涓涓簮浠g爜鏂囦歡銆?/span>
/*****************************************************************************/
-緙栬瘧緋葷粺涓轟綘澶勭悊璁稿緇嗚妭闂銆備緥濡傦紝浣犱笉闇瑕佸湪浣犵殑Android.mk涓垪鍑哄ご鏂囦歡鍜屼緷璧栨枃浠躲?/span>NDK緙栬瘧緋葷粺灝嗕細涓轟綘鑷姩澶勭悊榪欎簺闂銆傝繖涔熸剰鍛崇潃錛屽湪鍗囩駭NDK鍚庯紝浣犲簲璇ュ緱鍒版柊鐨?/span>toolchain/platform鏀寔錛岃屼笖涓嶉渶瑕佹敼鍙樹綘鐨?/span>Android.mk鏂囦歡銆?/span>
娉ㄦ剰錛岃繖涓娉曞悓鍏紑鍙戝竷鐨?/span>Android騫沖彴鐨勫紑婧愪唬鐮佸緢鎺ヨ繎錛岀劧鑰岀紪璇戠郴緇熷疄鐜頒粬浠殑鏂瑰紡鍗存槸涓嶅悓鐨勶紝榪欐槸鏁呮剰榪欐牱璁捐鐨勶紝鍙互璁╃▼搴忓紑鍙戜漢鍛橀噸鐢ㄥ閮ㄥ簱鐨勬簮浠g爜鏇村鏄撱?/span>
綆鍗曠殑渚嬪瓙:
---------------
鍦ㄦ弿榪拌娉曠粏鑺備箣鍓嶏紝鍜變滑鏉ョ湅涓涓畝鍗曠殑"hello world"鐨勪緥瀛愶紝姣斿錛屼笅闈㈢殑鏂囦歡錛?/span>
sources/helloworld/helloworld.c
sources/helloworld/Android.mk
'helloworld.c'鏄竴涓?/span>JNI鍏變韓搴擄紝瀹炵幇榪斿洖"hello world"瀛楃涓茬殑鍘熺敓鏂規硶銆?/span>
鐩稿簲鐨?/span>Android.mk鏂囦歡浼氳薄涓嬮潰榪欐牱錛?/span>
---------- cut here ------------------
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= helloworld
LOCAL_SRC_FILES := helloworld.c
include $(BUILD_SHARED_LIBRARY)
---------- cut here ------------------
濂斤紝鎴戜滑鏉ヨВ閲婁竴涓嬭繖鍑犺浠g爜錛?/span>
LOCAL_PATH := $(call my-dir)
涓涓?/span>Android.mk file棣栧厛蹇呴』瀹氫箟濂?/span>LOCAL_PATH鍙橀噺銆傚畠鐢ㄤ簬鍦ㄥ紑鍙戞爲涓煡鎵炬簮鏂囦歡銆?span style="color: blue;">鍦ㄨ繖涓緥瀛愪腑錛屽畯鍑芥暟’my-dir’, 鐢辯紪璇戠郴緇熸彁渚涳紝鐢ㄤ簬榪斿洖褰撳墠璺緞錛堝嵆鍖呭惈Android.mk file鏂囦歡鐨勭洰褰曪級銆?/span>
include $( CLEAR_VARS)
CLEAR_VARS鐢辯紪璇戠郴緇熸彁渚涳紝鎸囧畾璁?/span>GNU MAKEFILE涓轟綘娓呴櫎璁稿LOCAL_XXX鍙橀噺錛堜緥濡?/span> LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 絳夌瓑...),
闄?/span>LOCAL_PATH 銆傝繖鏄繀瑕佺殑錛屽洜涓烘墍鏈夌殑緙栬瘧鎺у埗鏂囦歡閮藉湪鍚屼竴涓?/span>GNU MAKE鎵ц鐜涓紝鎵鏈夌殑鍙橀噺閮芥槸鍏ㄥ眬鐨勩?/span>
LOCAL_MODULE := helloworld
LOCAL_MODULE鍙橀噺蹇呴』瀹氫箟錛屼互鏍囪瘑浣犲湪Android.mk鏂囦歡涓弿榪扮殑姣忎釜妯″潡銆傚悕縐板繀欏繪槸鍞竴鐨勶紝鑰屼笖涓嶅寘鍚換浣曠┖鏍箋傛敞鎰忕紪璇戠郴緇熶細鑷姩浜х敓鍚堥傜殑鍓嶇紑鍜屽悗緙錛屾崲鍙ヨ瘽璇達紝涓涓鍛藉悕涓?/span>'foo'鐨勫叡浜簱妯″潡錛屽皢浼氱敓鎴?/span>'libfoo.so'鏂囦歡銆?/span>
閲嶈娉ㄦ剰浜嬮」
濡傛灉浣犳妸搴撳懡鍚嶄負‘libhelloworld’錛岀紪璇戠郴緇熷皢涓嶄細娣誨姞浠諱綍鐨?/span>lib鍓嶇紑錛屼篃浼氱敓鎴?/span>libhelloworld.so錛岃繖鏄負浜嗘敮鎸佹潵婧愪簬Android騫沖彴鐨勬簮浠g爜鐨?/span>Android.mk鏂囦歡錛屽鏋滀綘紜疄闇瑕佽繖涔堝仛鐨勮瘽銆?/span>
LOCAL_SRC_FILES := helloworld.c
LOCAL_SRC_FILES鍙橀噺蹇呴』鍖呭惈灝嗚緙栬瘧鎵撳寘榪涙ā鍧椾腑鐨?/span>C鎴?/span>C++婧愪唬鐮佹枃浠躲傛敞鎰忥紝浣犱笉鐢ㄥ湪榪欓噷鍒楀嚭澶存枃浠跺拰鍖呭惈鏂囦歡錛屽洜涓虹紪璇戠郴緇熷皢浼氳嚜鍔ㄤ負浣犳壘鍑轟緷璧栧瀷鐨勬枃浠訛紱浠呬粎鍒楀嚭鐩存帴浼犻掔粰緙栬瘧鍣ㄧ殑婧愪唬鐮佹枃浠跺氨濂姐傘愭敞鎰忥紝榛樿鐨?/span>C++婧愮爜鏂囦歡鐨勬墿灞曞悕鏄?#8217;.cpp’. 鎸囧畾涓涓笉鍚岀殑鎵╁睍鍚嶄篃鏄彲鑳界殑錛屽彧瑕佸畾涔?/span>LOCAL_DEFAULT_CPP_EXTENSION鍙橀噺錛屼笉瑕佸繕璁板紑濮嬬殑灝忓渾鐐癸紙涔熷氨鏄畾涔変負‘.cxx’,鑰屼笉鏄?#8216;cxx’錛夛紙褰撶劧榪欎竴姝ユ垜浠竴鑸笉浼氬幓鏀瑰畠錛夈?/span>
include $(BUILD_SHARED_LIBRARY)
BUILD_SHARED_LIBRARY鏄紪璇戠郴緇熸彁渚涚殑鍙橀噺錛屾寚鍚戜竴涓?/span>GNU Makefile鑴氭湰錛堝簲璇ュ氨鏄湪build/core鐩綍涓嬬殑shared_library.mk錛夛紝璐熻矗鏀墮泦鑷粠涓婃璋冪敤'include $(CLEAR_VARS)'浠ユ潵錛屽畾涔夊湪LOCAL_XXX鍙橀噺涓殑鎵鏈変俊鎭紝騫朵笖鍐沖畾緙栬瘧浠涔堬紝濡備綍姝g‘鍦板幓鍋氥傚茍鏍規嵁鍏惰鍒欑敓鎴愰潤鎬佸簱銆傚悓鐞嗗浜庨潤鎬佸簱銆?/span>
/****************************************************************************/
鍦?/span>sources/samples鐩綍涓嬫湁鏇村鏉備竴鐐圭殑渚嬪瓙錛屽啓鏈夋敞閲婄殑Android.mk鏂囦歡錛屼綘鍙互鐪嬬湅銆?/span>
鍙傝?/span>:
榪欐槸涓浠戒綘搴旇鍦?/span>Android.mk涓緷璧栨垨瀹氫箟鐨勫彉閲忓垪琛紝鎮ㄥ彲浠ュ畾涔夊叾浠栧彉閲忎負鑷繁浣跨敤錛?/span>
浣嗘槸NDK緙栬瘧緋葷粺淇濈暀涓嬪垪鍙橀噺鍚嶏細
-浠?/span>LOCAL_寮澶寸殑鍚嶅瓧錛堜緥濡?/span> LOCAL_MODULE錛?/span>
-浠?/span>PRIVATE_, NDK_ or APP_寮澶寸殑鍚嶅瓧錛堝唴閮ㄤ嬌鐢級
-灝忓啓鍚嶅瓧錛堝唴閮ㄤ嬌鐢紝渚嬪’my-dir’錛?/span>
濡傛灉鎮ㄤ負浜嗘柟渚垮湪Android.mk涓畾涔夎嚜宸辯殑鍙橀噺錛屾垜浠緩璁嬌鐢?/span>MY_鍓嶇紑錛屼竴涓皬渚嬪瓙錛?/span>
---------- cut here ------------------
MY_SOURCES := foo.c
ifneq ($(MY_CONFIG_BAR),)
MY_SOURCES += bar.c
endif
LOCAL_SRC_FILES += $(MY_SOURCES)
---------- cut here ------------------
- - - - - - - - - - -
榪欎簺GNU Make 鍙橀噺鍦ㄤ綘鐨?/span>Android.mk鏂囦歡瑙f瀽涔嬪墠錛屽氨鐢辯紪璇戠郴緇熷畾涔夊ソ浜嗐?/span>
娉ㄦ剰鍦ㄦ煇浜涙儏鍐典笅錛?/span>NDK鍙兘鍒嗘瀽Android.mk鍑犳錛屾瘡涓嬈℃煇浜涘彉閲忕殑瀹氫箟浼氭湁涓嶅悓銆?/span>
CLEAR_VARS
鎸囧悜涓涓紪璇戣剼鏈紝鍑犱箮鎵鏈夋湭瀹氫箟鐨?/span>LOCAL_XXX鍙橀噺閮藉湪"Module-description"鑺備腑鍒楀嚭銆?/span>
浣犲繀欏誨湪寮濮嬩竴涓柊妯″潡涔嬪墠鍖呭惈榪欎釜鑴氭湰銆?/span>include $(CLEAR_VARS)
BUILD_SHARED_LIBRARY
鎸囧悜緙栬瘧鑴氭湰錛屾敹闆嗘墍鏈夌殑浣犲湪LOCAL_XXX鍙橀噺涓彁渚涚殑淇℃伅錛屽茍涓斿喅瀹氬浣曟妸浣犲垪鍑虹殑婧愪唬鐮佹枃浠剁紪璇戞垚涓涓叡浜簱銆傛敞鎰忥紝浣犲繀欏昏嚦灝戝湪鍖呭惈榪欎釜鏂囦歡涔嬪墠瀹氫箟LOCAL_MODULE鍜?/span>LOCAL_SRC_FILES錛屼嬌鐢ㄤ緥瀛愶細
include $(BUILD_SHARED_LIBRARY)
娉ㄦ剰榪欏皢鐢熸垚涓涓悕涓?/span>lib$(LOCAL_MODULE).so鐨勬枃浠躲?/span>
BUILD_STATIC_LIBRARY
涓涓?/span>BUILD_SHARED_LIBRARY鍙橀噺鐢ㄤ簬緙栬瘧涓涓潤鎬佸簱銆傞潤鎬佸簱涓嶄細澶嶅埗鍒頒綘鐨?/span>project/packages涓紝璇炵敓鑳藉鐢ㄤ簬緙栬瘧鍏變韓搴擄紝錛堢湅涓嬮潰鎻忚堪鐨?/span>LOCAL_STATIC_LIBRARIES and LOCAL_STATIC_WHOLE_LIBRARIES錛?/span>
浣跨敤渚嬪瓙錛?/span>
include $(BUILD_STATIC_LIBRARY)
娉ㄦ剰錛岃繖灝嗕細鐢熸垚涓涓悕涓?/span>lib$(LOCAL_MODULE).a鐨勬枃浠躲?/span>
TARGET_ARCH
鐩爣CPU騫沖彴鐨勫悕瀛楋紝濡傚悓鍦?/span>android寮鏀炬簮鐮佷腑鎸囧畾鐨勯偅鏍楓傚鏋滄槸’arm’錛岃〃紺鴻鐢熸垚ARM鍏煎鐨勬寚浠わ紝涓?/span>CPU鏋舵瀯鐨勪慨璁㈢増鏃犲叧銆?/span>
TARGET_PLATFORM
Android.mk瑙f瀽鐨勬椂鍊欙紝鐩爣Android騫沖彴鐨勫悕瀛?/span>.璇︽儏鍙弬鑰?/span>/development/ndk/docs/stable-apis.txt.
android-3 -> Official Android 1.5 system images
android-4 -> Official Android 1.6 system images
android-5 -> Official Android 2.0 system images
TARGET_ARCH_ABI
鏆傛椂鍙敮鎸佷袱涓?/span>value錛?/span>armeabi鍜?/span>armeabi-v7a銆傚湪鐜板湪鐨勭増鏈腑涓鑸妸榪欎袱涓肩畝鍗曠殑瀹氫箟涓?/span>arm錛岄氳繃android 騫沖彴鍐呴儴瀵瑰畠閲嶅畾涔夋潵鑾峰緱鏇村ソ鐨勫尮閰嶃?/span>
鍏朵粬鐨勶肌錛緝灝嗗湪浠ュ悗鐨勶籍錛わ極鐗堟湰涓粙緇嶏紝瀹冧滑浼氭湁涓嶅悓鐨勫悕瀛椼傛敞鎰忔墍鏈夊熀浜庯肌錛詫輯鐨勶肌錛緝閮戒細鎶?/span>'TARGET_ARCH'瀹氫箟鎴?#8216;锝侊綊锝?#8217;錛屼絾鏄細鏈変笉鍚岀殑‘TARGET_ARCH_ABI’
TARGET_ABI
銆銆鐩爣騫沖彴鍜?/span>ABI鐨勭粍鍚堬紝瀹冧簨瀹炰笂琚畾涔夋垚$(TARGET_PLATFORM)-$(TARGET_ARCH_ABI) 鍦ㄤ綘鎯寵鍦ㄧ湡瀹炵殑璁懼涓拡瀵逛竴涓壒鍒殑鐩爣緋葷粺榪涜嫻嬭瘯鏃訛紝浼氭湁鐢ㄣ傚湪榛樿鐨勬儏鍐典笅錛屽畠浼氭槸'android-3-arm'銆?/span>
/*****************************************************************************/
涓嬮潰鏄?/span>GNU Make銆‘鍔熻兘’瀹忥紝蹇呴』閫氳繃浣跨敤'$(call <function>)'鏉ユ眰鍊?/span>錛屼粬浠繑鍥炴枃鏈寲鐨勪俊鎭?/span>
my-dir
榪斿洖褰撳墠Android.mk鎵鍦ㄧ殑鐩綍璺緞錛岀浉瀵逛簬錛激錛紪璇戠郴緇熺殑欏跺眰銆傝繖鏄湁鐢ㄧ殑錛屽湪Android.mk鏂囦歡鐨勫紑澶村姝ゅ畾涔夛細
LOCAL_PATH := $(call my-dir)
all-subdir-makefiles
銆銆銆榪斿洖涓涓綅浜庡綋鍓?/span>'my-dir'璺緞鐨勫瓙鐩綍鍒楄〃銆備緥濡傦紝鐪嬩笅闈㈢殑鐩綍灞傛錛?/span>
sources/foo/Android.mk
sources/foo/lib1/Android.mk
sources/foo/lib2/Android.mk
濡傛灉sources/foo/Android.mk鍖呭惈涓琛?/span>錛?/span>
include $(call all-subdir-makefiles)
閭d箞瀹冨氨浼氳嚜鍔ㄥ寘鍚?/span>sources/foo/lib1/Android.mk 鍜?/span>sources/foo/lib2/Android.mk
榪欓」鍔熻兘鐢ㄤ簬鍚戠紪璇戠郴緇熸彁渚涙繁灞傛宓屽鐨勪唬鐮佺洰褰曞眰嬈°傛敞鎰忥紝鍦ㄩ粯璁ゆ儏鍐典笅錛岋籍錛わ極灝嗕細鍙悳绱㈠湪sources/*/Android.mk涓殑鏂囦歡銆?/span>
this-makefile
榪斿洖褰撳墠Makefile鐨勮礬寰勶紙鍗寵繖涓嚱鏁拌皟鐢ㄧ殑鍦版柟錛?/span>
parent-makefile
銆銆榪斿洖璋冪敤鏍戜腑鐖?/span>Makefile璺緞銆傚嵆鍖呭惈褰撳墠Makefile鐨?/span>Makefile璺緞銆?/span>
grand-parent-makefile
鐚滅寽鐪?/span>...
/*****************************************************************************/
妯″潡鎻忚堪鍙橀噺:
涓嬮潰鐨勫彉閲忕敤浜庡悜緙栬瘧緋葷粺鎻忚堪浣犵殑妯″潡銆備綘搴旇瀹氫箟鍦?/span>'include $(CLEAR_VARS)'鍜?/span>'include $(BUILD_XXXXX)'涔嬮棿瀹氫箟銆?/span>姝e鍓嶉潰鎻忓啓鐨勯偅鏍鳳紝$(CLEAR_VARS鏄竴涓剼鏈紝娓呴櫎鎵鏈夎繖浜涘彉閲忥紝闄ら潪鍦ㄦ弿榪頒腑鏄懼紡娉ㄦ槑銆?/span>
LOCAL_PATH
銆銆榪欎釜鍙橀噺鐢ㄤ簬緇欏嚭褰撳墠鏂囦歡鐨勮礬寰勩備綘蹇呴』鍦?/span>Android.mk鐨勫紑澶村畾涔夛紝鍙互榪欐牱浣跨敤錛?/span>
LOCAL_PATH := $(call my-dir)
榪欎釜鍙橀噺涓嶄細琚?/span>$(CLEAR_VARS)娓呴櫎錛屽洜姝ゆ瘡涓?/span>Android.mk鍙渶瑕佸畾涔変竴嬈★紙鍗充嬌浣犲湪涓涓枃浠朵腑瀹氫箟浜嗗嚑涓ā鍧楃殑鎯呭喌涓嬶級銆?/span>
LOCAL_MODULE
榪欐槸浣犳ā鍧楃殑鍚嶅瓧錛屽畠蹇呴』鏄敮涓鐨勶紝鑰屼笖涓嶈兘鍖呭惈絀烘牸銆備綘蹇呴』鍦ㄥ寘鍚換涓鐨?/span>$(BUILD_XXXX)鑴氭湰涔嬪墠瀹氫箟瀹?/span>銆傛ā鍧楃殑鍚嶅瓧鍐沖畾浜嗙敓鎴愭枃浠剁殑鍚嶅瓧錛屼緥濡傦紝濡傛灉涓涓竴涓叡浜簱妯″潡鐨勫悕瀛楁槸<foo>錛岄偅涔堢敓鎴愭枃浠剁殑鍚嶅瓧灝辨槸lib<foo>.so銆備絾鏄紝鍦ㄤ綘鐨?/span>NDK鐢熸垚鏂囦歡涓紙鎴栬?/span>Android.mk鎴栬?/span>Application.mk錛夛紝浣犲簲璇ュ彧娑夊強(寮曠敤)鏈夋甯稿悕瀛楃殑鍏朵粬妯″潡銆?/span>
LOCAL_SRC_FILES
榪欐槸瑕佺紪璇戠殑婧愪唬鐮佹枃浠跺垪琛ㄣ傚彧瑕佸垪鍑鴻浼犻掔粰緙栬瘧鍣ㄧ殑鏂囦歡錛屽洜涓虹紪璇戠郴緇熻嚜鍔ㄤ負浣犺綆椾緷璧栥?/span>
娉ㄦ剰婧愪唬鐮佹枃浠跺悕縐伴兘鏄浉瀵逛簬LOCAL_PATH鐨勶紝浣犲彲浠ヤ嬌鐢ㄨ礬寰勯儴鍒嗭紝渚嬪錛?/span>
LOCAL_SRC_FILES := foo.c \
toto/bar.c
娉ㄦ剰錛氬湪鐢熸垚鏂囦歡涓兘瑕佷嬌鐢?/span>UNIX椋庢牸鐨勬枩鏉?/span>(/).windows椋庢牸鐨勫弽鏂滄潬涓嶄細琚紜殑澶勭悊銆?/span>
LOCAL_CPP_EXTENSION
榪欐槸涓涓彲閫夊彉閲忥紝鐢ㄦ潵鎸囧畾C++浠g爜鏂囦歡鐨勬墿灞曞悕錛岄粯璁ゆ槸'.cpp',浣嗘槸浣犲彲浠ユ敼鍙樺畠錛屾瘮濡傦細
LOCAL_CPP_EXTENSION := .cxx
LOCAL_C_INCLUDES
璺緞鐨勫彲閫夐厤緗紝鏄粠鏍圭洰褰曞紑濮嬬殑錛?/span>
all sources (C, C++ and Assembly). For example:
LOCAL_C_INCLUDES := sources/foo
Or even:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo
闇瑕佸湪浠諱綍鍖呭惈LOCAL_CFLAGS / LOCAL_CPPFLAGS鏍囧織涔嬪墠銆?/span>
LOCAL_CFLAGS
鍙夌殑緙栬瘧鍣ㄩ夐」錛屽湪緙栬瘧C浠g爜鏂囦歡鐨勬椂鍊欎嬌鐢ㄣ?/span>
榪欏彲鑳芥槸鏈夌敤鐨勶紝鎸囧畾涓涓檮鍔犵殑鍖呭惈璺緞錛堢浉瀵逛簬NDK鐨勯《灞傜洰褰曪級錛屽畯瀹氫箟錛屾垨鑰呯紪璇戦夐」銆?/span>
銆閲嶈淇℃伅錛氫笉瑕佸湪Android.mk涓敼鍙?/span>optimization/debugging綰у埆錛屽彧瑕佸湪Application.mk涓寚瀹氬悎閫傜殑淇℃伅錛屽氨浼氳嚜鍔ㄥ湴涓轟綘澶勭悊榪欎釜闂錛屽湪璋冭瘯鏈熼棿錛屼細璁╋籍錛わ極鑷姩鐢熸垚鏈夌敤鐨勬暟鎹枃浠躲?/span>
LOCAL_CXXFLAGS
Same as LOCAL_CFLAGS for C++ source files
LOCAL_CPPFLAGS
涓?/span>LOCAL_CFLAGS鐩稿悓錛屼絾鏄C 鍜屻C++ source files閮介傜敤銆?/span>
LOCAL_STATIC_LIBRARIES
搴旇閾炬帴鍒拌繖涓ā鍧楃殑闈欐佸簱鍒楄〃錛堜嬌鐢?/span>BUILD_STATIC_LIBRARY鐢熸垚錛夛紝榪欎粎浠呭鍏變韓搴撴ā鍧楁墠鏈夋剰涔夈?/span>
LOCAL_SHARED_LIBRARIES
榪欎釜妯″潡鍦ㄨ繍琛屾椂瑕佷緷璧栫殑鍏變韓搴撴ā鍧楀垪琛紝鍦ㄩ摼鎺ユ椂闇瑕侊紝鍦ㄧ敓鎴愭枃浠舵椂宓屽叆鐨勭浉搴旂殑淇℃伅銆傛敞鎰忥細榪欎笉浼氶檮鍔犲垪鍑虹殑妯″潡鍒扮紪璇戝浘錛屼篃灝辨槸錛屼綘浠嶇劧闇瑕佸湪Application.mk涓妸瀹冧滑娣誨姞鍒扮▼搴忚姹傜殑妯″潡涓?/span>
LOCAL_LDLIBS
緙栬瘧浣犵殑妯″潡瑕佷嬌鐢ㄧ殑闄勫姞鐨勯摼鎺ュ櫒閫夐」銆傝繖瀵逛簬浣跨敤”-l”鍓嶇紑浼犻掓寚瀹氬簱鐨勫悕瀛楁槸鏈夌敤鐨勩備緥濡傦紝涓嬮潰灝嗗憡璇夐摼鎺ュ櫒鐢熸垚鐨勬ā鍧楄鍦ㄥ姞杞芥椂鍒婚摼鎺ュ埌/system/lib/libz.so
LOCAL_LDLIBS := -lz
鐪?/span>docs/STABLE-APIS.TXT鑾峰彇浣犱嬌鐢?/span>NDK鍙戣鐗堣兘閾炬帴鍒扮殑寮鏀劇殑緋葷粺搴撳垪琛ㄣ?/span>
LOCAL_ALLOW_UNDEFINED_SYMBOLS
銆銆榛樿鎯呭喌涓嬶紝鍦ㄨ瘯鍥劇紪璇戜竴涓叡浜簱鏃訛紝浠諱綍鏈畾涔夌殑寮曠敤灝嗗鑷翠竴涓?#8220;鏈畾涔夌殑絎﹀彿”閿欒銆傝繖瀵逛簬鍦ㄤ綘鐨勬簮浠g爜鏂囦歡涓崟鎹夐敊璇細鏈夊緢澶х殑甯姪銆?/span>
鐒惰岋紝濡傛灉浣犲洜涓烘煇浜涘師鍥狅紝闇瑕佷笉鍚姩榪欓」媯鏌ワ紝鎶婅繖涓彉閲忚涓?#8216;锝旓綊锝曪絽’銆傛敞鎰忕浉搴旂殑鍏變韓搴撳彲鑳藉湪榪愯鏃跺姞杞藉け璐ャ傦紙榪欎釜涓鑸敖閲忎笉瑕佸幓璁句負true錛?/span>
LOCAL_ARM_MODE
榛樿鎯呭喌涓嬶紝arm鐩爣浜岃繘鍒朵細浠?/span>thumb鐨勫艦寮忕敓鎴愶紙16浣嶏級錛屼綘鍙互閫氳繃璁劇疆榪欎釜鍙橀噺涓?/span>arm濡傛灉浣犲笇鏈涗綘鐨?/span>module鏄互32浣嶆寚浠ょ殑褰㈠紡銆?/span>
'arm' (32-bit instructions) mode. E.g.:
LOCAL_ARM_MODE := arm
娉ㄦ剰浣犲悓鏍峰彲浠ュ湪緙栬瘧鐨勬椂鍊欏憡璇夌郴緇熺紪璇戠壒瀹氱殑綾誨瀷錛?/span>姣斿
LOCAL_SRC_FILES := foo.c bar.c.arm
榪欐牱灝卞憡璇夌郴緇熸繪槸灝?/span>bar.c浠?/span>arm鐨勬ā寮忕紪璇戯紝
Android.mk浣跨敤妯℃澘
鍦ㄤ竴涓?/span>Android.mk涓彲浠ョ敓鎴愬涓彲鎵ц紼嬪簭銆佸姩鎬佸簱鍜岄潤鎬佸簱銆?/span>
1錛岀紪璇戝簲鐢ㄧ▼搴忕殑妯℃澘錛?/span>
#Test Exe
LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_SRC_FILES:= main.c
LOCAL_MODULE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)
錛堣彍楦熺駭鍒В閲婏細:=鏄祴鍊肩殑鎰忔濓紝$鏄紩鐢ㄦ煇鍙橀噺鐨勫鹼級LOCAL_SRC_FILES涓姞鍏ユ簮鏂囦歡璺緞錛?/span>LOCAL_C_INCLUDES 涓姞鍏ユ墍闇瑕佸寘鍚殑澶存枃浠惰礬寰勶紝LOCAL_STATIC_LIBRARIES鍔犲叆鎵闇瑕侀摼鎺ョ殑闈欐佸簱錛?/span>*.a錛夌殑鍚嶇О錛?/span>LOCAL_SHARED_LIBRARIES涓姞鍏ユ墍闇瑕侀摼鎺ョ殑鍔ㄦ佸簱錛?/span>*.so錛夌殑鍚嶇О錛?/span>LOCAL_MODULE琛ㄧず妯″潡鏈緇堢殑鍚嶇О錛?/span>BUILD_EXECUTABLE琛ㄧず浠ヤ竴涓彲鎵ц紼嬪簭鐨勬柟寮忚繘琛岀紪璇戙?/span>
2錛岀紪璇戦潤鎬佸簱鐨勬ā鏉匡細
#Test Static Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY)
涓鑸殑鍜屼笂闈㈢浉浼鹼紝BUILD_STATIC_LIBRARY琛ㄧず緙栬瘧涓涓潤鎬佸簱銆?/span>
3錛岀紪璇戝姩鎬佸簱鐨勬ā鏉匡細
#Test Shared Lib
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
helloworld.c
LOCAL_MODULE:= libtest_shared
TARGET_PRELINK_MODULES := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)
涓鑸殑鍜屼笂闈㈢浉浼鹼紝BUILD_SHARED_LIBRARY琛ㄧず緙栬瘧涓涓叡浜簱銆?/span>
浠ヤ笂涓夎呯殑鐢熸垚緇撴灉鍒嗗埆鍦ㄥ涓嬶紝generic渚濆叿浣?/span>target浼氬彉錛?/span>
out/target/product/generic/obj/EXECUTABLE
out/target/product/generic/obj/STATIC_LIBRARY
out/target/product/generic/obj/SHARED_LIBRARY
姣忎釜妯″潡鐨勭洰鏍囨枃浠跺す鍒嗗埆涓猴細
鍙墽琛岀▼搴忥細XXX_intermediates
闈欐佸簱錛?/span> XXX_static_intermediates
鍔ㄦ佸簱錛?/span> XXX_shared_intermediates
鍙﹀錛屽湪Android.mk鏂囦歡涓紝榪樺彲浠ユ寚瀹氭渶鍚庣殑鐩爣瀹夎璺緞錛岀敤LOCAL_MODULE_PATH鍜?/span>LOCAL_UNSTRIPPED_PATH鏉ユ寚瀹氥備笉鍚岀殑鏂囦歡緋葷粺璺緞鐢ㄤ互涓嬬殑瀹忚繘琛岄夋嫨錛?/span>
TARGET_ROOT_OUT錛氳〃紺烘牴鏂囦歡緋葷粺銆?/span>
TARGET_OUT錛氳〃紺?/span>system鏂囦歡緋葷粺銆?/span>
TARGET_OUT_DATA錛氳〃紺?/span>data鏂囦歡緋葷粺銆?/span>
鐢ㄦ硶濡傦細
LOCAL_MODULE_PATH:=$(TARGET_ROOT_OUT)
void android_main(struct android_app* state) {
// Make sure glue isn't stripped.
app_dummy();
// loop waiting for stuff to do.
while (1) {
// Read all pending events.
int ident;
int events;
struct android_poll_source* source;
// Read events and draw a frame of animation.
if ((ident = ALooper_pollAll(0, NULL, &events,
(void**)&source)) >= 0) {
// Process this event.
if (source != NULL) {
source->process(state, source);
}
}
// draw a frame of animation
bringTheAwesome();
}
}
------------------------------------------------------------------------------------
