2016-01-15 14 views
6

Tüm mimariler için evrensel apk oluşturmaya çalışıyorum. Eğerkodlanma kütüphanede yolunu görebileceğiniz gibiAndroid gradle, farklı mimariler için native libs

apply plugin: 'com.android.library' 

// http://stackoverflow.com/questions/28485309/how-to-build-single-apk-with-andoid-ndk-and-gradle 


android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     ndk { 
      moduleName "ProxyResolver" // <-- This is the name of AndroidProxy native module 
      stl "gnustl_shared" 
      cFlags "-std=c++11" 
      abiFilters = ['armeabi'] 
      ldLibs (projectDir.absolutePath + "/libs/armeabi/libresolver.so") 
     } 
    } 

    sourceSets { 
     main { 
      jniLibs.srcDirs = ['libs'] 
     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
} 

:

-App 
    -appModule 
    -libraryModule 
     -libs 
      -armeabi 
       -lib.so 
     -src 
      -java 
      -jni 

İşte libraryModule benim gradle dosyasıdır: İşte benim proje yapıdır. Ve şimdi kol-v7 işlemcilerde çalışır. Ama bir lezzet eklemeden x86 desteğini eklemek gerekir

cevap

2

sanırım:

ndk { 

    moduleName "resolver" 
    stl "gnustl_shared" 
    cFlags "-std=c++11" 
    abiFilters = ['armeabi','arm-v7'] 
} 

Ve ancak uygulamanın yeteneklerine bilgileri (ekleyen

sourceSets { 
    main { 
     jniLibs.srcDirs = ['libs'] 
    } 
} 
+0

Yuor varyantını denedim, benim için çalışmıyor. libresolver.so harici bir kütüphanedir, bu yüzden modülle aynı adda olması gerektiğini düşünmüyorum. Modülüm var - kütüphane libresolver.so gerektiren bir ProxyResolver var – Vetalll

0

sizin defaultConfig yılında abiFilters ayarlama kaldırmak Yükleyici için yalnızca yararlıdır, yani Yükleyici, yüklemeye çalıştığınız aygıt uyumlu değilse) ve son'e hangi ikili dosyaların eklendiğini değiştirmez, ayrıca bakınız https://stackoverflow.com/a/39445685/1827156.

Neler yapmak istediğinizi tahmin etmek, farklı mimariler için farklı apk olmalıdır. Bu yaygın bir kullanım çizelgesidir, yani yapı boyutlarını azaltmak için. Uygulamanızın build.gradle'unda splits'u kullanarak bunu başarabilirsiniz. Lütfen https://developer.android.com/studio/build/configure-apk-splits.html'a bakın.

https://www.neotechsoftware.com/blog/native-libraries-part-i-common-pitfalls (Yazar değilim). kitaplıkları/aar s çalışma hakkında

Not: kütüphaneler (yerine apk ait aar) ile çalışırken Ancak, bir ana tuzak var. Imho, (otomatik olarak) farklı ABI-spesifik aar s oluşturamazsınız. Bunun yerine, tüm ABI'lar için ikili dosyaları içeren aar s oluşturursunuz. Bir android uygulamasına aar eklerken, yukarıda belirtildiği gibi build.gradle uygulamalarında splits belirtin.