當前位置:首頁 » 安卓系統 » 如何查看安卓編譯變數值

如何查看安卓編譯變數值

發布時間: 2024-10-28 20:37:13

『壹』 android編譯環境用mmm編譯,報錯'string' does not name a type

1.androidERROR:unknownvirtualdevicename解決法打開系統屬性-->環境變數—>在「系統變數」那一個GroupBox下面選擇「新建」-->變數名為"ANDROID_SDK_HOME」(注意,這個變數名不能改變,只能是這個名字!),然後把變數值改為你想把AVD所在的".android」文件夾放置的位置,比如:"F:\AndroidEmulator」,在這里我把它放在AndroidSDK包中,值為:"D:\SDK\Android\android-sdk-windows-1.5_r3」,如下圖所示。設定成功的話,在eclipse里preferneces->Android->BulidSetting里為如下結果:Defaultdebugkeystore:F:\Android_Emulator\\.android\debug.keystore然後這樣就可以一勞永逸了!!!2.emulator-5554disconnected!Cancelling'oms.Hello.HelloOpone'launch!在eclipse裡面改變一下你run的時候的設置就好了.右點你的工程後run裡面有一個runconfigrations,在裡面有一個選項每次運行都察掉記錄wipe.的,選上就好了.

『貳』 如何調用android.mk 中的變數

變數
1
LOCAL_PATH := $(call my-dir)
1、解釋 LOCAL_PATH:
英文:如下圖
中文:Android.mk 開始必須定義變數 LOCAL_PATH,它用來指定源文件的位置
2、解釋 my-dir:
英文:如下圖
中文:編譯系統提供的'my-dir'宏函數,被用來獲取當前的目錄。

2
include $(CLEAR_VARS)
1、解釋 CLEAR_VARS:
英文:如下圖
中文:編譯系統提供CLEAR_VARS變數,它指向了一個用來清除 LOCAL_ 開頭的變數(LOCAL_PATH除外)的makefile文件,需要它的原因是整個的編譯上下文中,所有的變數都是全局的,這樣就可以保證這些變數只在局部范圍內起作用;

3
LOCAL_MODULE := hello-jni
1、解釋 LOCAL_MODULE:
英文:如下圖
中文:每一個android.mk文件中都必須定義一個模塊標示 LOCAL_MODULE , 這個名字必須是唯一的並且不包含任何的空格,編譯系統將自動的修改生成文件的前綴和後綴,如一個模塊為'foo'共享庫將被改為'libfoo.so';
重要提示,如果你的模塊名為'libfoo',編譯系統生成的文件為 'libfoo.so', 而不會去再增加前綴,當你使用的時候,android平台會自動識別;

4
LOCAL_SRC_FILES := hello-jni.c
1、解釋 LOCAL_SRC_FILES
英文:如下圖
中文:LOCAL_SRC_FILES必須包含一系列的C/C++源文件,他們將會被建立和裝載到模塊中,注意你不應該把需要包含的頭文件列在這里,因為建立系統將自動計算依賴項,只有源文件才能夠被編譯器識別;
2、解釋 LOCAL_CPP_EXTENSION
英文:如下圖
中文:注意默認的c++文件擴展名是'.cpp', LOCAL_CPP_EXTENSION可以用來指定不同類型的擴展名,不要忘了前面的點(如:'.cxx' 將起作用, 但是 'cxx'不會起作用).
如:LOCAL_CPP_EXTENSION := .cc .cpp

5
include $(BUILD_SHARED_LIBRARY)
1、解釋 BUILD_SHARED_LIBRARY
英文:如下圖
中文:『建立系統』提供個變數 BUILD_SHARED_LIBRARY, 將根據在『include』之前定義的所有的信息和LOCAL_前綴的變數,決定將建立什麼,如何正確的生成共享庫;
2、解釋 BUILD_STATIC_LIBRARY
英文: 如下圖
中文: 同上,只不過它生成的是靜態庫

6
LOCAL_C_INCLUDES := $(NDK_ROOT)/sources/third_party/freetype
1、解釋 NDK_ROOT
中文:NDK_ROOT 代表的是ndk的根目錄,如我的是「D:\Android\android-ndk-r10」,這個例子是用來載入ndk根目錄下的freetype的頭文件路徑;
7
LOCAL_LDFLAGS := \
$(LOCAL_PATH)/libs/$(TARGET_ARCH_ABI)/libfreetype.a
1、解釋 LOCAL_LDFLAGS
中文:用來載入用戶自己的靜態庫(.a文件)
2、解釋 TARGET_ARCH_ABI
中文:當前的cpu/abi的類型,在鏈接不同類型的CPU_ABI時非常有用,如下圖

8
$(call import-add-path,$(LOCAL_PATH)/libsrc)
1、解釋:import-add-path
中文:增加自己的路徑到 NDK_MODULE_PATH 環境變數中,再非ndk根目錄/sources下編譯時會用到
9
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp
$(error $(LOCAL_SRC_FILES))
1、解釋:$
中文:變數前面加上"$"用來返回變數的值
2、解釋:$(error string)
中文:用來將string所對應的內容列印到控制台,並且android.mk文件停止繼續進行編譯,如下圖

10
LOCAL_SRC_FILES := hello-jni.c HelloJni.cpp
$(warning $(LOCAL_SRC_FILES))
1、解釋:$(warning string)
中文:用來將string所對應的內容列印到控制台,並且android.mk文件將繼續進行編譯,如下圖

