2016-01-15 11 views
6

के लिए देशी libs मैं सभी आर्किटेक्चर के लिए सार्वभौमिक apk का निर्माण करने की कोशिश कर रहा हूँ।एंड्रॉयड Gradle, विभिन्न आर्किटेक्चर

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

यहाँ libraryModule के लिए मेरे Gradle फ़ाइल है::

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']) 
} 

आप पुस्तकालय के लिए पथ hardcoded है देख सकते हैं यहाँ मेरी परियोजना संरचना है। और अभी यह हाथ-v7 प्रोसेसर पर काम करता है। लेकिन मैं एक स्वाद जोड़ने के बिना 86 के समर्थन जोड़ने की जरूरत है

उत्तर

2

मुझे लगता है:

ndk { 

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

और हटाने

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

मैंने आपके संस्करण की कोशिश की, यह मेरे लिए काम नहीं करता है। libresolver.so एक बाहरी पुस्तकालय है, इसलिए मुझे नहीं लगता कि यह मॉड्यूल के समान नाम के साथ होना चाहिए। ProxyResolver कि इतने पुस्तकालय libresolver.so की आवश्यकता है - मैं मॉड्यूल है – Vetalll

0

सेट करने से आपके defaultConfig में abiFilters केवल एप्लिकेशन की क्षमताओं के बारे में जानकारी (कहते हैं जब डिवाइस आप स्थापित करने का प्रयास यानी इंस्टालर त्रुटि देता ही है, इंस्टालर के लिए उपयोगी संगत नहीं है करने के लिए) और परिवर्तन नहीं करता है जो बाइनरी अंतिममें जुड़ जाते हैं, https://stackoverflow.com/a/39445685/1827156 भी देखें।

मुझे लगता है कि तुम क्या करना चाहते विभिन्न आर्किटेक्चर के लिए अलग apk है। यह एक सामान्य उपयोग है, यानी निर्माण आकार को कम करने के लिए। आप अपने ऐप के build.gradle में splits का उपयोग करके इसे पूरा कर सकते हैं। कृपया https://developer.android.com/studio/build/configure-apk-splits.html देखें।

मैं अत्यधिक https://www.neotechsoftware.com/blog/native-libraries-part-i-common-pitfalls की सलाह देते हैं (मैं लेखक नहीं कर रहा हूँ)। साथ पुस्तकालयों/aar रों काम कर रहा पर

नोट: हालांकि, वहाँ एक प्रमुख ख़तरा है जब आप पुस्तकालयों (aarapk के बजाय) के साथ काम करते हैं। इम्हो, आप अलग-अलग एबीआई-विशिष्ट aar एस नहीं बना सकते हैं (स्वचालित रूप से)। इसके बजाय, आप aar एस बनाते हैं जिसमें सभी एबीआई के लिए बाइनरी होती है। एक एंड्रॉइड ऐप में aar जोड़ते समय, ऊपर दिए गए अनुसार build.gradle ऐप्स में splits निर्दिष्ट करें।

संबंधित मुद्दे