/*
 * Copyright (C) 2017 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'
apply plugin: 'sdk-java-lib'

def jardeps = [
    project.file('../../../../prebuilts/tools/common/archive-patcher/explainer.jar'),
    project.file('../../../../prebuilts/tools/common/archive-patcher/generator.jar'),
    project.file('../../../../prebuilts/tools/common/archive-patcher/shared.jar')
]

dependencies {
    compile(libs.smali_dexlib)
    compile(libs.baksmali_dexlib)
    compile project(':base:sdk-common')
    compile project(':base:sdklib')
    compile project(':base:annotations')
    compile project(':base:apkparser:binary-resources')
    compile project(':base:lint-api')
    compile project(':base:lint-checks')
    compile files(jardeps)

    testCompile(libs.junit)
    testCompile project(":base:testutils")
}

jardeps.each { file ->
    sdk {
        common {
            item(file) {
                into "lib"
                notice project.file('../../../../prebuilts/tools/common/archive-patcher/LICENSE')
            }
        }
    }
}

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

project.ext.pomName = 'Apk Analyzer library'
project.ext.pomDesc = 'Library for parsing and analyzing information from APK files'
group = 'com.android.tools.apkparser'
archivesBaseName = 'apkanalyzer'
version = rootProject.ext.baseVersion

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