2013-11-01 2 views
0

Я все еще студент Android, и у меня есть приложение с более чем 100 МБ, поэтому мне нужно использовать файлы расширения.Android - Публикация/тестирование apk с файлами расширения - как это работает?

Я прочитал тысячи документов, но я очень смущен.

Есть много mp3-файлов, которые мне нужно сжать в этот «файл расширения», чтобы загрузить только код apk, а не все файлы приложения + mp3.

Я думаю, что если я сгенерирую файл «.obb» со всеми этими mp3-файлами, я бы перешел на 50 МБ, требуемый Google Play.

Я знаю, что этот файл .obb должен находиться в папке scard/Android/obb моего устройства.

В настоящее время мой код получить ВНУТР ресурс из файла mp3 манипулировать это так:

intMyResource = R.raw.name_of_my_music_file;

Но в настоящее время, как я сказал, путь к файлам «R.raw».

Мой вопрос: Как это лучший способ, чтобы заменить

intMyResource = R.raw.name_of_my_music_file;

к фактическому пути/имени, где находится мой файл .obb '?

Спасибо всем.

Mauro

ответ

0

Вы должны создать файл расширения с помощью этой команды зип:

zip -r -9 -n ".mp3" main-expansion-file.zip * 

Используйте параметр -n имеет решающее значение для не сжатия мультимедийных файлов, потому что, если мультимедийные файлы сжимаются вы не можете использовать его в вашем приложении для Android. Измените имя zip на 'main.VERSIONCODE.YOURPACKAGENAME.obb и скопируйте этот файл .bb в папке scard/Android/obb.

чтения файлов файлов расширения почтового индекса легко работать с Google ZipFile Library (доступен в pathAndroidSDK/статистов/Google/play_apk_expansion/zip_file)

Заменить R.raw.name_music_file при вызове этого метода:

public static AssetFileDescriptor getFileDescriptor(Context ctx, String path) { 
     AssetFileDescriptor descriptor = null; 
     try { 
      ZipResourceFile zip = APKExpansionSupport.getAPKExpansionZipFile(ctx, 1, -1); 
      descriptor = zip.getAssetFileDescriptor(path); 
     } catch (IOException e) { 
      Log.e("APKExpansionSupport", "ERROR: " + e.getMessage(), e); 
      e.printStackTrace(); 
     } 
     return descriptor; 
    } 

Пример кода для воспроизведения музыки из файла расширения с MediaPlayer:

AssetFileDescriptor descriptor = null; 
      try { 
       descriptor = getFileDescriptor(this, "name_music_file.mp3")); 
       MediaPlayer reproductor = new MediaPlayer(); 
       reproductor.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength()); 
       reproductor.setOnCompletionListener(this); 
       reproductor.prepare(); 
       reproductor.start(); 

      } catch (Exception e) { 
       Log.e("Play mp3", "ERROR: " + e.getMessage(), e); 
      } finally { 
       if (descriptor != null) 
        try{descriptor.close();} catch (IOException e) {} 
      } 

Надеюсь, это поможет вам!