0

I have developed a cross-platform app with cocos2d-x v3, the iOS version it worked very good, and when i ported it to android , i had size problem( apk >50 MB), so i decided to use Multiples apks , so i made 2 seperate apk's, with different version codes:

first apk support small, normal and large screen : i supposed that the screen size of this categorie it's lower or equals then 960*640.

second apk support xlarge screen: i supposed that the screen size of this categorie it's Greater then 960*640.

Please look at this image

The first AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mycompanyname.myappname" android:versionCode="1013002" android:versionName="1.0">

<uses-sdk android:minSdkVersion="10" />
<uses-feature android:glEsVersion="0x00020000" />

        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
        <uses-permission android:name="android.permission.CALL_PHONE" />   
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
         <uses-permission android:name="android.permission.RECEIVE_SMS" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
        <uses-permission android:name="android.permission.READ_SMS" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
         <uses-permission android:name="com.android.vending.BILLING" />
         <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <permission android:protectionLevel="signature" android:name="com.mycompanyname.myappname.permission.C2D_MESSAGE"  />
    <uses-permission android:name="com.mycompanyname.myappname.permission.C2D_MESSAGE" />

<application android:icon="@drawable/icon" android:label="@string/app_name">

      <!-- Tell NativeActivity the name of our .so -->
    <meta-data android:name="android.app.lib_name"
               android:value="cocos2dcpp" />
    <activity android:configChanges="orientation" android:label="@string/app_name" android:name="com.mycompanyname.myappname.AppActivity" android:screenOrientation="sensorPortait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">



        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <service android:name="com.parse.PushService" />
        <receiver android:name="com.parse.ParseBroadcastReceiver">
          <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
          </intent-filter>
        </receiver>
        <receiver android:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
          <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />


            <category android:name="com.mycompanyname.myappname" />
          </intent-filter>
        </receiver>

</application>

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

</manifest>

The second AndroidManifest.xml

<?xml version='1.0' encoding='UTF-8'?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mycompanyname.myappname" android:versionCode="1034001" android:versionName="1.0"> 

<uses-sdk android:minSdkVersion="10" />
<uses-feature android:glEsVersion="0x00020000" />

        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
        <uses-permission android:name="android.permission.CALL_PHONE" />   
        <uses-permission android:name="android.permission.GET_TASKS" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
         <uses-permission android:name="android.permission.RECEIVE_SMS" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
        <uses-permission android:name="android.permission.READ_SMS" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
         <uses-permission android:name="com.android.vending.BILLING" />
         <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <permission android:protectionLevel="signature" android:name="com.mycompanyname.myappname.permission.C2D_MESSAGE"  />
    <uses-permission android:name="com.mycompanyname.myappname.permission.C2D_MESSAGE" />

<application android:icon="@drawable/icon" android:label="@string/app_name">

      <!-- Tell NativeActivity the name of our .so -->
    <meta-data android:name="android.app.lib_name"
               android:value="cocos2dcpp" />
    <activity android:configChanges="orientation" android:label="@string/app_name" android:name="com.mycompanyname.myappname.AppActivity" android:screenOrientation="sensorPortait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">



        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
     <service android:name="com.parse.PushService" />
        <receiver android:name="com.parse.ParseBroadcastReceiver">
          <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
          </intent-filter>
        </receiver>
        <receiver android:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
          <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />


            <category android:name="com.mycompanyname.myappname" />
          </intent-filter>
        </receiver>

</application>

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



  </manifest>

Now, when users download the app from google play ,they all get the first apk regardless to the screen size of their Android phone . So my question are:

1- are you agree with my supposition ?

2- why users get only the first apk?

Please help me, my clients complain of this problem. Thank you for your time and consideration.

user3895008
  • 31
  • 1
  • 7

3 Answers3

0

I disagree with your approach, you should take a look on apk expansion ( http://developer.android.com/google/play/expansion-files.html ) or maybe download things dynmiclly from a server.

That being said I don't know what causes the APK to be this huge (don't forget an APK is a zip file and you can view its content) so my approches might not fit

Shai Levy
  • 715
  • 9
  • 25
0

Set

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

for first

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

forsecond

Still i am not too much sure

Koushik
  • 345
  • 1
  • 7
0

enter image description here

Did you follow this convention in creating your version codes?

G3M
  • 1,023
  • 8
  • 19