如何在打包android时修改和添加自定义java类和so库,以及Android?

问题描述:Android如何调用第三方SO库?已知条件:SO库是一个Android版本连接库(*。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文件中,写入。h文件之前生成的C源文件是include,并实现相应的方法。最后,使用android NDK开发包中的ndk-build脚本来生成相应的。所以* *共享库;解:1。以上两种方案可行吗?不可行会有什么问题?2.这两个方案有什么区别?为什么网上大多数人都用第二种方案?3.只有一个*。so文件,并提供了详细的接口描述。可以用在安卓上吗?首先,它取决于这个SO是否是一个JNI标准SO,比如它是否返回一个JNI不直接支持的类型。也就是说,这能直接称为JNI吗?如果答案是否定的,你只能选择第二个方案。如果答案是肯定的,那就要看你是否希望这个SO库直接暴露给JAVA层了。如果答案是否定的,你只能选择第二种方案,比如你也是一个库提供者。一般如果你只有SO,说明是别人提供给你的,你可以要求对方给你提供匹配的JAVA调用文件。1,这要看这样是否符合JNI呼叫的规范。看你自己的意愿了。2.因为第二种方法最灵活,各种情况都可以实现。3.看能不能直接从JAVA调用最简单的方法就是看SO中的函数名是否是JAVA_XXX_XXX_XXX格式。可以自己写一个支持的Java文件,注意SO函数名和JAVA函数名的转换规则,或者向SO提供者索取。如果没有,选择第二个方案。1.检查所需文件是否完整。要使用第三方动态库,至少要有两个文件,一个是动态库(。另一个是包含动态库的API声明的头文件。h)。2.封装原始动态库原始动态库文件不包含jni接口所需的信息,所以我们需要封装它。所以我们的需求是将libadd.so中的API封装成一个带有jni接口的动态。3.编写封装函数libaddjni.c .根据之前生成的COM _ Android _ libjni _ libjavaheader . h文件,编写libaddjni.c,用于生成集成的第三方软件包(。罐子,。所以)在libaddjni.soAndroid中可能有安卓使用的第三方软件包,包括Java包。jar和本地包。所以。Jar包可以通过Eclipse开发环境或编译的源代码集成,这取决于您的工作环境。假设我自己的程序是MyMaps,我需要使用BaiduMaps库,包括baidumapapi.jar和libbmapappingine _ v 1 _ 3 _ 1 . so . 1。通过集成第三方jar包和创建目录libs和libs/armeabi。所以Eclipse中的动态库MyMaps项目,把baidumapapi.jar放在libs/目录下,libbmapappingine _ v 1 _ 3 _ 1 . so放在libs/armeabi/下。在Eclipse中将第三方jar包baidumapapi.jar打包到MyMaps中的步骤:1。右键单击该项目,然后选择“属性”;;2.Java构建路径,选择库;;3.在库页面上单击右键“添加库…”;4.选择“用户库”,点击“下一步”;5.单击“用户库”按钮;6.在弹出的界面中,点击“新建…”;7.输入“用户库名”,点击“确定”确认;8.返回后,选择新创建的用户库,点击右边的“添加Jars”;9.选择baidumapapi.jar在MyMaps/libs/下;10.确认后返回。这样编译后jar包会被打成MyMaps.apk,libbmapappingine _ v 1 _ 3 _ 1 . so也会被打包在lib/armeabi/在程序运行的过程中,libbmapapigine _ v 1 _ 3 _ 1 . so被放在/data/data/