简体   繁体   中英

Android Gradle include local JAR file

I am trying to compile an APK that consumes a legacy lib in a JAR file.

I have already gone through other questions on SO and none helped me: 1 , 2 , 3 and 4 . I've even found an open issue on github related to my suffering gradle/gradle/issues/1184 -- gradle -q dependencies does not list local file dependencies... which sucks, because I lost a lot of time thinking the file dependency was not being included.

Anyways, this is my project's build.gradle file:

// Project's build.gradle
buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

And this is the app's build.gradle

// app's build.gradle
apply plugin: 'com.android.application'

android {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.mycompany.myapp"
        minSdkVersion 24
        targetSdkVersion 26
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation files('libs/mylib_java.jar')
}

The problem is that when I run a ./gradlew build I get an error as if the package implemented in mylib_java.jar did not exist...

Task :app:compileDebugJavaWithJavac FAILED /home/donatoaz/my_apk_gradle/app/src/main/java/com/mycompany/myapp/MainActivity.java:18: error: package mycompany.mylib.audiofx does not exist import mycompany.mylib.audiofx.CustomEffect;

Now, I used to be able to compile the apk fine, but that was using a very old Android Studio, no gradle (I was using API Level 19, Android 4.4).

I am using gradle 4.5.1 now. PS I am not using Android Studio, this is building in a continuous integration server, headless.

The link to the build scan created by gradle is here

You should be able to "promote" the file dependency so that it appears in the dependency report by setting up a flat directory repository:

repositories {
    flatDir {
        dirs "libs"
    }
}

dependencies {
    implementation ":mylib_java:"
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM