/*
 * 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: 'java'

dependencies {
    compile project(':apksig')
    compile project(':base:zipflinger')

    testCompile 'junit:junit:4.12'
    testCompile project(':base:annotations')
    testCompile project(':base:testutils')
}

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

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

project.ext.pomName = 'Android Signflinger Library'
project.ext.pomDesc = 'Library used to sign APKs'

apply from: "$rootDir/buildSrc/base/publish.gradle"
apply from: "$rootDir/buildSrc/base/bintray.gradle"
apply from: "$rootDir/buildSrc/base/javadoc.gradle"
