14

के साथ बाहरीनेटिव बिल्डिंग को सक्षम करना मैंने ndk-build से cmake बिल्ड सिस्टम पर स्विच किया है। लेकिन काम करने के लिए एपीके विभाजन समारोह नहीं मिल सकता है। foo.bar-armeabi-v7a-release-1.5.1.apk -एबीआई स्प्लिट

यहाँ मेरी एप्लिकेशन build.gradle फ़ाइल

निर्माण का परिणाम केवल एक फ़ाइल है।
मैं 86 एमुलेटर के लिए एक ऐप का निर्माण कर रहा हूँ, तो परिणाम foo.bar-x86-release-1.5.1.apk

buildscript { 
    repositories { 
     maven { url 'https://maven.fabric.io/public' } 
    } 
    dependencies { 
     classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 
apply plugin: 'com.android.application' 
apply plugin: 'io.fabric' 

repositories { 
    jcenter() 
    maven { url 'https://maven.fabric.io/public' } 
} 

android { 
    compileOptions.encoding = 'ISO-8859-1' 
    compileSdkVersion CompiledSdkVersion 
    buildToolsVersion BuildToolsVersion 

    defaultConfig { 
     applicationId "foo.bar" 
     minSdkVersion MinSdkVersion 
     targetSdkVersion TargetSdkVersion 
     versionCode VersionCode 
     versionName VersionName 
     vectorDrawables.useSupportLibrary = true 

     externalNativeBuild { 
      cmake { 
       cppFlags "-fexceptions", "-std=c++11" 
      } 
     } 

     ndk { 
      abiFilters "armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64" 
     } 
    } 

    signingConfigs { 
     release { 
      storeFile file("..\\release.keystore") 
     } 
    } 

    lintOptions { 
     checkReleaseBuilds false 
     abortOnError false 
    } 

    buildTypes { 
     release { 
      signingConfig signingConfigs.release 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' 
     } 
    } 

    splits { 
     abi { 
      enable true 
      reset() 
      include "armeabi", "armeabi-v7a", "arm64-v8a", "mips", "mips64", "x86", "x86_64" 
      universalApk true 
     } 
    } 

    project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9] 
    android.applicationVariants.all { variant -> 
     variant.outputs.each { output -> 
      output.versionCodeOverride = project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.FilterType.ABI), 0) * 1000000 + android.defaultConfig.versionCode 
      output.outputFile = new File(output.outputFile.parent, output.outputFile.name.replace(".apk", "-${variant.versionName}.apk")) 
     } 
    } 

    externalNativeBuild { 
     cmake { 
      path 'src/main/jni/CMakeLists.txt' 
     } 
    } 
} 

crashlytics { 
    enableNdk false // too many reports for third-party modules 
    androidNdkOut '.externalNativeBuild/cmake/release' 
    androidNdkLibsOut 'src/main/libs' 
} 

dependencies { 
    compile project(':common-sources') 
    compile project(':chess-board-library') 
    compile project(':number-picker') 

    compile files('libs/kxml2-2.3.0.jar') 
    compile files('libs/StartADLib-1.0.1.jar') 

    compile Dependencies.appCompat 
    compile Dependencies.cardView 
    compile Dependencies.firebaseAds 
    compile Dependencies.googleAnalytics 
    compile Dependencies.googlePlus 
    compile Dependencies.googleGames 

    compile(Dependencies.crashlytics) { 
     transitive = true 
    } 
    compile(Dependencies.crashlyticsNdk) { 
     transitive = true 
    } 
} 

apply plugin: 'com.google.gms.google-services' 

पी.एस. है यदि आप त्रुटि को पुन: उत्पन्न कर सकते हैं, तो कृपया my issue in Google's bug tracker पर वोट दें, लेकिन समाधान नहीं मिल रहा है।

उत्तर

2

ऐसा लगता है कि यह बिल्ड-टूल्स में एक बग है। एबीआई स्प्लिट पुरानी एनडीके-बिल्ड के साथ भी काम नहीं करता है।

शोध के दौरान मुझे एक अच्छा कामकाज मिला है - कमांड लाइन से लॉन्च बिल्ड करें।

gradlew assembleDebug 

या

gradlew assembleRelease 

कमान परियोजना के रूट निर्देशिका से शुरू होने की जरूरत है। this sudden comment के लिए

बहुत धन्यवाद :)

1

ऐसा लगता है कि आपकी समस्या आपके variants.outputs.each कोड में है। एक बात के लिए, getFilter केवल एक तर्क लेता है। (Output class कार्यान्वयन देखें।)

तुम क्यों com.android.build.OutputFile.ABI उपयोग नहीं करना चाहिए (बजाय OutputFile.FilterType.ABI का उपयोग करें) के लिए this post देखें। इस मुद्दे के लिए उस पोस्टर के लिए विभाजित एपीके की समान विफलता हुई।

+0

getFilter एक तर्क लेता है, यह सच है। कोड 'output.getFilter (com.android.build.OutputFile.ABI) कोड में केवल एक ही तर्क है। मैंने 'com.android.build.OutputFile.ABI' को 'com.android.build.OutputFile.FilterType.ABI' में बदलने की कोशिश की, लेकिन इससे मदद नहीं मिलती है। –

+0

क्षमा करें, आप सही हैं, मैंने कोड को गलत तरीके से पढ़ा है। आप यह देखने के लिए कोड को सरल बनाने का प्रयास कर सकते हैं कि इससे कोई फर्क पड़ता है या नहीं। – Hod

+0

मैंने प्रयोग करने की कोशिश की, लेकिन बिना किसी किस्मत के। वह कोड निश्चित रूप से बाहरी बिल्डिंग में अपग्रेड करने से पहले काम करता था, इसलिए मुझे विश्वास है। –

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