2013-11-25 12 views
6

Ho un progetto, creato con Gradle in Android Studio v 0.3.2. Il mio progetto ha dipendenze da altri due moduli (libreria Android). La struttura del progetto è ben definita con i file build.gradle. Il problema è ... quando eseguo il progetto su un dispositivo Android, ho installato 3 apk sul mio dispositivo. Uno è il progetto principale (l'unico giusto) e gli altri due sono dei moduli importati (questi due non voglio essere installato). Come posso ottenere questo? O cosa sto sbagliando?Android Studio installa un APK per ciascun modulo

Progetto Struttura:

  • MyLibModule
  • mainproject
  • MainProject-> libraries->MyOtherModule

Dove MyLibModule è al stesso percorso del progetto principale, perché anch'io ho bisogno di questo modulo in un altro progetto.

Giusto per essere chiari: l'intero progetto build OK, tutte le dipendenze sono OK, ma perché ottengo 3 APK sul mio dispositivo?

risposta

14

Dopo un'intera giornata alle prese con questo problema, ho individuato la causa di questo strano comportamento. Il problema era il manifest del modulo libreria. Prima di passare a Android Studio ho usato Eclipse. E ho avuto un testAttività dichiarata nel manifesto del progetto della biblioteca. La rimozione di tutte le attività di test dal modulo manifest dei miei moduli di libreria ha risolto il problema. Ora Android Studio installa solo l'apk MainProject.

Alcuni Codice: Il manifesto di MyLibModule:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test.mylibmodule" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="7"/> 
    <application> 
     <activity 
      android:name=".TestActivity" 
      android:label="@string/app_name"> 
     </activity> 
    </application> 
</manifest> 

cambiato in:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.test.mylibmodule" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="7"/> 
    <application> 
    </application> 
</manifest> 

.... E lo stesso per MyOtherModule.

NOTA: il nodo vuoto applicazione deve rimanere nel manifest, per evitare errori di compilazione.

+0

Yo questo mi ha aiutato !! – Skynet

+0

In effetti, disponevo di una libreria con l'applicazione con un'attività dimostrativa e stava creando due "versioni" dell'app. –

1

È perché le librerie sono definite nei loro file build.gradle come applicazioni anziché librerie. Cercare questa linea:

apply plugin: 'android' 

e sostituirlo con:

apply plugin: 'android-library' 

potrebbe essere necessario effettuare altre regolazioni alla BuildFile anche perché non tutto ciò che si applica alle applicazioni può essere specificato in un BuildFile libreria . Vedere http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-projects per ulteriori informazioni.

+0

Grazie per la risposta rapida. L'ho notato prima e ho letto anche la documentazione. Ma il problema era nel manifesto delle biblioteche. Pubblicherò presto la mia soluzione come risposta. – Primoz990

9

rimuovere il intent-filtro dall'attività lancio della tua biblioteca

<application> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

cambiato in

<application> 
    <activity android:name=".MainActivity"/> 
</application> 
+0

ottima risposta. sto creando la libreria di aar usando studio. dopo aver creato il file lib di aar, importandolo in un altro progetto. mentre il file apk principale installato nel cellulare, mostra due apk nello schermo mobile.quindi. Ho seguito i tuoi passi. Ho ottenuto un risultato perfetto. – harikrishnan

Problemi correlati