如何在android应用程序中使用现有的.so文件[关闭]

2024-01-10

我正在寻找应该在 android 平台中将 .doc/.docx 转换为 .pdf 的库。

我得到了 PdFTron android sdk,因为他们给出了 libPDFNetC.so 文件。

对于转换,有一个名为 Convert 的类,其中有一个方法 toPDF(), 在该方法中,他们在内部调用了本机方法 FileToPdf()。我尝试了该代码,但无法调用该本机方法并收到错误

我想知道,如果您存在现有的 .so 文件,并且您想调用 .so 文件中存在的本机方法,那么是否需要使用 JNI?我对JNI了解不多。任何帮助。


您必须使用以下链接链接由 Android NDK 生成的最终共享库ndk-build到你说的PDF共享库您已经针对 ARM 架构进行了编译. (确保情况如此,否则该库将无法在 Android 上运行!)

例如,如果您有以下目录结构:

jni
└── libs
└────── my_shared_lib.so
└── Android.mk
└── Application.mk

您需要在其中包含以下内容Android.mk file:

LOCAL_PATH := $(call my-dir)

# define our prebuilt shared library as a module to the build system
include $(CLEAR_VARS)
LOCAL_MODULE := mysharedlib
LOCAL_SRC_FILES := libs/my_shared_lib.so
include $(PREBUILT_SHARED_LIBRARY)

# The final shared library that will be bundled inside the .apk
include $(CLEAR_VARS)
LOCAL_MODULE := mynativelib
LOCAL_LDLIBS := -landroid -llog
LOCAL_CPPFLAGS := -O0 -g3 -std=c++11 -Wall -Wextra 
LOCAL_SHARED_LIBRARIES := mysharedlib
LOCAL_C_INCLUDES := myheader1.h myheader2.h
LOCAL_SRC_FILES := src_file1.cpp src_file2.cpp
include $(BUILD_SHARED_LIBRARY)

和内容应用程序.mk文件(用于使用 C++ 标准库,并为两个不同版本的 ARM 架构构建最终的共享库):

APP_OPTIM := debug
APP_PLATFORM := android-14
APP_STL := gnustl_static
APP_ABI := armeabi armeabi-v7a

然后在 Eclipse 中或使用命令行编译代码后ndk构建脚本它会编译您最终的共享库并将其链接到您预构建的共享库(即您所说的要尝试使用的 PDF 共享库)。

对于共享库,生成并部署到设备/模拟器的 apk 包含最终共享库以及您链接的所有预构建共享库,与链接未捆绑在 apk 内的静态库相反。

对于您的用例,在设备上解压 apk 后,您的 Android 应用程序的 lib 目录中应该有两个共享库。 您可以通过从终端运行以下命令来检查这一点:

adb shell ls -l /data/data/com.company.myapp/lib

将 com.company.myapp 替换为您的应用程序的包名称。

另外,不要忘记将以下内容放入 Java 类的静态上下文中:

class MyClass
{
      static
      {
            try
            {
                System.loadLibrary("mynativelib");
            }
            catch (UnsatisfiedLinkError ule)
            {
               Log.e(TAG, "WARNING: Could not load native library: " 
                      + ule.getMessage());
            }
      }

       // other code here...
}

