2013-08-25 160 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