Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android aar library doesn't contain dependencies

i saw similar questions, but not found accepted answers. Problem - i have my own android library with some tiny functions. My library uses others - f.e. Hawk (no sql database). My library gradle file:

apply plugin: 'com.android.library'
buildscript {
    repositories {
        maven { url "https://www.jitpack.io" }
    }
}
android {
    compileSdkVersion 26
    buildToolsVersion "26.0.1"

    defaultConfig {
        minSdkVersion 18
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'library.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:26.0.2'
    compile 'com.github.orhanobut:hawk:1.23'
    testCompile 'junit:junit:4.12'
}

Library works fine. And if i use it as project inside another project - it work too. But when i generate *.aar file (with gradle -> assembleRelease) and include into separate project - it fails. Project see ONLY MY library's class. Hawk com.orhanobut.hawk package and ofc others (if i will use then) are not visible. So ClassNotFoundException comes. If i remove

minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'library.pro'

the result doesnt change. I tried to add the following line into proguard file (library.pro)

-keep class com.orhanobut.hawk {public *;}
-keep class com.orhanobut.hawk.* {public *;}

Result is the same.

So i have two question: 1 - what should i do to make my main project see my library's third party dependencies? 2 - is is possible to obfuscate my library's code (only mine, not dependencies)?

like image 696
TooLazy Avatar asked Oct 21 '17 17:10

TooLazy


Video Answer


1 Answers

what should i do to make my main project see my library's third party dependencies?

The aar file doesn't contain the transitive dependencies and doesn't have a pom file which describes the dependencies used by the module.

It means that, if you are importing a aar file using a flatDir repository you have to specify the dependencies also in your project.

You should use a maven repository, private or public, to avoid the issue.
In this case, gradle downloads the dependencies using the pom file which will contains the dependencies list.

like image 112
Gabriele Mariotti Avatar answered Nov 15 '22 17:11

Gabriele Mariotti