2013-11-25 6 views
6

Ich habe ein Projekt, Build mit Gradle in Android Studio v 0.3.2. Mein Projekt hat Abhängigkeiten zu zwei anderen Modulen (Android-Bibliothek). Die Projektstruktur ist mit build.gradle-Dateien gut definiert. Das Problem ist ... wenn ich das Projekt auf einem Android-Gerät ausführen, bekomme ich 3 APKs auf meinem Gerät installiert. Eines ist das Hauptprojekt (das einzig Richtige) und die anderen beiden sind von den importierten Modulen (diese beiden möchte ich nicht installieren). Wie kann ich das erreichen? Oder was mache ich falsch?Android Studio installiert ein APK für jedes Modul

Projektstruktur:

  • MyLibModule
  • Hauptprojekts
  • MainProject-> Libraries>MyOtherModule

Wo MyLibModule bei der ist gleicher Pfad wie das Main-Projekt, da ich dieses Modul auch in einem anderen Projekt benötige.

Nur um klar zu sein: Das ganze Projekt Builds OK, alle Abhängigkeiten sind in Ordnung, aber warum bekomme ich 3 APKs auf meinem Gerät?

Antwort

14

Nach einem ganzen Tag mit diesem Problem zu kämpfen, fand ich die Ursache für dieses seltsame Verhalten. Das Problem war das Manifest des Bibliotheksmoduls. Bevor ich zu Android Studio wechselte, habe ich Eclipse benutzt. Und ich hatte eine testActivity im Manifest des Bibliotheksprojekts deklariert. Das Entfernen aller Testaktivitäten aus den Manifesten meiner Bibliotheksmodule löste das Problem. Jetzt installiert Android Studio nur die MainProject-APK.

Einige Code: Das Manifest von 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> 

geändert:

<?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> 

.... Und das gleiche gilt für MyOtherModule.

HINWEIS: die leeren Anwendung Knoten im Manifest bleiben müssen, um Fehler zu vermeiden bauen.

+0

Yo hat mir geholfen !! – Skynet

+0

In der Tat hatte ich eine Bibliothek, die die Anwendung mit einer Demo-Aktivität hatte und es erstellte zwei "Versionen" der App. –

1

Es ist weil Ihre Bibliotheken in ihren build.gradle Dateien als Anwendungen anstelle von Bibliotheken definiert sind. Suchen Sie nach dieser Zeile:

apply plugin: 'android' 

und ersetzen Sie es mit:

apply plugin: 'android-library' 

Sie müssen möglicherweise andere Anpassungen der Buildfile sowie machen, weil nicht alles, was für Anwendungen gilt in einer Bibliothek Buildfile angegeben werden kann, . Weitere Informationen finden Sie unter http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-projects.

+0

Vielen Dank für die schnelle Antwort. Das habe ich schon bemerkt und auch die Dokumentation gelesen. Aber das Problem lag im Manifest der Bibliotheken. Ich werde meine Lösung bald als Antwort veröffentlichen. – Primoz990

9

entfernen Sie die Intent-Filter aus Ihrer Bibliothek Start Aktivität

<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> 

geändert zu

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

sehr gute Antwort. Ich erstelle eine AAR-Bibliothek mit Studio. Nach dem Erstellen der aar-lib-Datei, Importieren in ein anderes Projekt. während Haupt apk-Datei in Mobile installiert, zeigt es zwei apk im mobilen Bildschirm. Ich bin deinen Schritten gefolgt. Ich habe perfekte Leistung. – harikrishnan

Verwandte Themen