android中.apk文件大小的问题?

时间:2011-06-02 10:20:56

标签: android

我有一个问题,因为大尺寸而没有。在应用程序中的图像,我的应用程序停止在模拟器上安装。它给出了一个错误报告“No Space Left”。 .apk文件的大小约为60MB。现在,我想问一下以下问题:

  • 在这种情况下可以做些什么,以便安装它并且不会出现此错误?

  • Android市场是否允许安装此大小的应用程序?

提前致谢

4 个答案:

答案 0 :(得分:3)

现在Android市场的限制是50MB。 您可以做的是在服务器上输出一些资源并按需下载它们。您可以向用户提示应用程序将下载大量数据,以便用户可以使用wifi来执行此操作。

答案 1 :(得分:1)

目前Android市场的限制是50 MB。所以你可以用一些图像压缩压缩图像,如果你使用过视频或音频,那么你也可以压缩,这样你就可以达到50 MB。许多压缩工具都可用。

答案 2 :(得分:1)

在谷歌IO的视频中,24点10分,6月份公布了市场上的大量优惠:

http://www.google.com/events/io/2011/sessions/android-market-for-developers.html

答案 3 :(得分:0)

Google Play目前要求您的APK文件不超过50MB。对于大多数应用程序而言,这为所有应用程序的代码和资产提供了充足的空间。但是,某些应用程序需要更多空间来存储高保真图形,媒体文件或其他大型资产。以前,如果您的应用程序超过50MB,则必须在用户打开应用程序时自己托管并下载其他资源。托管和提供额外的文件可能成本很高,而且用户体验往往不太理想。为了让您更轻松地完成此过程,让用户感到更愉快,Google Play允许您附加两个大型扩展文件,以补充您的APK。

以下是在Android中设置扩展文件所需的步骤:

  1. 首先,打开Android SDK Manager,展开Extras并下载:

    • Google Play许可库包
    • Google Play APK扩展程序包
  2. 在AndroidManifest.xml中声明以下权限

    <!-- Required to access Google Play Licensing -->  
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" />
    
    <!-- Required to download files from Google Play -->  
    <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" />  
    
  3. 整合图书馆

    • 将下载程序库的源代码从<sdk>/extras/google/play_apk_expansion/downloader_library/src复制到您的项目中。
    • 将来源从<sdk>/extras/google/play_licensing/library/src复制到您的项目中。
    • 将来源从<sdk>/extras/google/google_market_apk_expansion/zip_file/复制到您的项目中。
  4. 现在,创建一个名为expansion的新包,并在包中创建DownloaderService.java

    // DownloaderService.java
    public class DownloaderService extends com.google.android.vending.expansion.downloader.impl.DownloaderService {  
        public static final String BASE64_PUBLIC_KEY = "<<YOUR PUBLIC KEY HERE>>"; // TODO Add public key
        private static final byte[] SALT = new byte[]{1, 4, -1, -1, 14, 42, -79, -21, 13, 2, -8, -11, 62, 1, -10, -101, -19, 41, -12, 18}; // TODO Replace with random numbers of your choice
    
        @Override
        public String getPublicKey() {
            return BASE64_PUBLIC_KEY;
        }
    
        @Override
        public byte[] getSALT() {
            return SALT;
        }
    
        @Override
        public String getAlarmReceiverClassName() {
            return DownloaderServiceBroadcastReceiver.class.getName();
        }
    }
    
  5. 创建DownloaderServiceBroadcastReceiver.java扩展BoradcastReceiver,如果需要下载文件,将启动下载服务。

    // DownloaderServiceBroadcastReceiver.java
    public class DownloaderServiceBroadcastReceiver extends android.content.BroadcastReceiver {  
        @Override
        public void onReceive(Context context, Intent intent) {
            try {
                DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent, DownloaderService.class);
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
    
  6. 如果扩展文件不可用,请从您的活动开始下载

    Intent launchIntent = MainActivity.this.getIntent();
    Intent intentToLaunchThisActivityFromNotification = new Intent(MainActivity.this, MainActivity.this.getClass());
    intentToLaunchThisActivityFromNotification.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intentToLaunchThisActivityFromNotification.setAction(launchIntent.getAction());
    
    if (launchIntent.getCategories() != null) {
        for (String category : launchIntent.getCategories()) {
            intentToLaunchThisActivityFromNotification.addCategory(category);
        }
    }
    
    // Build PendingIntent used to open this activity from notification
    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 0, intentToLaunchThisActivityFromNotification, PendingIntent.FLAG_UPDATE_CURRENT);
    // Request to start the download
    int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this, pendingIntent, DownloaderService.class);
    
  7. 有关完整的详细信息和代码,请查看How to Set Up Android App to Support Expansion Files