为使用旧版Java jtds jar包的Android应用添加jgss安全机制时遇到安全类库问题
使用旧版Java jtds jar包的Android应用添加jgss安全机制时遇到安全类库问题
嘿,隔了好几年重新捡Android开发,还得用老掉牙的jtds连OLAP cube,新版Android Studio的Gradle、Kotlin一堆新东西,再碰上个安全类库找不到的问题,确实够头疼的😮💨
我之前也碰到过类似的情况,核心问题就是旧版jtds是针对JDK8做的,而Android的ART虚拟机并没有完整照搬JDK的安全类库,尤其是JGSS(Java通用安全服务)这部分,很多类的包路径或者实现都不一样,导致jtds找不到需要的依赖。
给你几个实用的解决方向,你可以一步步试:
- 先尽量用相对新的jtds版本(比如1.3.1),虽然还是老,但比更旧的版本对安全类的兼容稍好一些,如果项目必须用现有版本,那继续往下看。
- 补充JGSS相关的兼容依赖:Android默认没带完整的JGSS实现,你可以在模块的
build.gradle(或build.gradle.kts)里加这两个依赖:
要是你用的是Android 11及以上,得在implementation 'org.ietf.jgss:jgss-api:1.0.1' implementation 'com.sun.security:jgss:1.0.0'AndroidManifest.xml里加包可见性配置,不然找不到系统里的安全类:<queries> <package android:name="com.android.org.conscrypt" /> </queries> - 调整jtds的连接参数,强制用兼容Android的验证方式:在你的JDBC URL里加上
useNTLMv2=true和domain=你的域名称,同时可以设置系统属性开启调试,方便排查具体缺哪个类:System.setProperty("sun.security.krb5.debug", "true"); - 开启Desugar兼容Java8类:新版Android Studio支持通过Desugar工具把JDK8的类转成Android兼容的版本,在
build.gradle里这么配置:compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4' - 最后别忘了检查权限,
INTERNET权限一定要在Manifest里加上,不然连远程OLAP cube的第一步都通不过。
对了,你之前跟着视频改的步骤,可能视频里用的是旧版AGP(Android Gradle插件),新版AGP的依赖声明、配置位置可能有变化,要是某个配置找不到地方,看看是不是路径变了。
备注:内容来源于stack exchange,提问作者TilleyTech
相关产品推荐
相关产品推荐

