4

我有一個應用程序,這已經爲大型設備,即10英寸平板電腦和信息亭製作。我爲手機做了相同的設計,但看起來不太好,所以我想將移動設備移到材料設計,其餘設備(平板電腦&自助服務終端)將保持不變。如何管理不同設計的代碼以支持所有設備

我知道如何爲不同的設備製作不同的佈局,即正常,大型和X大型,但我擔心代碼。所以基本上下面是我的困惑....

  • 什麼是判斷我的應用程序在代碼上運行的設備,使我有,因爲我的正常的設備是運行在此基礎上的一些方法最好的方法遵循材料設計幷包含一些小部件,這些小部件不存在於平板電腦和信息亭的設計中,即RecyclerView(用於某種目的)?
  • 我尋覓了很多關於這個問題,來到了一個點有支持多個設備的2種方式 1>兩個單獨的APK,2>製作一個APK並檢查代碼來區分設備,但正如我在第一點中所說的那樣,我在正常設備中使用了材質設計,並且在小部件和佈局,碎片甚至導航方面完全改變了設計,那麼您會建議如何處理這個問題?
  • 如果我做了1個apk並且在代碼中進行了檢查,那麼我必須說我有大量的代碼和資源,並且在任何一種情況下(如果設備是正常的和大的)一些資源和類將永遠不會被使用,將使apk大小變大,那麼解決此問題的最佳方法是什麼?

我還通過計算器檢索,只有想出了接近我的問題,但鏈接的其餘部分是關於不同的佈局而不是代碼這兩個環節:

  1. Android app for phone and tablet: 1 or 2 apps?
  2. Creating different layout for android phone and tablet

我希望我在我的問題中清晰明確,請回​​答我的這些問題,以一些真實的原因和鏈接。

+0

我認爲你必須去相同的apk,不知道它是否在你的應用程序的需求是有效的。 –

+0

@AbdulSalamAli它可以做到,但就像我說過的那樣,未使用但仍然被調用的代碼會發生什麼。 – Umair

+0

您是否使用支持庫? –

回答

2

Multiple apks for a single app在Google Play中受支持。但是,除非您的應用程序非常大(大於100MB),否則建議您爲所有設備發佈一個apk。

因此,您需要在運行時檢查屏幕大小。你可以這樣做by categorydevice independent pixelseven in inches。然後,如您所說,您將相應地加載適當的佈局和片段。

即使您使用不同的apks,也可能會以類似的方式進行操作,因爲您可能想分享一些代碼。

在搖籃你會作出productFlavors爲每個APK,具有可變一起定義構建這樣的:

productFlavors { 
    bigtablet { 
     buildConfigField "String", "deviceType", "\"bigtable\"" 
    } 
    smalltablet { 
     buildConfigField "String", "deviceType", "\"smalltable\"" 
    } 
} 

然後在運行時你可以使用BuildConfig.deviceType帶動確切相同的邏輯屏幕大小確實在一個apk方法中。使用這種方法,Gradle會從每個apk中去掉所有未使用的代碼。

最後一個選項是爲每個apk創建完全不同的項目。將所有共享代碼推入庫。

您現在可以將它全部放在一個apk中,並在apk增長過大時切換到多個productFlavors。由於邏輯是相似的,所以不會太困難。希望這可以幫助。

+0

我不知道那種gradle提供那種選擇,謝謝。 – Umair

1

支持庫旨在最大限度地減少檢測應用運行的Android版本差異所需的工作量。例如,RecyclerView可在支持庫中找到。在這個和layout-xxx文件夾之間,您通常可以爲所有API級別和設備外觀因素構建一個APK。