㈠ android 如何查找so文件所在目錄,安裝APK時so安裝到哪個目錄
so安裝到對應分區 system/data 下面的lib里 對應程序的文件夾中 記得改許可權
㈡ android項目中如何載入已有so庫
android項目中如何載入已有so庫方法:
㈢ android so文件怎麼用
相信很多朋友在使用Androidstudio開發中,遇到過如何引入第三方so文件的問題,然而第三方官方僅僅給出了ADT環境下的集成方式。
Android studio中默認使用的是gradle編譯方式,與ADT編輯方式不一樣,那麼so文件應當如何引入呢?
其實很簡單。這里以集成JPUSH為例,看一下so文件如何引入到編譯環境,最終到JNI直接可以調用該so文件。
首先,在我們的Mole的根目錄中建立libs目錄,將jpush集成SDK中的so文件分別拷入,截圖如下:
然後就是編寫我們的build.gradle文件。
關於so文件引入的配置很簡單,代碼配置如下:
[html]view plainprint?
tasknativeLibsToJar(type:Zip,description:""){
destinationDirfile("$projectDir/libs")
baseName"Native_Libs2"
extension"jar"
fromfileTree(dir:"libs",include:"**/*.so")
into"lib"
}
tasks.withType(javaCompile){
compileTask->compileTask.dependsOn(nativeLibsToJar)
}
自定義一個任務,在其中指定項目所依賴的so文件的目錄,這里用了**/*.so來寫,為了省事,指定需要拷入的目錄 into "lib",那麼動態運行庫就被拷入到lib目錄中。
完整的build.gradle文件如下:
[html]view plainprint?
applyplugin:'com.android.application'
android{
compileSdkVersion21
buildToolsVersion"21.1.0"
defaultConfig{
applicationId"com.wujay.footerballstar"
minSdkVersion8
targetSdkVersion21
versionCode1
versionName"1.0"
}
buildTypes{
release{
runProguardfalse
('proguard-android.txt'),'proguard-rules.pro'
}
}
tasknativeLibsToJar(type:Zip,description:""){
destinationDirfile("$projectDir/libs")
baseName"Native_Libs2"
extension"jar"
fromfileTree(dir:"libs",include:"**/*.so")
into"lib"
}
tasks.withType(JavaCompile){
compileTask->compileTask.dependsOn(nativeLibsToJar)
}
}
dependencies{
compilefileTree(dir:'libs',include:['*.jar'])
compile'com.android.support:appcompat-v7:21.0.0'
compilefiles('libs/jpush-sdk-release1.7.2.jar')
compilefiles('libs/umeng_sdk.jar')
compilefiles('libs/libammsdk.jar')
}
㈣ Android SO什麼意思
android 中.so即動態鏈接庫。
.SO文件也是ELF格式文件,共享庫(動態庫),類似於DLL。節約資源,加快速度,代碼升級簡化。
動態鏈接庫(Dynamic Link Library 或者 Dynamic-link Library,縮寫為 DLL),是微軟公司在微軟Windows操作系統中,實現共享函數庫概念的一種方式。這些庫函數的擴展名是 」.dll"、".ocx"(包含ActiveX控制的庫)或者 ".drv"(舊式的系統驅動程序)。
㈤ android中如何編譯出64位so文件
如果是在linux下編譯Android源碼,有可能是兩個原因:
1. lunch命令有32位和64位的區別,注意選能夠編譯64位so的命令
2. mk文件中有LOCAL_MODULE_PATH的值比如為$(TARGET_OUT_SHARED_LIBRARIES)/hw的改為LOCAL_MODULE_RELATIVE_PATH := hw,後一種可以分別在lib和lib64下分別生成32位和64位的so文件,這個看看編譯後的信息就知道了.
㈥ android so文件編寫中調用.a庫文件(Android NDK編程)
libtommath前綴lib去掉
㈦ android調用so(jni)需要在AndroidManifest.xml中聲明許可權嗎,比如通過jni發送簡訊、讀取imei等。
jni通過反調JAVA介面的話,處理方式與JAVA層直接調用介面無異,需要聲明許可權。
jni直接可以讀取設備的cpu、mac等linux kernel中的資料,至於imei是讀不到的。另外,發簡訊也是要調用系統提供的JAVA層的API,如果要直接調用底層介面的話,你估計要重新編譯自己的Android SDK才行。
jni反調java是個很惡心的工作,尤其是在多線程中,最好還是不要嘗試。
有一種不需要聲明許可權的方法是,搞到kernel層的所有API,直接操作硬體吧。當然那是不可能的。
㈧ android ndk開發 如何實現一個so包含另一個so
不推薦在jni庫之外用so,因為這種情況下,需要在java代碼裡面依次載入相關的so。
如果一定要用的話android.mk裡面的內容如下:
LOCAL_PATH:= $(call my-dir)
# first so, which will be built shared
include $(CLEAR_VARS)
LOCAL_MODULE := shared1
LOCAL_SRC_FILES := libnshared1.so
include $(PREBUILT_SHARED_LIBRARY)
# second so, which will be built shared
include $(CLEAR_VARS)
LOCAL_MODULE := shared2
LOCAL_SRC_FILES := libnshared2.so
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := yourjni
LOCAL_SRC_FILES := xxxx.cpp
LOCAL_SHARED_LIBRARIES := shared1
LOCAL_SHARED_LIBRARIES := shared2
LOCAL_LDLIBS := -llog
#LOCAL_LDFLAGS = $(LOCAL_PATH)/obj/libstdc++.a
#LOCAL_CPPFLAGS += -lstdc++
include $(BUILD_SHARED_LIBRARY)