大家好!
我现在做一个项目,是需要使用到外部链接库的.so文件的
现在问题是,那个.so文件不是我做的,是从别的软件反编译提取到的
我想知道怎么在自己的程序中调用到它,来实现我需要的功能。
反编译的代码我也看了,关于这儿库的本地静态方法也就三个,非常简单。
但问题就是出现在连接上,有关于使用到那个库的方法就跑不动了……求高人指点!
首先,调用别人生成的.so库可不可行?
如果这个想法可行,那么就是怎么才能使用到?
我现在做一个项目,是需要使用到外部链接库的.so文件的
现在问题是,那个.so文件不是我做的,是从别的软件反编译提取到的
我想知道怎么在自己的程序中调用到它,来实现我需要的功能。
反编译的代码我也看了,关于这儿库的本地静态方法也就三个,非常简单。
但问题就是出现在连接上,有关于使用到那个库的方法就跑不动了……求高人指点!
首先,调用别人生成的.so库可不可行?
如果这个想法可行,那么就是怎么才能使用到?
不行还是得自己移植一下。
就是从一个Android软件中提取出来的
那么移植又该怎么做呢?
大家都来出出主意啊
public class JNI {
static{
System.loadLibrary("myjni");
}
public native void write();
}实验的例子就是这么简单是一个方法,用新建立的项目就用不了
不懂传文件,见谅……我的目的是在自己的项目中调用别人的so文件
so文件是从别人的apk软件中那里提取出来的
那个.so库是从Android软件中提取出来的都不行???
怎么个失败法你得给个log看一下啊。
java端包和类名什么的都要一样, 函数接口,参数及返回值要一摸一样,如果人家库中的jni反调java的函数或使用java类中的数据成员,要将自己的类中定义同样的东西。总之,要想保证能用成功,一定要看过人家的源代码。
logcat里面也没什么特殊报错
AndroidRuntime ERROR:thread attach failed
是哪出错了哦
跟据你以上所述,据我了解是不可行的,主要存在以下几个问题。
1。你的so文件可能不是用交叉编译工具生成的,生成主要针对arm的代码。
2。也是主要的不符合jni规范,导致在java和so之间调用失败。
解决办法,看明白so反编译后的代码,弄懂jni,学会ndk,重写.
还有与系统的一些文件有关,再就是如果是arm架构,在/build/core/下有一个prelink-map-arm.map的文件,里面有各个库对应的加载地址也有看一下。
还有生成so文件时,做了那些优化。
所以你应该将库文件name改为与Android.mk文件中LOCAL_JNI_SHARED_LIBRARIES的名字对应起来
第二,通常情况下,你要将xxx.so文件放入对应的/data/data/com.xxx.xxx/lib 目录下就可以调用了
首先,把so文件拷贝到android项目的libs\armeabi。
然后,编写Java文件调用so文件中的函数。System.loadLibrary("**");进行引用,然后编写相应的native函数。
此处必须使用生成so文件时,你所引用的第三方so文件所创建时的包名是什么,你在你调用的项目包名也必须相同。
由于我自己需要调用别人一个项目中的so文件,我自己试了,完全没有问题,希望能帮到你