尝试在 Android 中使用 Proguard 和 SQLcipher 时出现 NoClassDefFoundError

2023-12-02

我得到了ava.lang.NoClassDefFoundError: net/sqlcipher/CursorWindow当尝试使用 sqlicipher 和 proguard 运行我的应用程序时。该项目在没有启用 proguard 的情况下可以完美运行。我第一次使用 sqlcipher 创建新数据库时出现上述错误。我查看了另一个看似相同的问题,但我尝试了该问题的答案,但仍然收到错误。

Android Proguard SqlCipher NoClassDefFoundError

这是我的全部proguard-properties:

-libraryjars libs/commons-codec.jar
-libraryjars libs/guava-r09.jar
-libraryjars libs/httpmime-4.1.2.jar
-libraryjars libs/jsr305-2.0.2.jar
-libraryjars libs/libphonenumber-5.7.jar
-libraryjars libs/sqlcipher.jar
-keep class com.myandroidapp.** { *; }


-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-dontobfuscate
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application

-dontwarn javax.annotation.**

-dontwarn android.app.**
-dontwarn android.support.**
-dontwarn android.view.**
-dontwarn android.widget.**

-dontwarn com.google.common.primitives.**

-dontwarn **CompatHoneycomb
-dontwarn **CompatHoneycombMR2
-dontwarn **CompatCreatorHoneycombMR2

-keepclasseswithmembernames class * {
    native <methods>;
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * extends android.app.Activity {
   public void *(android.view.View);
}

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keep public class net.sqlcipher.** {
    *;
}

-keep public class net.sqlcipher.database.** {
    *;
}

错误信息:

01-22 19:18:26.553: W/dalvikvm(18993): Exception thrown (Ljava/lang/NoSuchFieldError;) while throwing internal exception (Ljava/lang/NoSuchFieldError;)
01-22 19:18:26.553: E/Cursor(18993): Error locating fields
01-22 19:18:26.553: E/Cursor(18993): Can't find net/sqlcipher/database/SQLiteQuery
01-22 19:18:26.553: E/Cursor(18993): Can't find net/sqlcipher/database/SQLiteProgram
01-22 19:18:26.553: E/Cursor(18993): Can't find net/sqlcipher/database/SQLiteStatement
01-22 19:18:26.553: E/CursorWindow(18993): Can't find net/sqlcipher/CursorWindow
01-22 19:18:26.553: D/AndroidRuntime(18993): Shutting down VM
01-22 19:18:26.553: W/dalvikvm(18993): threadid=1: thread exiting with uncaught exception (group=0x41570c80)
: E/AndroidRuntime(18993): FATAL EXCEPTION: main
: E/AndroidRuntime(18993): Process: com.myandroidapp.androidapp, PID: 18993
: E/AndroidRuntime(18993): java.lang.NoClassDefFoundError: net/sqlcipher/CursorWindow
: E/AndroidRuntime(18993):  at java.lang.Runtime.nativeLoad(Native Method)
: E/AndroidRuntime(18993):  at java.lang.Runtime.doLoad(Runtime.java:421)
: E/AndroidRuntime(18993):  at java.lang.Runtime.loadLibrary(Runtime.java:362)
: E/AndroidRuntime(18993):  at java.lang.System.loadLibrary(System.java:526)
: E/AndroidRuntime(18993):  at net.sqlcipher.database.SQLiteDatabase.loadLibs(Unknown Source)
: E/AndroidRuntime(18993):  at net.sqlcipher.database.SQLiteDatabase.loadLibs(Unknown Source)
: E/AndroidRuntime(18993):  at com.myandroidapp.androidapp.androidappDBAdapter.initializeDB(Unknown Source)
: E/AndroidRuntime(18993):  at com.myandroidapp.services.CompleteService$androidappCompleteThread$2.onResponse(Unknown Source)
: E/AndroidRuntime(18993):  at com.myandroidapp.services.CompleteService$androidappCompleteThread$2.onResponse(Unknown Source)
: E/AndroidRuntime(18993):  at com.myandroidapp.androidapp.androidappHttpRequest.deliverResponse(Unknown Source)
: E/AndroidRuntime(18993):  at com.myandroidapp.androidapp.androidappHttpRequest.deliverResponse(Unknown Source)
: E/AndroidRuntime(18993):  at com.android.volley.i.run(Unknown Source)
: E/AndroidRuntime(18993):  at android.os.Handler.handleCallback(Handler.java:733)
: E/AndroidRuntime(18993):  at android.os.Handler.dispatchMessage(Handler.java:95)
: E/AndroidRuntime(18993):  at android.os.Looper.loop(Looper.java:136)
: E/AndroidRuntime(18993):  at android.app.ActivityThread.main(ActivityThread.java:5081)
: E/AndroidRuntime(18993):  at java.lang.reflect.Method.invokeNative(Native Method)
: E/AndroidRuntime(18993):  at java.lang.reflect.Method.invoke(Method.java:515)
: E/AndroidRuntime(18993):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:781)
: E/AndroidRuntime(18993):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
: E/AndroidRuntime(18993):  at dalvik.system.NativeStart.main(Native Method)
: E/AndroidRuntime(18993): Caused by: java.lang.NoClassDefFoundError: net/sqlcipher/database/SQLiteStatement
: E/AndroidRuntime(18993):  ... 21 more
: E/AndroidRuntime(18993): Caused by: java.lang.NoClassDefFoundError: net/sqlcipher/database/SQLiteProgram
: E/AndroidRuntime(18993):  ... 21 more
: E/AndroidRuntime(18993): Caused by: java.lang.NoClassDefFoundError: net/sqlcipher/database/SQLiteQuery
: E/AndroidRuntime(18993):  ... 21 more
: E/AndroidRuntime(18993): Caused by: java.lang.NoSuchFieldError: no field with name='nHandle' signature='I' in class Lnet/sqlcipher/database/SQLiteCompiledSql;
: E/AndroidRuntime(18993):  ... 21 more