11
LOCAL_PRELINK_MODULE := false
1、解釋 LOCAL_PRELINK_MODULE:
中文:關閉編譯器鏈接前進行代碼優化,防止將沒有用到的代碼不添加到生成的庫中
12
LOCAL_EXPORT_CFLAGS := -DFOO=1
1、解釋 LOCAL_EXPORT_CFLAGS
定義這個變數來記錄一些列的 c/c++編譯標志,他們將會增加到其他的使用這個模塊的LOCAL_CFLAGS中,LOCAL_CFLAGS的功能相當於:LOCAL_STATIC_LIBRARIES 和 LOCAL_SHARED_LIBRARIES 這兩個變數;

13
LOCAL_STATIC_LIBRARIES := foo
1、解釋 LOCAL_STATIC_LIBRARIES
鏈接進來一個靜態庫的模塊,這里是靜態庫的模塊的名稱,而不是靜態庫的名稱
14
LOCAL_SHARED_LIBRARIES
鏈接進來一個動態庫的模塊,這里是動態庫的模塊的名稱,而不是靜態庫的名稱

15
LOCAL_EXPORT_CPPFLAGS
跟 LOCAL_EXPORT_CFLAGS 的功能一樣,但是它只能夠在c++中使用

16
LOCAL_EXPORT_C_INCLUDES
跟 LOCAL_EXPORT_CFLAGS,但是對於c的 include路徑,被調用模塊申明後,使用模塊可以很方便的使用包含的路徑

17
LOCAL_EXPORT_LDFLAGS
跟LOCAL_EXPORT_CFLAGS的作用一樣,但是僅僅是鏈接選項
18
LOCAL_EXPORT_LDLIBS
跟LOCAL_EXPORT_CFLAGS的作用類似,但是這個變數說明的系統庫,需要帶上 '-l' 前綴,他們將導入鏈接器選項,並追加到你的模塊的 LOCAL_LDLIBS
19
LOCAL_ALLOW_UNDEFINED_SYMBOLS := true
允許未定義的符號
20
LOCAL_CFLAGS
.c文件對應的編譯標記變數
21
LOCAL_LDLIBS
用來鏈接共享庫(so)或者執行文件,使用系統的庫文件的時候,需要加上前綴 '-l',例如下面的例子,將告訴連接器生成的模塊的時候同時鏈接 /system/lib/libz.so
LOCAL_LDLIBS := -lz
注意:如果你在一個模塊中鏈接一個靜態庫,這個靜態庫是不會起作用的,同時ndk-build 會列印出一條警告消息
22
LOCAL_CFLAGS := -fvisibility=hidden
隱藏庫函數名
23
LOCAL_PROGUARD_ENABLED默認是打開的,不特別指定的話,就是起作用的,就可能做優化。
LOCAL_PROGUARD_ENABLED:= disabled

『叄』 Makefile編譯時怎麼列印出變數值

其實androidndk上的編譯說到底也就是交叉編譯,只要配置好交叉編譯工具鏈,使用原有的makefile也是可以編譯出在android運行的c、c++程序的。以android-ndk-r4-crystax的ndk版本為例:編譯器路徑android-ndk-r4-crystax/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin名稱前綴arm-eabi-頭文件目錄android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/include庫文件目錄android-ndk-r4-crystax/build/platforms/android-3/arch-arm/usr/lib你可以試一下上面的配置,如果編譯鏈接都沒有問題,可以adbpush到android設備上運行看看,什麼結果?有點崩潰,根本運行不起來,你也許想試試看android自帶的ndk例子,確實是能夠運行的,問題在哪兒呢?只是正確配置了編譯器、頭文件、庫文件還不夠,還需要配置編譯、鏈接的參數,android例子中編譯鏈接的參數是什麼呢?你也許想深究一下android的makefile,可是不久你會發現那是更崩潰的事情,裡面用了很多的make腳本函數。其實android的makefile是可以把執行的詳細命令輸出來的,只要make的時候加上V=1即可。可以看到確實帶了很多參數編譯參數:-fpic-mthumb-interwork-ffunction-sections-funwind-tables-fstack-protector-fno-short-enums-Wno-psabi-march=armv5te-mtune=xscale-msoft-float-mthumb-fomit-frame-pointer-fno-strict-aliasing-finline-limit=64-Wa,--noexecstack-D__ARM_ARCH_5__-D__ARM_ARCH_5T__-D__ARM_ARCH_5E__-D__ARM_ARCH_5TE__-DANDROID鏈接參數:-nostdlib-Bdynamic-Wl,-dynamic-linker,/system/bin/linker-Wl,--gc-sections-Wl,-z,noreloc-Wl,--no-undefined-Wl,-z,noexecstack-L$(PLATFORM_LIBRARY_DIRECTORYS)crtbegin_static.ocrtend_android.o這其中鏈接參數中的-Wl,-dynamic-linker,/system/bin/linker、crtbegin_static.o、crtend_android.o是最關鍵的,android使用了自己的進程載入器,並且自定義了c運行時的啟動結束。難怪先前編譯的進程啟動不了。

熱點內容
世界資產配置是什麼 發布:2024-10-28 23:23:03 瀏覽:530
2022款軒逸哪個配置性比價高 發布:2024-10-28 23:21:25 瀏覽:956
專業java就業培訓 發布:2024-10-28 22:59:52 瀏覽:121
安卓手機音效卡轉換器哪個好 發布:2024-10-28 22:57:39 瀏覽:10
公積金怎麼查詢賬號密碼 發布:2024-10-28 22:43:33 瀏覽:156
電視路由器哪裡是網路密碼 發布:2024-10-28 22:43:32 瀏覽:827
python爬蟲教程pdf 發布:2024-10-28 22:39:15 瀏覽:893
哪個微信安卓版本好用 發布:2024-10-28 22:22:10 瀏覽:342
net調用java介面 發布:2024-10-28 22:21:58 瀏覽:475
c語言輸入單個字元 發布:2024-10-28 22:20:58 瀏覽:429