설치 오류 : INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?


93

나는 안드로이드 장치에 존재 / 설치된 모든 응용 프로그램을 나열하는 작은 응용 프로그램을 개발 중입니다. 하지만 코드를 실행하는 동안 아래 오류가 발생합니다.

설치 오류 : INSTALL_PARSE_FAILED_MANIFEST_MALFORMED

누구든지이 오류를 해결하는 데 도움을 줄 수 있습니다.


1
이 오류 코드를 유발할 수있는 manifest.xml 파일에는 많은 오류가 있습니다. 아래 PackageParser.java 오류 목록 답변을 참조하세요.
Ribo 2014 년

1
대답을 받아들이지 않았나요?
shieldgenerator7

당신은 당신의 응답 얻을 것이다이 링크를 따라 stackoverflow.com/questions/16015033/...를
Sritam Jagadev

이 확인 링크 명확한 답변
Vishnuvathsan

당신은 낮은 문자로 시작해야 letters.Package 이름을 낮추기 위 편지에서 당신의 project.Change 패키지 이름의 다른 패키지와 클래스가있는 경우
와히드 악 타르를

답변:


79

이 오류에 대한 또 다른 이유가있을 수 있습니다. 속성

android:taskAffinity="string" 

다음과 같이 항상 점으로 시작해야합니다.

android:taskAffinity=".string" 

4
문제가 해결되었지만 문서에서이 정보를 어디에서 찾을 수 있습니까? 여기에 DOT에 대한 정보가 없습니다 : developer.android.com/guide/topics/manifest/…
Beto Caldas

68

활동 이름은 "."로 시작해야합니다. 매니페스트 파일에서.


Manifest에서 패키지와 함께 패키지 속성을 선언 했으므로 활동을 만들 때 "." 패키지 이름 앞에 "com.example.test.Activity_Name"또는 "
.Activity_Name

42

이 오류는 패키지 이름에 대문자가 있었기 때문에 발생했습니다.

Com.Example.packagename

내가 그것을 다음과 같이 바꾼 후

com.example.packagename

해결되었다


이것은 내 문제를 해결했습니다. 내 활동 클래스는 활동이라는 패키지 아래에 있었고이 오류가 나타나기 전에 매니페스트에 추가했습니다. 활동 패키지 이름을 활동으로 변경하면 해결되었습니다. 감사합니다
alicanbatur 2013

2
패키지 이름에 대문자를 사용할 수 있다고 생각하지만 패키지 이름의 첫 번째 문자는 대문자가 될 수 없습니다. 그래서하지 OK "myActivity"= OK하지만 "MyActivity"=
유전자

29

INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 오류 코드는 manifest.xml 파일에서 많은 수의 오류를 감지하면 PackageParser.java에 의해 리턴됩니다.

오류를 분리하려면 logcat을 확인하십시오 ( 'adb install foo.apk'명령을 수행 할 때). 내가 만난 문제에서 logcat에는 다음이 포함되었습니다.