我认为该类已被 Proguard Shrinking 工具删除。

尝试添加以下参数

-dontshrink

并告诉我是否有效。

我还发现 Sqlcipher 的受保护类中缺少一个属性:

: E/AndroidRuntime(18993): Caused by: java.lang.NoSuchFieldError: no field with name='nHandle' signature='I' in class Lnet/sqlcipher/database/SQLiteCompiledSql;

您还可以尝试保留 Sqlcipher 的受保护类吗?

-keep class net.sqlcipher.** {
    *;
}

P.S 您的配置中经常有选项 -dontobfuscate 吗?如果您保留它,您的应用程序将不会被混淆。

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

尝试在 Android 中使用 Proguard 和 SQLcipher 时出现 NoClassDefFoundError 的相关文章

  • 如何使用 ProGuard 将所有方法保留在类中

    我使用 ProGuard 来优化我的 Android 应用程序 然而 对于 Android 仪器测试 我需要一些 但不是全部 类来保留所有成员 我尝试了各种方法 最后一个是 keepclassmembers public class com
  • “_加载小部件时出现问题”消息

    加载小部件时 如果找不到资源或其他内容 则会显示 加载小部件时出现问题 就这样 惊人的 此消息保留在主屏幕上 甚至没有说明加载时遇到问题的小部件 我通过反复试验弄清楚了这一点 但我想知道发生这种情况时是否有任何地方可以找到错误消息 Andr
  • 如何在 Android / Java 中获取图像的分辨率

    如何在 Android 中找到任何图像的分辨率 获取存储在磁盘中的图像大小的有效方法 例如获取用户选择上传的图像文件的大小 是使用BitmapFactory Options并设置inJustDecodeBounds为真 这样做你就会获取图像
  • 对话框上的 EditText 不返回任何文本

    我太累了 找不到错误 我没有发现任何错误 但我没有从 editText 收到任何文本 请看下面的代码 活动密码 xml
  • 安卓无法玩ogg

    有人知道这是什么意思吗 ogg使用phonegap is Media播放 它使用MediaPlayer 05 26 15 41 50 007 1160 3631 E AudioFlinger no more track names avai
  • 毕加索动画加载图像

    我有以下代码在毕加索中加载图像 使用可绘制的占位符在图像下载时显示 不过 我想要的是一个动画旋转进度条样式的旋转器 它可以在图像加载时不断地旋转 就像我在大多数专业应用程序中看到的那样 毕加索似乎不支持这一点 只支持静态图像可绘制 有没有办
  • 如何以编程方式断开拨出呼叫

    我使用以下代码以编程方式断开呼叫 但它不起作用 private void callDisconnect try TelephonyManager manager TelephonyManager this getSystemService
  • 以编程方式更新 Android 中的联系人姓名和电话号码

    我创建一个应用程序来读取 更新 删除联系人详细信息 这是更新联系人姓名和电话号码的问题 有人可以帮助我吗 我该怎么做 我正在使用以下代码 但它不起作用 Override public View onCreateView LayoutInfl
  • 如何在android中设置多个闹钟,在这种情况下最后一个闹钟会覆盖以前的闹钟

    我正在开发一个Android应用程序 用户可以在其中设置提醒时间 但我在以下代码中遇到一个问题 即最后一个警报会覆盖之前的所有警报 MainActivity java public void setreminders DatabaseHan
  • 应用内结算错误

    我的 UNMANAGED 应用内购买无法正常工作 在它完美运行之前 我可以使用测试帐户成功购买 但它突然不起作用了 因为我记得我对商家帐户所做的只是添加更多 2 4 个测试帐户 添加后 我的应用内购买将不起作用 所以我更新了公钥并上传了一个
  • Android Studio更新到1.5后Gradle错误

    今天我已将 Android Studio 更新到 v1 5 我的 libgdx 项目在这次更新之前运行良好 现在我收到此错误消息 Error Unable to load class org gradle mvn3 org sonatype
  • 如何查看 Android 上的 Wi-Fi 是否已连接?

    我什至不希望我的用户尝试下载某些内容 除非他们连接了 Wi Fi 然而 我似乎只能判断是否启用了 Wi Fi 但他们仍然可以有 3G 连接 android net wifi WifiManager m WifiManager getSyst
  • Web 视图未在 Android 中加载本地 html 文件

    I am integrating html in android I have created a web view But i am not able load local html page Surprisingly web view
  • 如何持续更新MPAndroidChart中的Y轴值

    我希望 LineChart 中的轴能够实时调整其最大值和最小值 当新数据的 Y 值增加 正值和负值 时 像 ResetAxisMaxValue 和 ResetAxisMinValue 这样的函数可以很好地工作 但是 一旦信号再次变低 Y 值
  • 以编程方式将 TextView 添加到主屏幕小部件

    我想以编程方式将文本视图控件添加到我的主屏幕小部件 在下面的示例中 我使用 TextView 填充 Linearlayout 但是这里应该如何使用 RemoteView 它只接受 xml 资源布局作为参数 public class MyWi
  • 从 TextView 中显示的数字中删除小数点[重复]

    这个问题在这里已经有答案了 对于我的简单计算器 我将结果显示在TextView 但它总是显示小数 我怎样才能删除它们 这是我的代码 public class MainActivity extends Activity implements
  • 将图像添加到自定义 AlertDialog

    我制作了一个 AlertDialog 让用户可以从我显示的 4 个选项中选择一个 前 3 个让他们在单击号码时直接拨打号码 第 4 个显示不同的视图 现在看起来是这样的 由于第四个选项的目的是不同的任务 我想让它看起来不同 因为用户可能会感
  • 直接使用从密钥库加载的 SecretKey 时,密钥用户未经过身份验证

    我正在尝试使用 Cipher 和在 KeyStore 中加载的 SecretKey 来加密数据 但总是收到此错误 导致 android security KeyStoreException 关键用户未经过身份验证 我尝试自己创建 Secre
  • FCM onMessageReceived 应用程序运行时返回空白消息和标题

    正如您在标题中所写 当应用程序关闭时 它运行良好 并且onMessageReceived获取消息正文和标题 但如果应用程序处于前台模式 运行模式 则可以发送通知 但没有消息和标题 请问该怎么办 代码 Override public void
  • Android:解析 XML 数据的最佳解析器 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在开发一个应用程序 其中我第一次要解析来自远程服务器的 xml 文件中的数据 但我无法选择哪个解析器是有效的或最适合解析的 因为我知道主要有

