㈠ 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)