W/ActivityManager(  360): No content provider found for permission revoke: file:///data/local/tmp/foo.apk
D/Finsky  (32707): [1] PackageVerificationReceiver.onReceive: Verification requested, id = 6
D/Finsky  (32707): [1] WorkerTask.onPreExecute: Verification Requested for id = 6,   data=file:///data/local/tmp/foo.apk flags=112 fromVerificationActivity=false
W/PackageParser(32707): /data/local/tmp/foo.apk (at Binary XML file line #214): <provider> does not include authorities attribute
D/Finsky  (32707): [716] PackageVerificationService.getPackageInfo: Cannot read archive for file:///data/local/tmp/foo.apk in request id=6
D/Finsky  (32707): [1] PackageVerificationReceiver.onReceive: Verification requested, id = 6
W/ActivityManager(  360): No content provider found for permission revoke: file:///data/local/tmp/foo.apk
I/PackageManager(  360): Copying native libraries to /data/app-lib/vmdl1205566381
W/PackageParser(  360): /data/app/vmdl1205566381.tmp (at Binary XML file line #214): <provider> does not include authorities attribute

위의 네 번째 줄에서 PackageParser가 manifest.xml 파일 "<provider>에 권한 속성이 포함되지 않음" 의 # 214 번째 줄에 불만을 표시하는 것을 볼 수 있습니다. . 해당 오류 코드를 반환하는 PackageParser의 모든 사례는 아래 목록을 참조하십시오. (PackageParser는 PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 오류 코드를 생성하는 유일한 클래스입니다)

필자의 경우 "<provider> does not include authority attribute"메시지는 parseApplication에 의해 호출 된 parseProvider 함수에서 PackagerParser.java의 2490 행에 의해 생성됩니다.


4.1.1 버전의 frameworks / base / core / java / android / content / pm / PackageParser.java에서 PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED는 이러한 메서드에서 이러한 행에서 참조됩니다. 소스 코드 행 번호 다음에 logcat에 인쇄 된 메시지 인 따옴표로 묶인 문자열이 오는 경우. 행 번호 다음에 해당 오류 코드를 리턴 한 코드 인 Java 표현식이 오는 경우 해당 함수를 조사하여 오류 메시지가 리턴 된 원인을 확인해야합니다. 몇 가지 경우에 오류 원인을 하나의 특정 메서드 호출로 격리 할 수 ​​없었습니다.

in parsePackage:
  536:  (only used in 'core apps' with no 'pkg')
  973:  "<manifest> has more than one <application>"
  1275: "Bad element under <manifest>: "      --if RIGID_PARSER

in parsePermissionGroup:
  1464: !parsePackageItemInfo(owner, perm.info, outError,
    "<permission-group>", sa,
    com.android.internal.R.styleable.AndroidManifestPermissionGroup_name,
    com.android.internal.R.styleable.AndroidManifestPermissionGroup_label,
    com.android.internal.R.styleable.AndroidManifestPermissionGroup_icon,
    com.android.internal.R.styleable.AndroidManifestPermissionGroup_logo)
  1482: !parseAllMetaData(res, parser, attrs, "<permission-group>", perm,
    outError)

in parsePermission:
  1506: !parsePackageItemInfo(owner, perm.info, outError,
    "<permission>", sa,
    com.android.internal.R.styleable.AndroidManifestPermission_name,
    com.android.internal.R.styleable.AndroidManifestPermission_label,
    com.android.internal.R.styleable.AndroidManifestPermission_icon,
    com.android.internal.R.styleable.AndroidManifestPermission_logo)
  1530: "<permission> does not specify protectionLevel"
  1541: "<permission>  protectionLevel specifies a flag but is not based on signature type"
  1548: !parseAllMetaData(res, parser, attrs, "<permission>", perm, outError)

in parsePersmissionTree:
  1572: !parsePackageItemInfo(owner, perm.info, outError,
    "<permission-tree>", sa,
    com.android.internal.R.styleable.AndroidManifestPermissionTree_name,
    com.android.internal.R.styleable.AndroidManifestPermissionTree_label,
    com.android.internal.R.styleable.AndroidManifestPermissionTree_icon,
    com.android.internal.R.styleable.AndroidManifestPermissionTree_logo)
  1585: "<permission-tree> name has less than three segments: "+perm.info.name
  1595: !parseAllMetaData(res, parser, attrs, "<permission-tree>", perm, outError)

in parseInstrumentation:
  1625: new Instrumentation(mParseInstrumentationArgs, new InstrumentationInfo())
  1648: "<instrumentation> does not specify targetPackage"
  1654: !parseAllMetaData(res, parser, attrs, "<instrumentation>", a, outError)

in parseApplication:
  1678: buildClassName(pkgName, name, outError) == null
  1851: (Set by various other functions)
  1869: parseActivity(owner, res, parser, attrs, flags, outError, false, hardwareAccelerated) == null
  1878: parseActivity(owner, res, parser, attrs, flags, outError, true, false) == null
  1887: parseService(owner, res, parser, attrs, flags, outError) == null
  1896: parseProvider(owner, res, parser, attrs, flags, outError) == null
    2484: "Heavy-weight applications can not have providers in main process"
    2890: "<provider> does not incude authorities attribute"
  1905: parseActivityAlias(owner, res, parser, attrs, flags, outError) == null
  1917: parseMetaData(res, parser, attrs, owner.mAppMetaData, outError) == null
  1969: "Bad element under <application>: "+tagName

문제의 원인을 파악하기 위해 logcat과 소스를 살펴보아야하는 것은 유감입니다.


1
특정 솔루션을 제공하는 것 외에도 일반적인 문제를 해결하는 방법을 이해하도록 도와 주셔서 감사합니다.
Vinay W

1
이 예외에는 여러 가지 이유가 있습니다. 이것은 가장 논리적 인 대답입니다.
Meghal Shah

1
감사합니다. 제 경우에는 IntentFilter.MalformedMimeTypeException제가 놓친 것이있었습니다 .
CzarMatt

이것은 지금까지 정답입니다. logcat은 얼마나 유용합니까?
Krishnabhadra

10

활동 이름 확인매니페스트 파일에서

또는 주요 활동 / 클래스의 패키지 이름

<activity android:name="MainActivity"></activity>

10

나는 같은 문제가 있지만 다음과 같은 프로세스를 호출 할 때 :

<service
    android:name="com.dexode.tama.AppService"
    android:process="screen" >
</service>

내가 변경할 때 :

<service
    android:name="com.dexode.tama.AppService"
    android:process=":screen" >
</service>

모든 것이 작동하기 시작합니다.


2
':'을 추가하여 코드의 의미를 변경했습니다. 두 번째 경우 응용 프로그램은 해당 응용 프로그램에서만 사용할 수있는 서비스에 대한 새 프로세스를 만듭니다. developer.android.com/guide/topics/manifest/... . 대신 'screen'이라는 단어 대신 전체 패키지 이름을 언급하여 오류를 수정할 수 있습니다.
shshnk

10

나는 시간 전에 같은 문제를 만났는데, 안드로이드 문서에서 그들은 ":"를 접두사로 사용하지 않으면 android:process소문자를 사용해야한다고 말했지만 결코 그렇게 말한 적이 없다면 프로세스와 같은 패키지 여야한다고 말했다. 이름처럼com.company.app.services.MyService


1
나도 같은 문제가 있었다. ':'를 사용하지 않을 때 패키지 이름을 포함해야한다고 언급 했어야합니다.
shshnk

8

같은 모든 이름 android:name, android:process패키지 이름의 형식이어야합니다 :로 시작 a..z, 다른 사람과 결합 .으로 끝나지 않는다, ....


@IgorG. 요점을 잃어 버려 죄송합니다 :-(하지만 새 SDK는 해당 필드를 제거했습니다 ( 여기 ).

1
감사합니다. 다음과 같은 방식으로 프로세스를 호출했습니다. android:process="com.my_pack.services.MyServiceProcess"(com.my_pack.services는 내 서비스가있는 패키지입니다) 그 후에 설치 오류가 표시되지 않습니다.
Maksim Dmitriev

8

내 문제는 내가 썼다는 것입니다 (알림-대 _).

<meta_data ... /> 
<!-- instead of -->
<meta-data ... />

활동에서. 이것이 문제의 원인 일 수도 있습니다.


3

같은 오류가 발생했습니다! 빈 권한 태그가있어서 문제가 발생했습니다!


당신의 대답에 좀 더 세부 사항을 추가하세요
kolossus

3

현지화를 추가 한 후에도 동일한 문제가 발생합니다.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.package"
    android:versionCode="10"
    android:versionName="@string/version_name" >

문자열이 @string/version_name실수로 새로 추가 된 지역화 된 문자열 파일 중 하나로 전달되었습니다 (새 파일에만 표시됨). 모든 현지화를 확인 @string/version_name하고 eng 로케일을 제외한 모든 파일에서 제거한 후 모든 것이 다시 작동했습니다.


3

이 오류를 진단하려면 Android 장치 로그를 읽으십시오. 문제를 설명하는 "W / PackageParser"줄을 예상합니다.


3
<activity/>

사전에 정의해야합니다.

<activity-alias/>

나는 이것을 다시 찬성 할 수 있으면 좋겠다. 이 답변이 도움이되었습니다 두 번째 시간
cottonBallPaws

3

아래 코드 때문에이 오류가 발생했습니다.

<intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="*" android:host="*" android:scheme="content" />
            </intent-filter>

이 오류 android:mimeType="*"android:mimeType="*/*"수정 하도록 변경했을 때 .


3

활동 생성 이름 폴더는 소문자 여야합니다. 활동 폴더 이름에는 대문자를 사용하지 마십시오 .... 항상 소문자를 사용하는 것이 좋습니다.


3

이것은 여러 가지 이유가있을 수 있지만 저에게는 소문자 이름으로 패키지 이름을 변경하여 해결되었습니다 (패키지 이름은 Activities, 활동으로 해결됨).


2

매니페스트에서 multidex를 사용하는 경우 값 또는 리소스를 추가해야합니다. 처럼..

<meta-data android:name="android.support.multidex.MultiDexApplication"
android:value="@string/yourValue" />

또는

<meta-data android:name="android.support.multidex.MultiDexApplication"
android:resource="@string/yourValue" />

그런 다음 프로젝트를 정리하고 앱을 다시 설치하십시오.


2

제 경우에는 다음과 같은 속성을 사용하여 아이콘을 언급했습니다.

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="?attr/ic_notify" />

드로어 블 대신 :

<meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_notify" />

이 속성을 여러 곳에서 사용하고 있지만 매니페스트에서 작동하지 않는 것 같습니다.


정확히 제 경우입니다. 사용자의 선호도에 따라 다른 색상이 필요합니다. 슬프게도, 안드로이드 : 자원 ... 속성을 허용하지 않습니다
Elyakim 레위에게

2

새 애플리케이션을 만들고 Android Pie 를 대상으로합니다 . 모든 것이 잘 작동하고 있었고 최근에 내 응용 프로그램이 Android Naught 이하 버전 의 Android OS에 설치되지 않는다는 것을 알았습니다 .

설치하는 동안 실패 메시지가 나타납니다.

INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 메시지와 함께 설치에 실패했습니다.

그래서 내가 만든 수정 사항은 다음과 같으며 모두 AndroidManifest.xml파일에서만 수행해야 합니다.

활동, 서비스, 수신자 및 모든

Instead of:
    android:name=".service.MyService"

Used: 
    android:name="com.complete.appicationID.service.MyService"

매니페스트 권한

Instead of: 
     <uses-permission android:name="{applicationId}.permission.MAPS_RECEIVE" />
     <permission
         android:name="{applicationId}.permission.MAPS_RECEIVE"
         android:protectionLevel="signature" />

Used:
     <uses-permission android:name="com.complete.appicationID.permission.MAPS_RECEIVE" />
     <permission
         android:name="com.complete.appicationID.permission.MAPS_RECEIVE"
         android:protectionLevel="signature" />

저 버전 장치에서도 작동하도록 수행해야하는 모든 변경 사항입니다.


Xamarin android에서 활동 이름 특성이 수정되었습니다. 그것은 나를위한 일입니다
Sovary


1

형식이 잘못되었지만 IDE에서 강조 표시되지 않은 다른 파일이있을 수 있습니다 (예 : 매니페스트가 레이블과 같은 항목에 대해 참조 할 수있는 res / values ​​/ strings).


1

제 경우 원인은 <activity-alias>에 android : name 속성이 없었습니다. 기존 클래스의 이름을 지정해서는 안되지만 <activity-alias>에는 필수입니다. 재미있는 점은 프로젝트가 문제없이 컴파일된다는 것입니다.


1

내 문제는 다음과 같습니다.

다음과 같은 방식으로 권한을 지정했는데 작동하지 않았습니다.

<permission android:name="android.permission.INTERNET">
    <meta-data />
</permission>
<permission android:name="android.permission.ACCESS_NETWORK_STATE">
    <meta-data />
</permission>

다음과 같이 변경하면 잘 작동했습니다.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

1

아래 줄이 있었기 때문에이 오류가 발생했습니다.

android:protectionLevel="developer"

내가 그것을 변경 한 후

android:protectionLevel="signature"

문제가 해결되었습니다


1

이 문제로 고생 한 후 매니페스트에서 문자열 리소스 값 (일명 @ string /)으로 사용되는 모든 값이 현지화의 strings.xml의 일부가 될 수 없음을 발견했습니다. . 예 : @ string / app_name을 사용하는 매니페스트 파일 인 경우 string / app_name의 정의는 현지화를 위해 제공하는 대체 string.xml 파일이 아닌 기본값 /strings.xml에서만 허용됩니다. 도움이 되었기를 바랍니다 ..


1

나는 똑같은 오류가 있었다. 내 패키지 / 응용 프로그램 이름에 대문자가 없었고 프로젝트 및 기타 솔루션을 정리해도 도움이되지 않았습니다. 결국 나는 새 프로젝트를 만들고 내 물건을 새로운 한 단계 씩 복사하고 문제가 나타나는지 확인하십시오. 결국 나는 중복없이 훌륭하고 오류가없는 프로젝트를 가졌습니다. 때때로이 오류의 원인을 찾기가 어렵 기 때문에 다른 접근 방식을 취하는 것이 더 쉽습니다.

나는 이것이 누군가에게 도움이되기를 바랍니다!


1

Application 클래스를 잘못된 패키지에 넣었을 때이 오류가 발생했습니다!


1

태그의 구문 규칙을 따르지 않았을 것입니다. 예를 들면 :

<meta-data
      android:name="preloaded_fonts"/>

이 태그는 불완전하며이 오류를 발생시킵니다.

앱 매니페스트 개요


1

사용 android:resource<meta-data>대신 android:src하고android:srcCompat


1

여기에 답변하는 것이 늦었 음을 알고 있지만 이상한 실수를하므로 누군가에게 도움이된다면 내 답변을 게시하십시오. 실수로 메인 런처 활동을 별칭으로 추가했습니다.

   <activity-alias
        android:name=".activities.SplashActivity"
        android:targetActivity=".activities.SplashActivity">

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

그래서 내 앱을 실행하려고 할 때 오류가 발생합니다.

APK 설치 중 오류

실패 [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]

활동 등록에서 "-alias"단어 만 제거하면 앱이 성공적으로 실행됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.