2017-07-14 78 views
0

我正在使用Xamarin構建一個Android應用程序。 Visual Studio中允許您指定爲Android的目標和最低SDK水平,這似乎能夠正常工作,如反編譯的APK顯示了manifest標籤的AndroidManifest.xml這些屬性:Android如何知道應用程序指向哪個API?

platformBuildVersionCode="25" platformBuildVersionName="7.1.1" 

請不,這不是清單文件項目,而是清單文件捆綁在最終應用中。後者沒有uses-sdk的值。

但是,我似乎並沒有在運行時獲得預期的功能來定位此版本。具體而言,應用程序從不要求運行時權限(在API 23 IIRC介紹),並且當您嘗試撤銷對應用程序權限,你得到這個消息:

這個程序是專爲較舊版本的Android 。拒絕許可可能導致它不再按預期運行。

在API 23上運行的幾個設備上已經注意到了這一點,包括一個Pixel,它應該運行Android庫,並且在檢測SDK版本時沒有問題。

如果Android沒有使用清單值,Android如何決定我要定位哪個SDK版本?如何確保我的應用程序在運行時可以訪問API 23功能?

+1

這些並不是用來確定目標和最小SDK的屬性。 'targetSdk'和'minSdk'屬性說的是什麼? C.F. https://developer.android.com/guide/topics/manifest/uses-sdk-element.html –

+0

也許我應該澄清一下:這些不是預編譯AndroidManifest中的值,而是捆綁在APK中的AndroidManifest。我將清單與另一個按預期工作並找到類似屬性的應用進行了比較。 –

+0

正確,但'uses-sdk'元素仍然存在。理論上,它應該與你在文章中引用的兩個屬性相匹配 - 但是,由於你沒有看到預期的結果,我們必須考慮到可能存在一些差異。 –

回答

0

我相信這個信息是在APK的簽名編碼,作爲最小的SDK版本是給apksigner參數:

--min-sdk-version Lowest API Level on which this APK's signatures will be 
        verified. By default, the value from AndroidManifest.xml 
        is used. The higher the value, the stronger security 
        parameters are used when signing. 

我不是這個100%肯定,但它似乎像這是Android無需直接使用清單就可以知道的唯一方法,並且它可以解釋爲什麼清單值可能與運行時看到的值不匹配。

相關問題