許多清單屬性不能被指定爲對字符串的引用 - 它們必須被指定爲顯式字符串值。
解析清單的代碼位於:frameworks/base/core/java/android/content/pm/PackageParser.java。該類調用getNonConfigurationString()和getNonResourceString()(它們在:frameworks/base/core/java/android/content/res/TypedArray.java中實現)。
getNonConfigurationString()描述本身作爲:
getNonResourceString()描述本身作爲:
Retrieve the string value for an attribute, but only if that string comes from an immediate value in an XML file. That is, this does not allow references to string resources, string attributes, or conversions from other types. As such, this method will only return strings that come from attributes in an XML file.
清單屬性表示PackageParser不允許從資源或從不同的配置取如下所列。
這些屬性在com.android.internal.R.styleable中定義manifest.xml元素屬性名稱通常是正式名稱中最後一個'_'後的名稱部分。例如,manifest.xml中元素中的android:authority屬性是AndroidManifestProvider_authorities或com.android.internal.R.styleable.AndroidManifestProvider_authorities。 (以下屬性名稱列表中的數字是PackageParser版本4.1.1中相關代碼的行號。JAVA)讀取getNonConfigurationString
屬性:
917: AndroidManifest_versionName
922: AndroidManifest_sharedUserId
2057: AndroidManifestActivity_parentActivityName
2071: AndroidManifestActivity_permission
2079: AndroidManifestActivity_taskAffinity
2247: AndroidManifestActivityAlias_targetActivity
2330: AndroidManifestActivityAlias_permission
2336: AndroidManifestActivityAlias_parentActivityName
1672: AndroidManifestApplication_name
1683: AndroidManifestApplication_manageSpaceActivity
1697: AndroidManifestApplication_backupAgent
1795: AndroidManifestApplication_permission
1800: AndroidManifestApplication_taskAffinity
1815: AndroidManifestApplication_process
3005: AndroidManifestData_mimeType
3017: AndroidManifestData_scheme
3023: AndroidManifestData_host
3025: AndroidManifestData_port
3031: AndroidManifestData_path
3037: AndroidManifestData_pathPrefix
3043: AndroidManifestData_pathPattern
2527: AndroidManifestGrantUriPermission_path
2533: AndroidManifestGrantUriPermission_pathPrefix
2539: AndroidManifestGrantUriPermission_pathPattern
2579: AndroidManifestPathPermission_permission
2581: AndroidManifestPathPermission_readPermission
2586: AndroidManifestPathPermission_writePermission
2615: AndroidManifestPathPermission_path
2622: AndroidManifestPathPermission_pathPrefix
2629: AndroidManifestPathPermission_pathPattern
2434: AndroidManifestProvider_authorities
2441: AndroidManifestProvider_permission
2443: AndroidManifestProvider_readPermission
2454: AndroidManifestProvider_writePermission
2713: AndroidManifestService_permission
2832: AndroidManifestMetaData_name
1225: AndroidManifestOriginalPackage_name
1981: (parsePackageItemInfo -- I can't tell list of all names)
3258: (Component constructor args.nameres -- I can't tell list of all names)
屬性由getNonResourceString閱讀:
1806: AndroidManifestApplication_taskAffinity
1821: AndroidManifestApplication_process
1632: AndroidManifestInstrumentation_targetPackage
2891: AndroidManifestPackageVerifier_name
2894: AndroidManifestPackageVerifier_publicKey
1512: AndroidManifestPermission_permissionGroup
1200: AndroidManifestProtectedBroadcast_name
1927: AndroidManifestUsesLibrary_name
1054: AndroidManifestUsesFeature_name
1004: AndroidManifestUsesPermission_name
3308: (Component constructor args.processRes -- I can't tell list of all names)
所以,在manifest.xml文件屬性的很多必須被指定爲明確的字符串值(即在引號中)而不是在strings.xml中對字符串的引用。
我剛剛遇到了這個問題,我發現這工作得很好2.2+。當然,如果有人指出如何在2.1和之前的版本中使用它,那將是非常好的。 – dmon
我已經轉移到字符串,但也許你可以使用更新的API作爲構建目標,同時將android:minSdkVersion設置爲7或任何你的目標,類似於將appsToSd編譯成支持2.1的應用程序。 – HaMMeReD
我不認爲這會起作用,因爲它是安裝時抱怨的實際電話,編譯時不會失敗。我最終用Maven替換了「手動」字符串。它很糟糕,但它現在起作用了。我想我可以在2.1到達生命盡頭時將它取回:) – dmon