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ファイル:
すべてのcファイルがコンパイルされていますか?答えは肯定的だ.他のcファイルは他の静的リンクライブラリにコンパイルされ、階層的に依存するが、最終的には到着した.soこのファイルに入っています.
このsoはcococos 2 d androidコードにロードされ、C++を呼び出すことができる.
Cocos2dxActivity:
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
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:
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: