我已经编写了一个使用json.org org.json
(A)的库,假设Android使用相同的(在android中它也被称为org.json
( B),只是它错过了一些相对关键的功能)。现在我要做的就是设置我的gradle,以便我的项目使用org.json
(A)而不是org.json
(B)。我已尝试将以下内容添加到我的app.gradle:
android {
blabla
defaultConfig {
blabla
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets{
main{
java{
exclude 'org/json/**'
}
}
}
}
但是,这似乎不起作用。我仍然可以使用Android org.json
(B),在输入new JSONObject()
时,它仍然使用Android的实现。我怎么能解决这个问题?
答案 0 :(得分:1)
我该如何解决这个问题?
将您的org.json
更改为org.something.else
。您不能将系统提供的软件包替换为应用程序中的软件包,即使对于您自己的进程也是如此。您无法控制运行时类路径,固件始终会获胜。
或者,从org.json
切换到效果更好的东西,例如Gson或Jackson。
答案 1 :(得分:0)
您可以将org.json
依赖项重新定位到另一个程序包名称。
这可以通过gradle shadow插件来完成。
插件项目:https://github.com/johnrengelman/shadow
插件文档:https://imperceptiblethoughts.com/shadow/
我的工作示例:
提示:我正在Android项目中使用Java库项目“ lib”,该项目依赖于org.json
。
lib / build.gradle
apply plugin: 'java-library'
apply plugin: 'com.github.johnrengelman.shadow'
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:4.0.3'
}
}
shadowJar {
relocate 'org.json', 'shadow.org.json'
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation('org.json:json:20180813')
}
sourceCompatibility = "1.7"
targetCompatibility = "1.7"
app / build.gradle
apply plugin: 'com.android.application'
android {
[..]
}
dependencies {
[..]
implementation project(path: ':lib', configuration: 'shadow')
}