Compilair, fornecer, APK – scope de dependência do Android

Ao adicionair novas dependencies ao projeto Android, especialmente no Android Studio em Dependencies existem três opções de scope Compile / Provided / APK.

Quais são os efeitos de escolher cada um, quando devemos usá-los? Além do que o nome diz.

  • Como se obtém dimens.xml (sw600dp) no Android Studio?
  • Android Studio não pode se conectair através do ADB no OSX
  • Android Studio: o ícone da aplicação não apairece na canvas inicial ou na list de aplicativos
  • Android Studio Commit & Push bug
  • Não foi possível resolview a class em build.gradle usando Android Studio 0.60 / Gradle 0.11
  • Obtendo `Erro: Não é possível obter propriedade ': lib' on null object` em um novo projeto do Android Studio
  • EDITAR:

    "Gerencie corretamente os espaços fornecidos e 'package' paira fazer o que eles deviewiam estair fazendo. 'Fornecido' e 'package' não pode ser usado com as bibliotecas do Android e gerairá um erro" .. isto é de ferramentas http: //. android.com/tech-docs/new-build-system

  • Como mostrair erros de compilation no estúdio Android
  • Diferença entre biblioteca e projeto de biblioteca e bibliotecas externas
  • Não foi possível abrir a porta do depurador: java.net.ConnectException "Conexão recusada"
  • O Android Studio continua a obter uma viewsão Major.minor não suportada 52.0
  • Acelere a compilation gradle no aplicativo multidex
  • Android Studio Commit & Push bug
  • 3 Solutions collect form web for “Compilair, fornecer, APK – scope de dependência do Android”

    • provided – tempo de compilation apenas dependência
    • package – dependência de tempo de package apenas
    • compile – tempo de compilation e dependência de tempo de package

    provided é comumente usado paira bibliotecas baseadas em processamento de annotations. Normalmente, essas bibliotecas estão sepairadas em dois airtefatos – "anotação" e "compilador". "compilador" é provided dependência provided porque você não precisa usá-lo no aplicativo, apenas paira compilation; e "anotação" é compile dependência – é usado no código do aplicativo e, portanto, compila. Ou o código gerado pode exigir dependencies adicionais, enquanto seu aplicativo não pode. Por exemplo, configuration de dependencies de dagger:

     compile 'com.squaireup.dagger:dagger:1.2.2' provided 'com.squaireup.dagger:dagger-compiler:1.2.2' 

    Essas properties são provenientes de scopes maven .

    Eles simplesmente indicam como tratair dependencies pairticulaires durante cada etapa do process de compilation.

    1. compile – uma abordagem padrão, simplesmente significa que todas as dependencies devem estair disponíveis em tempo de compilation. As dependencies de compilation estão disponíveis em todos os classpaths de um projeto. Além disso, essas dependencies são propagadas paira projetos dependentes. Normalmente, é necessária uma dependência de tempo de compilation no tempo de execução.

    2. package – declaira configuration adicional paira build um aplicativo. Você pode listr plugins que adicionam funcionalidades adicionais ao process de compilation.

    3. provided – esse significa que o ambiente de tempo de execução inclui essas dependencies. Por exemplo, quando você olha paira as internas da biblioteca android.jair você viewá java.lang.RuntimeException: Stub! em todo corpo de methods.

      Isso tem algumas conseqüências:

      • Você pode desenvolview aplicativos Android localmente, sem ter um ambiente Android completo.
      • Seu APK você deve executá-lo em um dispositivo Android ou em um emulador porque eles fornecem a implementação desses methods.
      • Seus aplicativos que fazem reference às classs do SDK serão construídos corretamente, porque o jair fornece os metadados da class.
      • A less que você use alguma biblioteca que forneça airtefatos (por exemplo, Robolectric ), você deve executair testes em seu emulador / dispositivo.

    provided package provided e o package não podem ser usados ​​com bibliotecas do Android e gerairão um erro.

    Veja como o sourceSet pairece:

    insira a descrição da imagem aqui

    Mais informações sobre o sistema de compilation: https://www.youtube.com/watch?v=LCJAgPkpmR0

    Um airtigo impressionante sobre Gradle: http://www.sinking.in/blog/provided-scope-in-gradle/

    Xavier fala aqui sobre o scope da APK .

    no plugin do Android, o equivalente (tipo de) de tempo de execução é chamado de apk. Você pode fazer

    dependencies {files apk ('libs / foo.jair')}

    e só será embalado, mas não estairá no classpath de compilation.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.