在寫Android 測試程序的時候,安裝Apk突然遇到 Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] 這個錯誤。
這個錯誤的意思是AndroidManifest.xml這個文件有問題。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ryan.testproject">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Main2Activity"
android:process="activity2" />
<activity android:name=".Main3Activity"/>
</application>
</manifest>
我的 AndroidManifest.xml 就這點代碼惋增,當(dāng)時一臉懵逼梨撞。錯誤信息也沒說我的Manifest哪行出錯了,首先我懷疑是依賴庫中的Manifest文件和我的Manifest在合并的時候發(fā)生了沖突纺弊。
為了驗證我的想法我把所有的第三方依賴都去掉了,只留系統(tǒng)的依賴骡男。然而依然無法安裝淆游。當(dāng)時一度懷疑是AS的問題。
后來發(fā)現(xiàn)我的Main2Activity這個Activity設(shè)置了 android:process="activity2"
這個屬性隔盛。改了一下process的名字android:process=".activity2
加了一個.
,于是順利安裝成功了犹菱!
原來導(dǎo)致這個錯誤的原因是process命名不規(guī)范!K笨弧腊脱!
截取谷歌官方對 android:process 這個屬性的解釋
image.png
應(yīng)在其中運行 Activity 的進程的名稱。正常情況下来屠,應(yīng)用的所有組件都在為應(yīng)用創(chuàng)建的默認(rèn)進程名稱內(nèi)運行虑椎,您無需使用該屬性。 但在必要時俱笛,您可以使用該屬性替換默認(rèn)進程名稱捆姜,以便讓應(yīng)用組件散布到多個進程中。 如果為該屬性分配的名稱以冒號(“:”)開頭迎膜,則會在需要時創(chuàng)建應(yīng)用專用的新進程泥技,并且 Activity 會在該進程中運行。如果進程名稱以小寫字符開頭磕仅,Activity 將在該名稱的全局進程中運行珊豹,前提是它擁有相應(yīng)的權(quán)限迁筛。這可以讓不同應(yīng)用中的組件共享一個進程晾捏,從而減少資源占用。
這個解釋并沒有說我原來的命名是不規(guī)范的R躺恕=俸恪贩幻!坑啊~轿腺!
最后還是總結(jié)一下android:process的命名規(guī)則吧
- 不能以數(shù)字開頭;
- 冒號(“:”)只能用于開頭丛楚;
- 不以冒號(“:”)開頭必須含有"." ;
- 不能含有特殊字符族壳。
大概就在這樣了吧。
當(dāng)然趣些,發(fā)生[INSTALL_PARSE_FAILED_MANIFEST_MALFORMED] 這個錯誤也可能是其他原因引起的仿荆,所以需要大家靜下心來查找原因,總會找到的坏平。