/*
 * Copyright (C) 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

apply plugin: 'com.android.tools.java-library'
apply plugin: 'com.android.tools.publish'

dependencies {
    implementation project(':base:annotations')

    testImplementation 'junit:junit:4.12'
    testImplementation project(':apkzlib')
    testImplementation project(':base:testutils')
    testImplementation project(':base:build-system:gradle-core')
}

sourceSets {
    main.java.srcDir 'src'
    test.java.srcDir 'test/src/java'
    test.resources.srcDir 'test/resource'
}

group = 'com.android'
archivesBaseName = 'zipflinger'
version = rootProject.ext.buildVersion

project.ext.pomName = 'Android Zip Flinger Library'
project.ext.pomDesc = 'Library used to build and incrementally modify zip files'
