2013-11-04 37 views
8

我的目录结构如下:Android项目显示了一个重复的应用部署时

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

排球是一个导入库项目。一切都运行良好与应用程序,但是当它安装,2个不同的应用程序显示在Android应用程序列表中具有相同的名称和图标。他们中的一个正常工作,而另一个似乎是错误一些空活动和崩溃在执行时:

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 

我试图清理和重建,并从设备本身卸载,但无济于事。我想要做的就是摆脱这个额外的应用程序。

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> 

任何帮助将非常感激。

我的build.gradle文件

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') 
} 

我settings.gradle

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

你有库项目的源代码吗?图书馆项目可能在其清单中定义了自己的“启动器”。 –

+0

谢谢悉达思,你是对的。 – kylarsturn

回答

6

如果导入库有还包含一个发射器的活动,它会创建另一个应用程序。为了防止这种情况发生,请确保每个项目的AndroidManifest中没有其他活动具有以下标记。

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

谢谢。这是正确的...... –

+0

在我的情况下,我不得不进入'\ build \ intermediates \ exploded-aar'并编辑该库的AndroidManifest(其中有一个演示应用程序)。我删除了整个'intent-filter'标签,但保留了'activity'标签。那就是诀窍。 – toddmo

0

检查档案项目/ .idea/modules.xml并删除你不希望第二个模块出现。

该文件应该看起来像这样。

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