cococos 2 d android分析の-libcococos 2 dlua.soライブラリ

4264 ワード

まずsoダイナミックライブラリファイルをコンパイルし(NDKを通じて)、それからandroidの工事の中でlibs/armeabi/下にコピーして、libs/armeabiが存在しないならば、自分で作成して、最後にeclipseでプロジェクトをコンパイルして、このように自動的にsoファイルをapkにパッケージします;eclipseは、パッケージ化時にファイル名の命名規則(lib****.so)に従ってsoファイルをパッケージ化します.先頭と末尾は「lib」と「.so」でなければapkファイルにパッケージ化されません.
soファイルを生成するルールはAndroidを参照してください.mkファイル:
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)      

LOCAL_MODULE := cocos2dlua_shared       

LOCAL_MODULE_FILENAME := libcocos2dlua         ,     libcocos2dlua.so  

LOCAL_SRC_FILES := \
../../Classes/AppDelegate.cpp \           

hellolua/main.cpp

LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/../../Classes/protobuf-lite \
$(LOCAL_PATH)/../../Classes/runtime \
$(LOCAL_PATH)/../../Classes \
$(LOCAL_PATH)/../../../cocos2d-x/external \
$(LOCAL_PATH)/../../../cocos2d-x/tools/simulator/libsimulator/lib  

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes   c       


# _COCOS_HEADER_ANDROID_BEGIN
# _COCOS_HEADER_ANDROID_END

LOCAL_STATIC_LIBRARIES := cocos2d_lua_static
LOCAL_STATIC_LIBRARIES += cocos2d_simulator_static          

# _COCOS_LIB_ANDROID_BEGIN
# _COCOS_LIB_ANDROID_END

include $(BUILD_SHARED_LIBRARY)           so   

$(call import-module,scripting/lua-bindings/proj.android)            
$(call import-module,tools/simulator/libsimulator/proj.android)

# _COCOS_LIB_IMPORT_ANDROID_BEGIN
# _COCOS_LIB_IMPORT_ANDROID_END

すべてのcファイルがコンパイルされていますか?答えは肯定的だ.他のcファイルは他の静的リンクライブラリにコンパイルされ、階層的に依存するが、最終的には到着した.soこのファイルに入っています.
このsoはcococos 2 d androidコードにロードされ、C++を呼び出すことができる.
Cocos2dxActivity:
protected void onLoadNativeLibraries() {
        try {
            ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
            Bundle bundle = ai.metaData;
            String libName = bundle.getString("android.app.lib_name");
            System.loadLibrary(libName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
一定期間の追跡を経て、静的ライブラリ依存関係は次のようになります.
cocos2dlua_shared-[cocos2d_lua_static,cocos2d_simulator_static]
cocos2d_lua_static-[cocos2d_lua_android_static,cocos2dx_static,pbc,dragonbones_static],pbc,dragonbones_staticは自分で追加しました.
cocos2dx_static-[cocosbuilder_static,cocos3d_static,spine_static...lib_socket_static]
cocos2dx_internal_staticには多くの基本的なクラスが含まれていますが、埋め込まれているのは深いです.
cocos2dx_internal_static--->cocos_extension_static--->cocos_ui_static--->cocostudio_static.
実はそんなに本気にする必要はありません.どうせいろいろな依存ですが、やっと私たちの答えを検証して、心が落ち着いています.コンパイルされた静的ライブラリをどのように追加するか、これらのライブラリはコンパイルする必要はありません.
cococos 2 dに統合されたcurlライブラリを分析しましょう.
ファイル構造は次のとおりです.
curl
--includeにはすべてのヘッダファイルが含まれています
--prebuiltには、すべてのプラットフォームの静的ライブラリが含まれています.
--androidはいろいろなcpuタイプです
         ---armeabi  
         ---armeabi-v7a
         ---x86
 --- Android.mk
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := cocos_curl_static    
LOCAL_MODULE_FILENAME := curl
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcurl.a
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/../../include/android
LOCAL_STATIC_LIBRARIES += cocos_ssl_static       
LOCAL_STATIC_LIBRARIES += cocos_crypto_static
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := cocos_crypto_static
LOCAL_MODULE_FILENAME := crypto
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcrypto.a
include $(PREBUILT_STATIC_LIBRARY)

LOCAL_MODULE := cocos_ssl_static
LOCAL_MODULE_FILENAME := ssl
LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libssl.a
include $(PREBUILT_STATIC_LIBRARY)  

PREBUILT_SHARED_LIBRARY
この変数は、コンパイルされた共有ライブラリを指します.とBUILD_SHARED_LIBRARYとBUILD_STATIC_LIBRARYが異なり、このとき対応するLOCAL_SRC_FILESはソースファイルを指定するのではなく、foo/libfoo.soなどの事前コンパイル共有ライブラリファイルを指します.他のモジュールでは、LOCAL_を使用してPREBUILTS変数は、このプリコンパイルモジュールを参照する.
PREBUILT_STATIC_LIBRARY
とPREBUILT_SHARED_LIBRARYは同じですが、ここは静的ライブラリです.参照先:
1:http://blog.csdn.net/smfwuxiao/article/details/8530742
2:http://blog.csdn.net/crazyman2010/article/details/40401545
3:http://www.cnblogs.com/rainduck/p/3600472.html 4: