A. 如何简单修改Android的so文件
so文件是动态链接库,是个二进制文件,相当于windows系统下的dll二进制文件基本没法修改的,除非有它的源代码,修改以后,重新编译。当然,so可以在一定程度上反编译,但是很麻烦。
B. 安卓手机如何打开.so文件
01安卓手机打开.so文件需要下载Native Libs Monitor这个app,这个应用可以帮助我们理解手机上安装的APK用到了哪些.so文件,以及.so文件来源于哪些函数库或者框架。我们也可以自己对app反编译来获取这些信息。
除了系统方面的原因,Android开发者还要知道以下几点:so机制让开发者最大化利用已有的C和C++代码,达到重用的效果,利用软件世界积累了几十年的优秀代码。so是二进制,没有解释编译的开消,用so实现的功能比纯java实现的功能要快。so内存分配不受Dalivik/ART的单个应用限制,减少OOM。
C. android so文件是什么
so文件是来unix的动态连接源库,是二进制文件,作用相当于windows下的.dll文件。补充:在Android中调用动态库文件(*.so)都是通过jni的方式。Android中加载so文件的提供的API:void System.load(String pathName); 说明:pathName:文件名+文件路径;
D. android studio 怎么打开so文件
先在Android studio导入一个项目,然后进入到项目中,依次进入到app>>src>>main下。在main的文件下版进行创建一个jnilibs,然权后选中main的文件,进行右键,弹出框中点击“new”,移动下一级菜单中选择“directory”。对创建的文件夹进行昵称,在昵称中进行输入“jnilibs”,然后点击“ok”。这样在main的文件中创建一个为jnilibs的文件夹。然后在jinlibs中文件进行添加so的文件,进入到so文件存放的文件中,直接把so的文件拖动到jinlibs的文件中。拖动完成之后,会提示一个确认款提示信息,直接点击“ok”即可。在non-project file access中第一个希望编辑文件,第二个为咱想在当前会话中编辑任何非项目文件,根据的自己需要进行选择,可以默认即可,点击ok。这样就把so文件添加到jnilibs的文件中,这样的话程序的代码就可以进行调用其中方法。
E. 如何加载so文件 android
android中加载so文件:
在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;
}
F. android studio 打开so文件用什么格式
在src/main中添加jniLibs文件夹,把.so复制进去在build.gradle中就添加这么几行,看图sourceSets{main{jniLibs.srcDirs=['libs']}}然后makeproject44、切换到android结构下,你会看到jniLibs中.so已经变成了.jar文件,证明已经成功
G. 关于android软件中的so文件!
*.so文件是linux平台下的动态链接库,反编译动态链接库参见windows下*.dll文件的反编译,类似的Linux:是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。动态链接库:英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个DLL 副本的内容。DLL 是一个包含可由多个程序同时使用的代码和数据的库。DLL文件又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。[1]
H. 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')
}
I. android studio 怎么添加.so文件
android studio中添加.so文件的方法如下:
在文件夹src/main中添加一个名为jniLibs的文件夹,并把.so文件复制到该文件夹中,如图所示:
J. android应用.so文件路径
.so文件是自动生成的,必须放在libs/armeabi目录下(不然程序绝对找不到),注意,现在一般都是libs目录了吧。