android 開發ndk相關總結


一、NDK 編譯和使用靜態庫、動態庫

 

默認所有代碼和文件在$project/jni下,否則特殊說明。

情況一:編譯靜態庫

文件Android.mk:

LOCAL_PATH := $(call my-dir)                                      
include $(CLEAR_VARS)                                              
LOCAL_MODULE    := hello-jni                                      
LOCAL_SRC_FILES := hello-jni.c                                  
include $(BUILD_STATIC_LIBRARY)                            


文件Application.mk:   # 需要在application.mk 中加入模塊名(模塊列表,否則不能單獨生產靜態庫?!) 

APP_MODULES :=hello-jni                                           


情況二:編譯動態庫

文件Android.mk:     #動態庫,只需要各自模塊中聲明模塊名即可,不是必須在application中加入模塊名(模塊列表)才能生成動態庫

LOCAL_PATH := $(call my-dir)                                      
include $(CLEAR_VARS)                                              
LOCAL_MODULE    := hello-jni                                      
LOCAL_SRC_FILES := hello-jni.c                                  
include $(BUILD_SHARED_LIBRARY)                          

 

情況三:編譯動態庫+靜態庫

  文件Android.mk:

LOCAL_PATH := $(call my-dir)                                     

include $(CLEAR_VARS)   
LOCAL_MODULE    := mylib_static   
LOCAL_SRC_FILES := src.c   
include $(BUILD_STATIC_LIBRARY)   

 

include $(CLEAR_VARS)   
LOCAL_MODULE    := mylib_shared   
LOCAL_SRC_FILES := src2.c   

LOCAL_STATIC_LIBRARIES := mylib_static   

include $(BUILD_SHARED_LIBRARY)   

 

情況四:已有第三方靜態庫(動態庫),編譯靜態庫(動態庫)

文件Android.mk:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := thirdlib1      # name it whatever
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libthird1.a     # or $(so_path)/libthird1.so
#LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_STATIC_LIBRARY)    #or PREBUILT_SHARED_LIBRARY

 

include $(CLEAR_VARS)
LOCAL_MODULE    := mylib_use_thirdlib
LOCAL_SRC_FILES := src.c

LOCAL_STATIC_LIBRARIES := thirdlib1       #or LOCAL_SHARED_LIBRARY 

include $(BUILD_SHARED_LIBRARY)   #如果編譯靜態庫,需要Application.mk

 

使用第三方的動態庫,靜態庫需要采用預編譯( BUILD_SHARED_LIBRARY 或 PREBUILT_STATIC_LIBRARY)

和 LOCAL_STATIC_LIBRARIES    LOCAL_SHARED_LIBRARY 來igz加入制訂的動態庫或者是靜態庫

         而如果使用的系統庫(靜態庫 / 動態庫 ) 采用如下即可實現:  LOCAL_LDLIBS := -lm -llog -ljnigraphics -lz

 

 二、ndk-gdb 調試方法
          
http://www.cnblogs.com/yaozhongxiao/archive/2012/03/13/2393959.html

  1。  AndroidManifest.xml <application>包含android:debuggable = "true"

 

2。  執行ndk-build NDK_DEBUG=1 

3 。 在java代碼調用c之前加一個斷點,然后在gdb命令行加b ***.c:main

   斷點加入方法android.os.Debug.waitForDebugger();

4 。   執行ndk-gdb

   ndk-gdb --start --force --verbose 顯示更多信息,用於查看步驟中哪里出錯。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM