Erik Z
Erik Z

Reputation: 4770

How can I add a linked source folder in Android Studio?

In Eclipse I can add a source folder to my Android project as a "linked source folder". How do I achieve the same thing in Android Studio?

Or is it possible to add an external folder to build in Gradle?

Upvotes: 69

Views: 115683

Answers (7)

Mahozad
Mahozad

Reputation: 24532

This is for Kotlin DSL (build.gradle.kts):

android {
    sourceSets["main"].java.srcDirs("src/main/myDirectory/code/")
    sourceSets["main"].resources.srcDirs("src/main/myDirectory/resources/")

    // Another notation:
    // sourceSets {
    //     getByName("main") {
    //         java.srcDirs("src/main/myDirectory/code/")
    //         resources.srcDirs("src/main/myDirectory/resources/")
    //     }
    // }
}

Upvotes: 2

Hector
Hector

Reputation: 5356

Here’s a complete Java module Gradle file that correctly generates and references the built artefacts within an Android multi-module application:

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "net.ltgt.gradle:gradle-apt-plugin:0.15"
    }
}

apply plugin: "net.ltgt.apt"
apply plugin: "java-library"
apply plugin: "idea"

idea {
    module {
        sourceDirs += file("$buildDir/generated/source/apt/main")
        testSourceDirs += file("$buildDir/generated/source/apt/test")
    }
}

dependencies {

    // Dagger 2 and Compiler
    compile "com.google.dagger:dagger:2.15"
    apt "com.google.dagger:dagger-compiler:2.15"
    compile "com.google.guava:guava:24.1-jre"

}

sourceCompatibility = "1.8"
targetCompatibility = "1.8"

Upvotes: 2

Jeremy Nikolai
Jeremy Nikolai

Reputation: 285

If you're not using Gradle (creating a project from an APK, for instance), this can be done through the Android Studio UI (as of version 3.3.2):

  • Right-click the project root directory and pick Open Module Settings
  • Hit the + Add Content Root button (center right)
  • Add your path and hit OK

In my experience (with native code), as long as your .so files are built with debug symbols and from the same absolute paths, breakpoints added in source files will be automatically recognized.

Upvotes: 0

Brian White
Brian White

Reputation: 8726

While sourceSets allows you to include entire directory structures, there's no way to exclude parts of it in Android Studio (as of version 1.2), as described in Exclude a class from the build in Android Studio.

Until Android Studio gets updated to support include/exclude directives for Android sources, symbolic links work quite well. If you're using Windows, native tools such as junction or mklink can accomplish the equivalent of symbolic links on Unix-like systems. Cygwin can also create these with a little coercion. See: Git symbolic links in Windows and How to make a symbolic link with Cygwin in Windows 7.

Upvotes: 2

fabrizotus
fabrizotus

Reputation: 2978

In your build.gradle file, add the following to the end of the Android node:

android {
    ....
    ....

    sourceSets {
        main.java.srcDirs += 'src/main/<YOUR DIRECTORY>'
    }

}

Upvotes: 109

lyfshadyboss
lyfshadyboss

Reputation: 267

The right answer is:

android {
    ....
    ....

    sourceSets {
        main.java.srcDirs += 'src/main/<YOUR DIRECTORY>'
    }
}

Furthermore, if your external source directory is not under src/main, you could use a relative path like this:

sourceSets {
    main.java.srcDirs += 'src/main/../../../<YOUR DIRECTORY>'
}

Upvotes: 24

tom
tom

Reputation: 864

You can add a source folder to the build script and then sync. Look for sourceSets in the documentation here: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Basic-Project

I haven't found a good way of adding test source folders. I have manually added the source to the .iml file. Of course this means it will go away everytime the build script is synched.

Upvotes: 2

Related Questions