2013-11-04 1 views
8

Meine Verzeichnisstruktur zeigt sich wie folgt dar:Android-Projekt mit einem doppelten App beim Entfalten

Project 
--libraries 
----volley 
--myapplication 
----libs 
------android-support-v4.jar 
------etc.jar 

Volley ist ein importiertes Bibliotheksprojekt. Alles läuft gut mit der Anwendung, aber wenn es installiert ist, erscheinen 2 verschiedene Anwendungen in der Android-App-Liste mit dem gleichen Namen und Symbol. Einer von ihnen funktioniert wie erwartet, und der andere scheint mit dem Fehler etwas leer Aktivität und stürzt bei der Ausführung zu sein:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.myapplication/com.libs.volley.ACTIVITY_ENTRY_NAME}: java.lang.ClassNotFoundException: Didn't find class "com.libs.volley.ACTIVITY_ENTRY_NAME" on path: /data/app/com.example.myapplication-1.apk 

Ich habe versucht, Reinigung und Wiederaufbau habe und von dem Gerät selbst, ohne Erfolg zu deinstallieren. Alles, was ich tun möchte, ist, diese zusätzliche App loszuwerden.

AndroidManifest.xml

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

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="18" /> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 
<uses-feature android:name="android.hardware.camera.front" android:required="false" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/app_icon" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.myapplication.MainActivity" 
     android:label="@string/app_name" > 


     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
    android:name=".AppConfigActivity" 
     android:windowSoftInputMode="stateHidden" 
     android:label="Application configuration"/> 
    <activity 
     android:name=".BoothSelectActivity" 
     android:label="Booth Select"/> 
    <activity 
     android:name=".InactiveActivity" 
     android:label="Inactive Activity"/> 
    <activity 
     android:name=".QRReaderActivity" 
     android:windowSoftInputMode="stateHidden" 
     android:label="QR Reader Activity"/> 
    <activity 
     android:name=".ProductsActivity" 
     android:windowSoftInputMode="stateHidden" 
     android:label="Products Activity"/> 

</application> 

Jede Hilfe sehr geschätzt würde.

Meine build.gradle Datei

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:0.6.+' 
    } 
} 
apply plugin: 'android' 

repositories { 
    mavenCentral() 
} 

android { 
    compileSdkVersion 18 
    buildToolsVersion "18.1.1" 

    defaultConfig { 
     minSdkVersion 7 
     targetSdkVersion 18 
    } 
} 

dependencies { 
    compile 'com.android.support:appcompat-v7:+' 
    compile files('libs/commons-codec-1.4.jar') 
    compile files('libs/android-async-http-1.4.3.jar') 
    compile files('libs/gson-2.2.4.jar') 
    compile files('libs/zbar.jar') 
    compile project(':libraries:volley') 
} 

task copyNativeLibs(type: Copy) { 
    from(new File('src/main/libs')) { include '**' } 
    into new File(buildDir, 'native-libs') 
} 

tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs } 

clean.dependsOn 'cleanCopyNativeLibs' 

tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> 
    pkgTask.jniDir new File(buildDir, 'native-libs') 
} 

Mein settings.gradle

include ':myapplicationname', ':libraries:volley' 
+4

Haben Sie den Quellcode für das Bibliotheksprojekt? Es ist wahrscheinlich, dass das Bibliotheksprojekt einen eigenen "Launcher" in seinem Manifest definiert hat. –

+0

Danke Siddharth, du warst richtig. – kylarsturn

Antwort

6

Wenn eine importierte Bibliothek eine Aktivität hat, die auch einen Starter enthält, wird es eine andere Anwendung erstellen. Um dies zu verhindern, stellen Sie sicher, dass keine anderen Aktivitäten die folgenden Markierungen im AndroidManifest jedes Projekts aufweisen.

<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
+0

danke. das ist richtig ... –

+0

In meinem Fall musste ich in '\ build \ intermediates \ exploded-aar' gehen und das AndroidManifest dieser Bibliothek bearbeiten (die eine Demo-App hatte). Ich habe den ganzen 'intent-filter' Tag entfernt, aber das' activity' Tag behalten. Das hat den Trick gemacht. – toddmo

0

Überprüfen Sie auf der Datei Projekt/.idea/modules.xml und entfernen Sie das zweite Modul, das Sie wollen nicht erscheinen.

Die Datei sollte so aussehen.

<?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="ProjectModuleManager"> <modules> <module fileurl="file://$PROJECT_DIR$/module2.iml" filepath="$PROJECT_DIR$/module2.iml" /> <module fileurl="file://$PROJECT_DIR$/module1.iml" filepath="$PROJECT_DIR$/module1.iml" /> </modules> </component> </project>

Verwandte Themen