随机推荐

  • OWIN - Authentication.SignOut() 似乎没有删除 cookie

    我在 OWIN Cookie 身份验证方面遇到一些问题 我有一个 Net 站点 其中有一些 MVC 页面 这些页面使用 cookie 身份验证和受不记名令牌保护的 WebAPI 资源 当我注销时 我删除了客户端上的访问令牌 因此后续 API
  • 在 chrome://extensions 页面访问扩展程序 [重复]

    这个问题在这里已经有答案了 这是我的mainfest json content scripts all frames true css css event css matches u003Call urls gt run at docume
  • find-command:使用创建时间搜索

    如何找到 Jul 30 04 37 创建的内容并将它们移至 tmp 有事吗 find ctime 0037043007 exec mv tmp 参见 GNUfind手册 以及时间输入格式信息也 特别是 newerct 30 Jul 2009
  • 单击按钮时图像未保存在设备中

    目前 我正在使用毕加索库下载图像并在按下按钮时将其保存在设备中 问题是 当我按下按钮时 图像未下载 只显示消息 图像已下载 那么我该如何修复它呢 这是我的代码 PicassoDisplayImageAdapter java This cla
  • Angular 2 detectorChanges 与 setTimeout()

    我面临有关角度 2 变化检测的问题 我正在使用一个使用 onPush 策略的组件 我注意到它的子组件在更新时不会自行更新 它们本身也是 onPush 所以我将changeDetector detectChanges 添加到我的组件中代码及其
  • C++保留内存空间

    有没有什么方法可以保留默认 Windows 内存管理器稍后使用的内存空间 这样如果我的程序使用的空间不超过我在程序启动时保留的空间 我的应用程序就不会耗尽内存 当你有虚拟内存时 做这种事情是没有意义的
  • 为什么不在页面内容中使用 Iframe 的充分理由 [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 好的 我正在寻找一些不在页面内容中使用 iFrame 的充分理由 我的朋友决定使用 iFrame 作为我们的聊天框并加载 html 页面 而不是仅仅使用ajax加载所需的参数并长轮询请求
  • 每隔几秒自动刷新或更新内容页面

    我在用Xamarin forms PCL 并且我需要每隔几秒刷新 更新内容页面及其数据 数据检索自API in the viewmodel 是否有任何方法或处理程序可以定期使用来调用Get Api定期在page xaml cs 就像是 me
  • PHP:Android 在使用嵌入式视频播放器时丢失 Session 和 Cookie 信息

    一整天都没有找到解决方案后 我在这里尝试一下 设想 客户端可以登录并访问视频文件 我使用 PHP 伪流 字节范围请求 提供视频文件 视频文件位于受保护的文件夹中 Setup 加载 php提供html5视频嵌入代码
  • 套接字接收缓冲区大小

    我的问题是关于 Linux 上 Python 的套接字编程 但由于 Python 的socket模块只是系统调用的包装器 recv recvfrom等等 它与 Python 无关 所以 根据docs 当我们调用recv方法 为了与硬件和网络
  • python 中的预自增运算符

    我来自 C C 背景 我不断地输入诸如 ix 1 fred objlist ix value 这不起作用 因为 python 中没有预自增运算符 它只是给了我索引为 1的项目 没关系 我知道如何解决这个问题 事实上 我最近才发现 当我在键盘
  • SQL Server 配置管理器在 SQL Server 2016 中的位置

    哪儿是SQL Server 配置管理器在 SQL Server 2016 中 它不在 SQL Server 2016 的菜单组下 我安装的是开发者版 1 Open run CTRL R 2 输入以下命令 SQLServerManager13
  • WinForms 中居中和滚动的 PictureBox

    我正在开发 WinForms 应用程序 但不知道如何解决问题 我需要在表单中显示图像 因为图像可以任意大 所以我需要在包含图像的图片框上有滚动条 以便用户可以完整地看到它 谷歌搜索后 我发现实现此目的的最佳方法是将 PictureBox 添
  • 如何在页面中嵌入 PDF 查看器?

    如果我没记错的话 Google Docs 提供了显示 PDF 的方法 该 PDF 与网页存储在同一服务器上 通过 但我需要知道如何以跨浏览器兼容的方式做到这一点 你可以考虑使用PDF对象作者 菲利普 哈奇森 或者 如果您正在寻找非 Java
  • 将每个 pytest 测试函数包装到 try- except 中

    我想将每个测试函数包装到 try except 块中以执行 except 块中的代码 仅当测试失败时才应执行此代码 我想在不改变测试功能的情况下实现这一点 而是使用某种装饰器 夹具 不幸的是我找不到任何例子 我想要实现的目标的示例 def
  • 在 Swift 中将 UIButton 覆盖在 UIWebView 上

    所以我有一个加载 UIWebView 的视图 并且我想覆盖 UIButton 用户可以点击以转到另一个视图 我设法将按钮放在网络视图上 但我似乎无法点击它 这是我的代码 class ButtonView UIView var button
  • 如何扩展PS1?

    我有一个 shell 脚本 它在多个目录中运行相同的命令 fgit 对于每个目录 我希望它显示当前的提示符 将在那里运行的命令 如何获取对应的字符串decoded 扩展 PS1 例如我的默认PS1是 debian chroot debian
  • 无法在 Windows 64 位上安装 perl 模块 Net::SSH::Perl

    我已经在 Windows 2008 服务器 64 位 上安装了 active perl 我尝试使用命令 cpan install Net SSH Perl 安装 Net SSH Perl 问了几个问题后 它开始安装 但失败 指出 make
  • SwiftUI List 如何识别 macOS 上选择的项目

    这是我基于的这个答案 该代码当前允许用户选择一个单元格 但我无法区分which单元格被选择或执行任何代码来响应选择 总之 如何根据所选单元格的名称执行代码并在单击时执行 当前单击的单元格以蓝色突出显示 但我想识别它并根据该选择采取相应的操作
  • 尝试在 Android 中使用 Proguard 和 SQLcipher 时出现 NoClassDefFoundError

    我得到了ava lang NoClassDefFoundError net sqlcipher CursorWindow当尝试使用 sqlicipher 和 proguard 运行我的应用程序时 该项目在没有启用 proguard 的情况下