2013-11-25 3 views
6

Android Studio v 0.3.2에 Gradle로 빌드 한 프로젝트가 있습니다. 내 프로젝트는 두 개의 다른 모듈 (android 라이브러리)에 종속됩니다. 프로젝트 구조는 build.gradle 파일로 잘 정의되어 있습니다. 문제는 ... 안드로이드 장치에서 프로젝트를 실행할 때 장치에 3 개의 APK가 설치됩니다. 하나는 주 프로젝트 (유일한 것)이고 다른 두 가지는 가져온 모듈 (두 개는 설치하고 싶지 않습니다.)입니다. 어떻게해야합니까? 아니면 내가 뭘 잘못하고있어?Android Studio는 각 모듈에 APK를 설치합니다.

프로젝트 구조 : MyLibModule가 있어요

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

다른 프로젝트에서이 모듈이 필요하기 때문에 Main 프로젝트와 동일한 경로.

전체 프로젝트 빌드의 OK, 모든 종속성은 정상이지만 내 장치에 3 개의 APK가있는 이유는 무엇입니까?

답변

14

하루 종일이 문제로 어려움을 겪은 후, 저는이 이상한 행동의 원인을 찾아 냈습니다. 문제는 라이브러리 모듈의 매니페스트였다. 안드로이드 스튜디오로 전환하기 전에 Eclipse를 사용했습니다. 그리고 저는 도서관 프로젝트의 선언문에서 testActivity를 선언했습니다. 내 라이브러리 모듈의 매니페스트에서 모든 테스트 활동을 제거하면 문제가 해결됩니다. 이제 Android Studio는 MainProject apk 만 설치합니다.

일부 코드 : 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> 

에 변경 :

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

.... 그리고 MyOtherModule에 대해 동일합니다.

참고 : 비어있는 응용 프로그램 노드는 빌드 오류를 방지하기 위해 매니페스트에 있어야합니다.

+0

이거 내가 도와 줬어 !! – Skynet

+0

사실, 데모 활동이있는 응용 프로그램이있는 라이브러리가 있었으며 응용 프로그램의 두 가지 "버전"을 만들고있었습니다. –

1

라이브러리가 build.gradle 개의 파일에 라이브러리 대신 응용 프로그램으로 정의되어 있기 때문입니다.

apply plugin: 'android' 

와로 대체 :이 줄을 찾습니다 응용 프로그램에 적용하지 모든 것이 라이브러리 빌드 파일에 지정 될 수 있기 때문에

apply plugin: 'android-library' 

당신은뿐만 아니라 빌드 파일에 다른 조정해야 할 수 있습니다 . 자세한 내용은 http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Library-projects을 참조하십시오.

+0

로 변경 라이브러리의 발사 활동에서 의도 필터를 제거 빠른 답변을 주셔서 감사합니다. 나는 그 사실을 알아 차렸고 문서를 읽었습니다. 그러나 문제는 도서관의 명단에있었습니다. 곧 답변을 내 솔루션을 게시 할 것입니다. – Primoz990

9

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

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

아주 좋은 답변입니다. studio를 사용하여 aar 라이브러리를 만드는 중입니다. aar lib 파일을 만든 후 다른 프로젝트로 가져옵니다. 메인 APK 파일을 모바일에 설치하는 동안 모바일 화면에서 2 명의 APK를 보여줍니다. 나는 너의 계단을 따랐다. 나는 완벽한 출력을 얻었다. – harikrishnan