快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

soandroid的简单介绍

如何加载so文件 android

android中加载so文件:

创新互联公司是一家专业提供海陵企业网站建设,专注与成都做网站、网站建设、H5响应式网站、小程序制作等业务。10年已为海陵众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。

在Android中调用动态库文件(*.so)都是通过jni的方式,而且往往在apk或jar包中调用so文件时,都要将对应so文件打包进apk或jar包,工程目录下图:

Android中加载so文件的提供的API:

void System.load(String pathName);

说明:

1、pathName:文件名+文件路劲;

2、该方法调用成功后so文件中的导出函数都将插入的系统提供的一个映射表(类型Map);

3、具体代码如下:

try { 

String localPath = Environment.getExternalStorageDirectory() + path; 

Log.v(TAG, "LazyBandingLib localPath:" + localPath);

String[] tokens = mPatterns.split(path); 

if (null == tokens || tokens.length = 0 

|| tokens[tokens.length - 1] == "") { 

Log.v(TAG, "非法的文件路径!"); 

return -3; 

// 开辟一个输入流 

File inFile = new File(localPath); 

// 判断需加载的文件是否存在 

if (!inFile.exists()) { 

// 下载远程驱动文件 

Log.v(TAG, inFile.getAbsolutePath() + " is not fond!"); 

return 1; 

FileInputStream fis = new FileInputStream(inFile);

File dir = context.getDir("libs", Context.MODE_PRIVATE); 

// 获取驱动文件输出流 

File soFile = new File(dir, tokens[tokens.length - 1]); 

if (!soFile.exists()) { 

Log.v(TAG, "### " + soFile.getAbsolutePath() + " is not exists"); 

FileOutputStream fos = new FileOutputStream(soFile); 

Log.v(TAG, "FileOutputStream:" + fos.toString() + ",tokens:" 

+ tokens[tokens.length - 1]);

// 字节数组输出流,写入到内存中(ram) 

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

byte[] buffer = new byte[1024]; 

int len = -1; 

while ((len = fis.read(buffer)) != -1) { 

baos.write(buffer, 0, len); 

// 从内存到写入到具体文件 

fos.write(baos.toByteArray()); 

// 关闭文件流 

baos.close(); 

fos.close(); 

fis.close(); 

Log.v(TAG, "### System.load start"); 

// 加载外设驱动 

System.load(soFile.getAbsolutePath()); 

Log.v(TAG, "### System.load End");

return 0;

} catch (Exception e) { 

Log.v(TAG, "Exception   " + e.getMessage()); 

e.printStackTrace(); 

return -1;

}

如何获取android 系统的so库

android ndk调用第三方的so库文件的步骤如下:

1.将SO文件直接放到libs/armeabi下,然后代码中System.loadLibrary("xxx");再public native static int xxx_xxx_xxx();接下来就可以直接调用xxx_xxx_xxx()方法;

2.第二种方案,创建自己的SO文件,在自己的SO文件里调用第三方SO,再在程序中调用自己的SO,这种比较复杂,需要建java类文件,生成.h文件,编写C源文件include之前生成的.h文件并实现相应方法,最后用android NDK开发包中的ndk-build脚本生成对应的.so共享库;

Android SO什么意思

您好,您可能指的是Android OS。

Android OS其实就是安卓操作系统的名字。Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。

如果您确定您问的是Android SO的话,下面给出解释。

Android SO是Android编程中用到的so类型的文件,是一个c++的函数库,在android的JNI中,是先将相应的C语言打包成so库导入到lib文件夹中调用的。

参考:百度百科。

android项目中如何加载已有so库

android项目中如何加载已有so库方法:

1、在项目根目录下建立文件夹libs/armeabi文件夹。

2、将so库放入libs/armeabi文件夹注意事项:

(1)如果采用静态注册的方式请注意C文件中严格按照命名规则Java_packageName_className_method()的方式命名。

(2)在Android项目中建立同上述命名规则中packageName中相同的包名,在此包名下建立同上述命名规则中className相同的类名。

(3)在className声明native方法。

(4)程序中加载so库System.loadLibrary。(data/data/xxx.xxx.xxx/lib/xx.so)或者System.loadLibrary(xx),例如:System.loadLibrary(data/data/com.dtBank.app.service/lib/libjnixcld.so)。

android so文件怎么用

相信很多朋友在使用Android studio开发中,遇到过如何引入第三方so文件的问题,然而第三方官方仅仅给出了ADT环境下的集成方式。

Android studio中默认使用的是gradle编译方式,与ADT编辑方式不一样,那么so文件应当如何引入呢?

其实很简单。这里以集成JPUSH为例,看一下so文件如何引入到编译环境,最终到JNI直接可以调用该so文件。

首先,在我们的Module的根目录中建立libs目录,将jpush集成SDK中的so文件分别拷入,截图如下:

然后就是编写我们的build.gradle文件。

关于so文件引入的配置很简单,代码配置如下:

[html] view plain copy print?

task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {

destinationDir file("$projectDir/libs")

baseName "Native_Libs2"

extension "jar"

from fileTree(dir: "libs", include: "**/*.so")

into "lib"

}

tasks.withType(JavaCompile) {

compileTask - compileTask.dependsOn(nativeLibsToJar)

}

自定义一个任务,在其中指定项目所依赖的so文件的目录,这里用了**/*.so来写,为了省事,指定需要拷入的目录 into "lib",那么动态运行库就被拷入到lib目录中。

完整的build.gradle文件如下:

[html] view plain copy print?

apply plugin: 'com.android.application'

android {

compileSdkVersion 21

buildToolsVersion "21.1.0"

defaultConfig {

applicationId "com.wujay.footerballstar"

minSdkVersion 8

targetSdkVersion 21

versionCode 1

versionName "1.0"

}

buildTypes {

release {

runProguard false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") {

destinationDir file("$projectDir/libs")

baseName "Native_Libs2"

extension "jar"

from fileTree(dir: "libs", include: "**/*.so")

into "lib"

}

tasks.withType(JavaCompile) {

compileTask - compileTask.dependsOn(nativeLibsToJar)

}

}

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])

compile 'com.android.support:appcompat-v7:21.0.0'

compile files('libs/jpush-sdk-release1.7.2.jar')

compile files('libs/umeng_sdk.jar')

compile files('libs/libammsdk.jar')

}


当前名称:soandroid的简单介绍
文章链接:http://6mz.cn/article/phigpe.html

其他资讯