2013-08-25 132 views
5

我正在使用cygwin和Windows7編譯本機代碼。 我在互聯網上獲得了許多優化技巧。如何使用android-ndk優化本地代碼(速度優化)

APP_OPTIM := release 
ndk-build NDK_DEBUG=0 
-DNDEBUG 
LOCAL_CFLAGS += -O2 

但我不明白如何設置這些Application.mk和Android.mk。 我通過應用上述提示嘗試了很多情況。 但是,我不認爲優化適用於我的本機代碼。

Application.mk

APP_PROJECT_PATH := $(shell pwd) 
APP_MODULES := native_lib 
APP_OPTIM := release 
APP_BUILD_SCRIPT := Android.mk 
APP_ABI := armeabi 

Android.mk

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := crypto 
LOCAL_SRC_FILES := lib/libcrypto.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := native_lib 
LOCAL_SRC_FILES := nativeC.c \ 
        AES/main.c \ 
        AES/aes.c \ 

LOCAL_C_INCLUDES := ./lib     
LOCAL_SHARED_LIBRARIES := crypto 
LOCAL_CFLAGS += -O2 
LOCAL_CFLAGS += -march=armv6 -marm -mfloat-abi=softfp -mfpu=vfp 
LOCAL_LDLIBS += -ldl 
include $(BUILD_SHARED_LIBRARY) 

我希望很多評論。


此外,

首先,我試圖與上述標誌沒有它的情況下進行比較。 (例如,我使用Application.mk中的APP_OPTIM:=發佈編譯了我的程序,然後再次編譯時沒有它或使用APP_OPTIM:= debug。)但是,我看不到任何運行速度的變化。

二,這是最重要的,我的程序比較兩個模塊的速度。 (爲了方便起見,我將它們稱爲模塊A,B)模塊A是預先構建的(這是Android.mk中的libcrypto.so)。我想將優化應用到模塊B中。首先,我比較了PC(Visual Studio 2010)中模塊A和模塊B的速度測試。當我在PC中嘗試模塊A和B時,模塊B比A快(當然,我預編譯了模塊A,然後通過調用庫來使用它)。現在我將PC程序移植到它中爲Android。但在Android中,模塊B的速度比A慢。

因此,我得出結論,這並未優化。

總之,

  1. 我比較了標誌,並且沒有它之間的速度。
  2. 在PC上運行此程序時,預編譯模塊A比 B快,但在Android中,它完全相反。

你知道我的程序的問題是什麼嗎?先謝謝你。

+1

你怎麼能告訴你的編譯代碼沒有優化? – krsteeve

+0

我在下面的答案中添加了詳細信息。 (另外...) – user2642459

+0

你可以編輯你的問題更多的細節,你不應該做出一個實際上不是答案的答案。 – krsteeve

回答

11

APP_OPTIM:=釋放

放線APP_OPTIM := release到您的Application.mk文件

NDK-建立NDK_DEBUG = 0

只需通過NDK_DEBUG=0作爲參數傳遞給ndk-build腳本。一旦你定義了APP_OPTIM := release,你就不需要它了。

-DNDEBUG

這應該進入你的LOCAL_CFLAGS

LOCAL_CFLAGS += -DNDEBUG 

LOCAL_CFLAGS + = -02

這實際上是不需要的,因爲在Android NDK已經定義-O2優化。

+0

任何事情都不會影響速度。特別是,Application.mk和Android.mk都放在/jni /中。 – user2642459

+2

「-O3」怎麼樣? – xdevs23