Mp4parser запускается на устройстве из Android Studio, но сбой при установке APK вручную

Я использую mp4parser для объединения videos. Приложение отлично работает при работе с A.S. но если я установлю приложение вручную (передайте и запустите APK), или если я запустил его из TestFairy, приложение выйдет из строя.

Это началось, когда я обновил Target Sdk до Lollipop. Я добавил

`aspectjrt-1.7.3.jar` 
`isoparser-1.0-RC-27.jar` 

в директории libs в моем проекте.

Я также пробовал с ниже versions

`aspectjrt-1.8.5.jar` 
`isoparser-1.0-RC-37.jar`
`isoparser-1.0.6.jar`.

Не уверен, что это правильный путь, но он работает от Android Studio, а затем сбрасывается с TestFairy или Manual install.

Ошибка говорит

com.coremedia.iso.boxes.FileTypeBox отсутствует

но его там в isoparser jar.

Что мне не хватает, это проблема с версией?

Мое устройство работает Android 4.2.2 может ли это быть проблемой, если моя цель SDK равна Android 5.0

Исключение составляет:

Caused by: java.lang.ClassNotFoundException:com.coremedia.iso.boxes.FileTypeBox
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.coremedia.iso.boxes.FileTypeBox" on path: /data/app/com.myapp.appname-1.apk

Ответ 1

Извините, что после долгого разочарования я обнаружил, что gradle не упаковывал мои файлы lib в apk, это не имело никакого отношения к mp4Parser, в конечном итоге после обновления Android Studio, все SDK и gradle apk упакованы должным образом.

Ответ 2

Всякий раз, когда вы получаете исключение ClassNotFound, ваш загрузчик классов не может найти класс, который должен работать. Он не имеет ничего общего с парсером MP4, который не работает с 4.2.2, как было предложено выше.

Используете ли вы Gradle? Является ли класс связанным как библиотека в файле сборки gradle?

Попробуйте добавить это в зависимости от зависимостей {} в файле build.gradle приложения:

  compile fileTree(dir: 'libs', include: '*.jar')

Это будет включать все jar файлы в вашей папке libs в окончательной сборке.

Ответ 3

Добавьте эти 2 строки в proguard-rules.pro. Это сработало для меня.

-keep class com.coremedia.iso.boxes.** { *; }
-keep class com.googlecode.mp4parser.boxes.mp4.ESDescriptorBox { *; }

сделайте свой build.gradle для использования proguard-rules.pro следующим образом:

android {
 buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

Ответ 4

Попробуйте очистить код Target Annotations в вашем классе mp4parser