動態庫so打包到android apk
編譯libjnisimple.so
Android/development/samples/SimpleJNI/jni/Android.mk
# This makefile supplies the rules for building a library of JNI code for
# use by our example of how to bundle a shared library with an APK.
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := samples
# This is the target being built.
LOCAL_MODULE:= libsimplejni
# All of the source files that we will compile.
LOCAL_SRC_FILES:= \
native.cpp
# All of the shared libraries we link against.
LOCAL_SHARED_LIBRARIES := \
libutils
# No static libraries.
LOCAL_STATIC_LIBRARIES :=
# Also need the JNI headers.
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE)
# No special compiler flags.
LOCAL_CFLAGS +=
# Don't prelink this library. For more efficient code, you may want
# to add this library to the prelink map and set this to true. However,
# it's difficult to do this for applications that are not supplied as
# part of a system image.
LOCAL_PRELINK_MODULE := false
include $(BUILD_SHARED_LIBRARY)
注意:在jni的C++程式碼中,JNI_OnLoad要用C編譯器編譯(extern "C"),否則會出現dalvik找不到JNI_OnLoad函式並跳過初始化。
D/dalvikvm( 4581): No JNI_OnLoad found in /data/data/xxxxlib/libsimplejni.so 0x481f3b78, skipping init
編譯apk
Android/development/samples/SimpleJNI/Android.mk
# This makefile shows how to build a shared library and an activity that
# bundles the shared library and calls it using JNI.
TOP_LOCAL_PATH:= $(call my-dir)
# Build activity
LOCAL_PATH:= $(TOP_LOCAL_PATH)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := samples
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := SimpleJNI
LOCAL_JNI_SHARED_LIBRARIES := libsimplejni
LOCAL_PROGUARD_ENABLED := disabled
include $(BUILD_PACKAGE)
# ============================================================
# Also build all of the sub-targets under this one: the shared library.
include $(call all-makefiles-under,$(LOCAL_PATH))
注意:jni中實現的function,在java中必須要定義成native
編輯jni層檔案編譯so & apk
adb shell pm uninstall -f com.example.android.simplejni
adb install SimpleJNI.apk
相關文章
- andriod 原始碼開發,打包so到apk原始碼APK
- Android Apk 打包AndroidAPK
- Android APK打包流程AndroidAPK
- Android native層動態載入so庫Android
- Flutter 打包 android端 apkFlutterAndroidAPK
- linuxjna呼叫so動態庫Linux
- Android逆向之旅---動態方式破解apk進階篇(IDA除錯so原始碼)AndroidAPK除錯原始碼
- 簽名打包Android版apkAndroidAPK
- Android開發 —— apk打包流程AndroidAPK
- Android 開發中如何動態載入 so 庫檔案Android
- Android Apk反編譯系列教程(二)APK重打包AndroidAPK編譯
- Android Studio打包專案:APKAndroidAPK
- Android自定義打包apk名稱AndroidAPK
- Android Studio NDK:三、打包SOAndroid
- 安裝APK時SO庫的選擇策略APK
- Android Studio打包apk,aar,jar包AndroidAPKJAR
- android 使用ANT批量打包apk步驟AndroidAPK
- 【Android自動化打包】03. APK的數字簽名AndroidAPK
- Android逆向之旅---動態方式破解apk終極篇(加固apk破解方式)AndroidAPK
- linux 動態裝載動態庫 ldd,ldconfig,ld.so.conf, ld.so.cacheLinux
- Flutter 38: 圖解 Android 打包 APK 檔案Flutter圖解AndroidAPK
- Android 生成簽名apk與多渠道打包AndroidAPK
- 轉[Android]APK打包過程詳解(一)AndroidAPK
- 轉[Android]APK打包過程詳解(二)AndroidAPK
- Android使用Ant進行apk多渠道打包AndroidAPK
- Android開發把專案打包成apkAndroidAPK
- C編譯: 動態連線庫 (.so檔案)編譯
- Flutter的apk打包FlutterAPK
- Xcode新增Shell指令碼打包靜態庫和動態庫XCode指令碼
- Android 自動編譯、打包生成apk檔案 3 - 使用SDK Ant方式Android編譯APK
- 分享一個自動編譯,打包,簽名 android apk 的小指令碼編譯AndroidAPK指令碼
- lua——alien庫實現lua呼叫C動態連結庫(dll、so)
- ReactNative學習筆記十六之Android打包ApkReact筆記AndroidAPK
- Apk_動態除錯方案APK除錯
- 動態載入APK原理分享APK
- Eclipse接入第三方動態庫.so方案Eclipse
- tensorflow整合到Android以及so庫和pb檔案的動態載入實踐Android
- Android逆向之旅---動態方式破解apk前奏篇(Eclipse動態除錯smail原始碼)AndroidAPKEclipse除錯AI原始碼