12

Tôi gặp sự cố khi tải tệp kê khai của mình tương thích với nhiều điện thoại mới hơn khi tôi tải lên tệp APK mới và tôi không hiểu tại sao. Tôi đang thử nghiệm nó trên một thương hiệu mới HTC Evo V, nhưng vì lý do gì, thiết bị đó sẽ không hiển thị trong danh sách tương thích.Tối ưu hóa tệp kê khai Android cho số lượng thiết bị được hỗ trợ lớn nhất

Tôi đang biên dịch API 17 với hỗ trợ tối thiểu là API 10, do đó phải bao gồm phần lớn điện thoại.

Những gì tôi đã cố gắng:

  • Removed tất cả các quyền; không thay đổi
  • Đã cố gắng tạo WIFI không bắt buộc; không thay đổi
  • Đã xóa installLocation để xem liệu nó có tạo sự khác biệt hay không; không thay đổi
  • Thậm chí đã thử thêm hỗ trợ màn hình nhỏ để xem nó có hiển thị hay không; không thay đổi

Những gì tôi đã đọc:

file manifest của tôi:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="com.somecompany.appname" 
     android:versionCode="10" 
     android:versionName="1.0" 
     android:installLocation="preferExternal"> 

    <!-- For expansion pack downloads --> 
    <!-- Required to access Android Market Licensing --> 
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" /> 
    <!-- Required to download files from Android Market --> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <!-- Required to keep CPU alive while downloading files (NOT to keep screen awake) --> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <!-- Required to poll the state of the network connection and respond to changes --> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <!-- Required to check whether Wi-Fi is enabled --> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <!-- Required to read and write the expansion files on shared storage --> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17"/> 
    <supports-screens android:normalScreens="true"/> 
    <supports-screens android:largeScreens="true"/> 
    <supports-screens android:xlargeScreens="true"/> 

    <compatible-screens> 
     <screen android:screenSize="normal" android:screenDensity="mdpi" /> 
     <screen android:screenSize="large" android:screenDensity="hdpi" /> 
     <screen android:screenSize="xlarge" android:screenDensity="xhdpi" /> 
    </compatible-screens>      
    <application android:icon="@drawable/icon" android:label="@string/app_name" android:allowBackup="false"> 
     <activity android:name="somecompany.appname.SplashScreen" 
        android:label="@string/app_name" 
        android:theme="@android:style/Theme.NoTitleBar" 
        android:screenOrientation="portrait"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name="somecompany.appname.SoundAndCallActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar"/> 
     <activity android:name="somecompany.appname.MainScreenActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar"/> 
     <activity android:name="somecompany.appname.SettingsActivity" android:screenOrientation="portrait" android:theme="@style/Theme.Transparent"/> 
    </application> 
</manifest> 

Trả lời

20

Tôi muốn đăng câu hỏi này và cũng câu trả lời vì tôi thấy điều này rất bực bội để tìm ra lúc đầu. Tuy nhiên, điều này đã thay đổi số lượng thiết bị được hỗ trợ của tôi từ 499 đến 1968. Hy vọng rằng điều này sẽ giúp nhiều người hơn trong tương lai vì nó có vẻ là một chủ đề không rõ ràng.

Kỹ thuật 1: Lý do khiến nhiều thiết bị hơn không hiển thị là do Google lọc mạnh hơn khi bạn sử dụng thẻ <compatible-screens>. Trong trường hợp của tôi, tôi không có đủ các kích thước màn hình khác nhau và sự kết hợp mật độ, do đó, nó lọc ra tất cả những cái tôi bỏ ra (xem Kỹ thuật 2 bên dưới).

Nếu bạn CHỈ sử dụng các thẻ <supports-screens />, khi đó bạn sẽ cho phép nhiều ứng dụng tìm thấy ứng dụng của mình hơn. Vì vậy, làm cho bạn một ưu và loại bỏ tất cả các thẻ khác trong khối <compatible-screens>.

Bạn có thể sử dụng một shortform như thế này:

<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:anyDensity="true"></supports-screens> 

Phần trích dẫn từ original article:

Google Play lọc ứng dụng nếu kích thước màn hình điện thoại và mật độ không phù hợp với bất kỳ màn hình cấu hình (được tuyên bố bởi phần tử "màn hình" ) trong phần tử "màn hình tương thích".

Thận trọng: Thông thường, bạn không nên sử dụng phần tử tệp kê khai này.Sử dụng yếu tố này có thể làm giảm đáng kể cơ sở người dùng tiềm năng cho ứng dụng của bạn, bằng cách loại trừ tất cả các kết hợp kích thước màn hình và mật độ mà bạn chưa liệt kê. Thay vào đó, bạn nên sử dụng phần tử kê khai "hỗ trợ màn hình" (được mô tả ở trên trong bảng 1) để bật chế độ tương thích màn hình cho cấu hình màn hình mà bạn có không được tính với tài nguyên thay thế.

Kỹ thuật 2: Một kỹ thuật mà bạn có thể sử dụng là để có nhiều cụ với thẻ <compatible-screens> của bạn và thoát khỏi <supports-screens /> thẻ. Bạn có thể căn cứ những quyết định đó về yêu cầu ứng dụng của mình và cũng trên các số latest device distribution numbers.

Trong ví dụ bên dưới, tôi không muốn hỗ trợ màn hình nhỏ hoặc mật độ ldpi của màn hình bình thường, lớn hoặc xlarge, vì vậy tôi đã loại bỏ chúng.

<compatible-screens> 
    <!-- all normal size screens --> 
    <screen android:screenSize="normal" android:screenDensity="mdpi" /> 
    <screen android:screenSize="normal" android:screenDensity="hdpi" /> 
    <screen android:screenSize="normal" android:screenDensity="xhdpi" /> 
    <!-- all large size screens --> 
    <screen android:screenSize="large" android:screenDensity="mdpi" /> 
    <screen android:screenSize="large" android:screenDensity="hdpi" /> 
    <screen android:screenSize="large" android:screenDensity="xhdpi" /> 
    <!-- all xlarge size screens --> 
    <screen android:screenSize="xlarge" android:screenDensity="mdpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="hdpi" /> 
    <screen android:screenSize="xlarge" android:screenDensity="xhdpi" /> 
</compatible-screens> 
+1

Dường như hữu ích Thx –

+1

@Arash Tôi hiện đang chuyển đổi sang thế giới của Android, vì vậy hy vọng điều này sẽ giúp một vài người khác. – iwasrobbed

+1

Cảm ơn lời khuyên, nó thực sự hữu ích –

Các vấn đề liên quan