2016-01-20 4 views
1

Я разрабатываю некоторые sdk для некоторых функций для других приложений для Android. В одном библиотечном проекте моих зависимостей проекта sdk есть некоторые файлы .so lib. Когда я собирал проект sdk в пакет aar с помощью gradle, я обнаружил, что файлы .so не включены. Как собрать файлы .so lib в пакет aar?Как скомпилировать файлы .so под зависимостями в пакет .aar?

Вот build.gradle проекта SDk:

apply plugin: 'com.android.library' 

android { 
    signingConfigs { 
     debug { 
      keyAlias 'debug.keystore' 
      keyPassword 'ssdebug' 
      storeFile file('release-tools/debug.keystore') 
      storePassword 'ssdebug' 
     } 
     release { 
      keyAlias 'release.keystore' 
      keyPassword 'dddd' 
      storeFile file('../seedstore/release.keystore') 
      storePassword 'dddd' 
     } 
    } 
    compileSdkVersion 22 
    buildToolsVersion "22.0.1" 
    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 22 
     signingConfig signingConfigs.release 
    } 

    sourceSets { 
     main { 
      jniLibs.srcDir file('jni/') 
     } 
    } 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'),  'proguard-rules.pro' 
      signingConfig signingConfigs.release 
     } 
     debug { 
      signingConfig signingConfigs.debug 
      } 
    } 
    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 
    productFlavors { 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:22.2.1' 
    compile project(':alisdk') 
    compile project(':jdsdk') 
} 
+0

ли вы какие-либо решения? – Petrakeas

ответ

1

Я просто сделал то же самое после тысячи раз, пытаясь, наконец, пройти. -

  1. Я использовал студию android для создания модуля библиотеки Android.
  2. в этом модуле создайте файл интерфейса xxx.java с именем пакета, точно совпадающим с интерфейсом jni.
  3. /MODULENAME/SRC/основные/создать папку "jniLibs"
  4. скопировать все * .so файл с их платформы-имя в .../jniLibs это будет выглядеть следующим образом: -/jniLibs/ - >/armeabi/-> libxxx.so ->/x86/-> libxxx.so ...
  5. Нет необходимости менять строить scrips, построить библиотечный модуль
  6. файл .arr должен быть /moduleName/build/выходы/xxx.aar
  7. использовать инструмент экстрактора для распаковки окончательного xxx.aar, файлы * .so должны быть под. AAR/JNI/

// примечания: Я пытался добавить * .so файл в xxx.jar, добавьте его под LIBS модуля, добавьте его компилировать зависимость. Theaar упаковал его в libs. Однако, когда пользователь использует этот .aar, есть ошибка ссылки для вызова функции.

+0

По причине, выход aar проекта библиотеки содержит его .so-файлы. – xuehui

0

Другое простое решение, добавьте следующие операторы при модуле build.gradle:

buildTypes { 
    debug { 
     ndk { 
      abiFilters 'armeabi' 
     } 
    } 
    release { 
     ndk { 
      abiFilters 'armeabi' 
     } 
    } 
} 
Смежные вопросы