自定义Gradle任务将已解析的Json保存到文件.Android的

sir*_*ine 4 android build gradle build.gradle

我想在gradle构建期间自动解析和保存json对象到资产或原始目录.我有一个java Json解析类,我知道如何从gradle运行它.我不知道的是如何将结果或该类保存到上述任一文件夹中.下面是我将如何运行脚本的示例.我正在尝试在目前的状态下做些什么?

package com.mrhaki.java;

   public class SimpleParser {
       public static void main(String[] args) {
         //parse content
       }
   }
Run Code Online (Sandbox Code Playgroud)

Gradle Build

apply plugin: 'java'

task(runSimpleParser, dependsOn: 'classes', type: JavaExec) {
    main = 'com.mrhaki.java.SimpleParser'
    classpath = sourceSets.main.runtimeClasspath
    args 'mrhaki'
    systemProperty 'simpleparser.message', 'Hello '

}
defaultTasks 'runSimpleParser'
Run Code Online (Sandbox Code Playgroud)

Opa*_*pal 9

我认为没有必要使用外部JSON解析器.而是使用JsonSlurper.工作得很好.在上面的任务中,创建一个文件,在那里写入解析的内容并将其保存在声明的文件夹中.就这样.到底是什么,你不知道?

它将类似于:

task json() << {
   def f1 = new File('path/to/file1')
   def f2 = new File('path/to/file2')
   f1.text //= set content here
   f2.text //= set content here
}
Run Code Online (Sandbox Code Playgroud)

就我所知,这就是全部.


小智 9

仅仅为了更详细的回答,我最近必须做类似的事情,迭代一个简单的json文件并生成一个strings.xml预构建.build.gradle中的相关位:

import groovy.json.JsonSlurper

task generateStrings {
    def inputFile = new File("app/src/main/assets/localized_strings.json")
    def json = new JsonSlurper().parseText(inputFile.text)

    def sw = new StringWriter()
    def xml = new groovy.xml.MarkupBuilder(sw)

    //add json values to the xml builder
    xml.resources() {
        json.each {
            k, v ->
                string(name: "${k}", "${v}")
        }
    }

    def stringsFile = new File("app/src/main/res/values/strings.xml")
    stringsFile.write(sw.toString())
}


gradle.projectsEvaluated {
    preBuild.dependsOn('generateStrings')
}
Run Code Online (Sandbox Code Playgroud)

http://www.veltema.jp/2014/08/27/generating-strings.xml-from-JSON-at-Build-in-Android-Studio/