動態庫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
相關文章
- Android native層動態載入so庫Android
- Android APK打包流程AndroidAPK
- Flutter 打包 android端 apkFlutterAndroidAPK
- Android Studio NDK:三、打包SOAndroid
- Android Studio打包專案:APKAndroidAPK
- 簽名打包Android版apkAndroidAPK
- Android Studio打包apk,aar,jar包AndroidAPKJAR
- Android Apk反編譯系列教程(二)APK重打包AndroidAPK編譯
- Cordova 打包 apk,html 打包 apkAPKHTML
- 安裝APK時SO庫的選擇策略APK
- Flutter 38: 圖解 Android 打包 APK 檔案Flutter圖解AndroidAPK
- C編譯: 動態連線庫 (.so檔案)編譯
- Flutter的apk打包FlutterAPK
- FFmpeg編譯Android使用的so庫編譯Android
- lua——alien庫實現lua呼叫C動態連結庫(dll、so)
- android下java的靜態庫和動態庫AndroidJava
- 某當網apk加固脫個soAPK
- flutter常見問題【3】:Flutter 使用Android studio 打包生成apkFlutterAndroidAPK
- Apk_動態除錯方案APK除錯
- uni-app&H5&Android混合開發二 || 使用Android Studio打包應用APKAPPH5AndroidAPK
- appium 能打包成 apk,啟動這個 apk 就能調起待測 app 自動化麼APPAPK
- Android Apk 檔案反編譯和重新打包的過程分析AndroidAPK編譯
- Android NDK祕籍--淺析靜態庫和動態庫Android
- C語言動態庫libxxx.so的幾種使用方法C語言
- Android studio 自動複製生成的 apkAndroidAPK
- React Native 打包apk的那些坑React NativeAPK
- uni-app專案打包成apk(本地打包篇)APPAPK
- App極限瘦身: 動態下發soAPP
- Android:JNI與NDK(二)交叉編譯與動態庫,靜態庫Android編譯
- 用Android SDK Build Tools手動構建APKAndroidUIAPK
- windows和linux gcc生成動態連結庫DLL和SO並用python呼叫WindowsLinuxGCPython
- vue 專案打包成apk(Hbuilder方案)VueAPKUI
- Android下檢視SO庫被依賴的情況Android
- Android so庫防客戶端破解的解決方案Android客戶端
- 【Android APK】解析SD卡上的APK檔案AndroidAPKSD卡
- Android之Apk加殼AndroidAPK
- Android空包Apk簽名AndroidAPK
- 從Android到React Native開發(四、打包流程解析和釋出為Maven庫)AndroidReact NativeMaven
- jenkins配置android自動打包平臺JenkinsAndroid