2015-10-28 3 views
2

Я пытаюсь включить mupdf в качестве модуля библиотеки Android с предварительно скомпилированными .so-бинарниками в свой проект.Как настроить модуль библиотеки Android с productflavors и jni

У меня есть модуль приложения, который включает в себя мой библиотечный модуль.

dependencies { 
    compile project(':mupdf') 
} 

В моем модуле библиотеки mupdf у меня есть мои скомпилированные двоичные файлы.

mupdf 
- jniLibs 
    - arm64-v8a 
    libmupdf.so 
    - armeabi 
    libmupdf.so 
    - armeabi-v7a 
    libmupdf.so 
    - x86 
    libmupdf.so 
    - x86_64 
    libmupdf.so 

Мой build.gradle для проекта библиотеки mupdf:

apply plugin: 'com.android.library' 
apply plugin: 'kotlin-android' 

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     minSdkVersion 15 
     targetSdkVersion 23 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
    publishNonDefault true 
    productFlavors { 
     x86 { 
      ndk { 
       abiFilter "x86" 
      } 
     } 
     x64 { 
      ndk { 
       abiFilter "x86_64" 
      } 
     } 
     arm { 
      ndk { 
       abiFilter "armeabi" 
      } 
     } 
     arm_v7a { 
      ndk { 
       abiFilter "armeabi-v7a" 
      } 
     } 
     arm64_v8a { 
      ndk { 
       abiFilter "arm64-v8a" 
      } 
     } 
     fat 
    } 
} 
dependencies{ 
    compile project(':core') 
} 

Проблема заключается только добавить вкус продукта мое приложение не компилируется, потому что он не находит ни одного из Java файлы из модуля mupdf. Если я удалю часть вкуса продукта из файла градиента, который он компилирует. Но он выходит из строя во время выполнения, потому что он не может разрешить/загрузить библиотеку libmupdf.

+1

Вы должны создать «жирный» модуль для библиотеки со всеми ароматами в том же **. Aar ** файле и применять раздельные вкусы продукта в 'app/build.gradle' –

ответ

0

Действительно, мне нужно построить жирный модуль для библиотеки .aar и применить productflavors в своем приложении. я пропускал это в build.gradle моей библиотеки

sourceSets.main { 
    jni.srcDirs = [] // This prevents the auto generation of Android.mk 
    jniLibs.srcDir 'src/main/jni' 
} 

Без этого нет методов удалось решить.

0

Вы можете сделать это без побочных продуктов. Просто удалите их и вызовите System.loadLibrary("mupdf") при запуске/в какой-то момент перед использованием библиотеки. Этот вызов будет определять, какой родной lib использовать для текущей архитектуры устройств.

+0

Я хотел использовать ароматы для уменьшения размер apk. С каждым скомпилированным двоичным размером около 10 МБ это 50 Мбайт только скомпилированных двоичных файлов, из которых требуется только 10 МБ. – Diemex

+0

... но вы написали, что библиотека не может быть загружена. Вы сделали некоторый прогресс в этом? –

Смежные вопросы