注意使用sameSystem.loadLibrary 方法调用中的 name 作为最终的共享库名称。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在android应用程序中使用现有的.so文件[关闭] 的相关文章

  • 当活动被破坏时如何保存状态

    public class Talk extends Activity private ProgressDialog progDialog int typeBar TextView text1 EditText edit Button res
  • animation.start() 或animation.startNow() 不会立即开始动画

    我有一个奇怪的问题 有时应该淡出我的控件 ImageButton 的动画不会立即启动 我使用淡出动画来隐藏它 然后在 myListener 的末尾 onAnimationEnd 中 我将新资源作为按钮上的图像 我的应用程序代码中的某处 An
  • Android 位置 API:获取提供商状态

    在 Android 中获取位置提供商状态的最佳方式是什么 当注册 LocationListener 以进行位置更新时 onStatusChanged String provider int status Bundle extras 每当状态
  • 如何检查 Android 设备是否在线

    我的服务器不断检查我的 Android 应用程序是否在线 请问我可以在我的android应用程序上执行哪些操作 创建一个名为 isNetworkAvailable 的帮助器方法 该方法将根据网络是否可用返回 true 或 false 它看起
  • Android:将图像裁剪为特定尺寸

    我的目的是让用户从图库中选择一张图像 然后进行裁剪活动 但是 我需要将定义裁剪蒙版的矩形锁定到某个尺寸 然后用户只需重新定位它即可显示图像的一部分 关于如何做到这一点有什么想法吗 Thanks T Intent intent new Int
  • 通过模拟器控制台或 ADB 更改 Android 模拟器方向

    我正在尝试构建一个自动化测试框架 用于检查应用程序应该响应的基本内容 而不会崩溃 其中之一是检查应用程序是否正确响应配置更改 现在 由于它是自动化的 我必须以编程方式在横向和纵向之间切换模拟器的方向 并观察它是否崩溃 大写 因为有很多与 c
  • 使用全局变量从内部函数获取空字符串

    请帮助我解决一些小问题 我确信你能做到 D 我试图在 firestore 文档 user cases information 上设置一个字段 其中包含一个字段 case number 首先我声明这个全局变量 private String c
  • 为什么我的地图视图上的叠加层没有显示?

    我按照 google hellomapview 教程中的说明进行操作 我得到了一个工作地图视图等 但是添加到地图中的两个项目没有显示 它们似乎在某个地方 因为点击指定位置会显示添加到项目中的消息 Edit 这是我的源代码 应该和google
  • 如何在启用抗锯齿的情况下旋转可绘制对象

    我需要将 ImageView 旋转几度 我通过子类化 ImageView 和重载来做到这一点onDraw Override protected void onDraw Canvas canvas canvas save canvas sca
  • Ionic 框架 - Config.xml

    我需要修改 config xml 文件 因此在针对 Android 进行编译时我会获取以下权限
  • java.lang.AssertionError:CALL 'public final fun

    我正在尝试使用 jetPack Compose 制作一个项目 我拥有它工作所需的所有必要依赖项 但是当我运行我的应用程序时 它会抛出一个错误 我找不到解决方案 这是错误 java lang AssertionError CALL publi
  • 如何告诉 OkHttpClient 忽略缓存并强制从服务器刷新?

    在我的 Android 应用程序中 我将 Retrofit 与 OkHttpClient 结合使用 并启用缓存来访问某些 API 我们的一些 API 有时会返回空数据 我们在应用程序中提供了一个 刷新 按钮 供客户端从特定 API 重新加载
  • 错误膨胀类 android.support.design.widget.NavigationView [启动时崩溃]

    该应用程序应该有一个导航抽屉 可以从左侧拉出并显示各种活动 但是一旦将导航栏添加到 XML Activity homescreen 文档中 应用程序一启动就会崩溃 主屏幕 java package com t99sdevelopment c
  • Android - 在图像/缩略图上覆盖播放按钮的最佳方式

    我有一个 Android 应用程序 可以播放音频 视频并显示图片 对于视频 我想在预览图像顶部以及列表视图中叠加一个播放按钮 现在我的做法是使用 xml 中的 ImageView 然后可绘制对象是一个图层图层列表 我以编程方式定义它 因为其
  • 如何在 LazyColumn 底部添加空白区域?

    我想添加 LazyColumn 的空白底部 并且我想允许用户调出底部元素 我怎样才能实现这个 Example LazyColumn modifier Modifier fillMaxWidth height 300 dp border 2
  • 将 Word 转换为 PDF - 禁用“保存”对话框

    我有一个用 C 编写的 Word 到 PDF 转换器 除了一件事之外 它工作得很好 有时 在某些 Word 文件上 后台会出现一条消息保存源文件中的更改 gt 是 否 取消 但我没有对源文件进行任何更改 我只想从 Word 文件创建 PDF
  • Android:是否可以在可绘制选择器中使用字符串/枚举?

    问题 Q1 有人设法让自定义字符串 枚举属性在 xml 选择器中工作吗 我通过以下 1 获得了一个布尔属性 但不是字符串属性 编辑 感谢您的回答 目前 android 仅支持布尔选择器 原因请参阅已接受的答案 我计划实现一个复杂的自定义按钮
  • 永久删除Android文件

    我发现了一个名为这会从 Android 设备中永久删除文件和文件夹 以便删除的文件无法再恢复 这是我正在谈论的应用程序 但我想知道如何做到这一点 我知道它是用 android studio 制作的 i尝试了常规的删除方式file delet
  • PhoneGap Build Android 不显示闪屏

    这是我的 config xml 中与启动屏幕相关的代码
  • 如何使用socket.io发送图像文件(二进制数据)?

    我无法从以下位置发送数据Android Client to NodeJS Server I use Socket IO 客户端 https github com socketio socket io client java我的客户端中的ja

随机推荐