2016-03-29 27 views
4

Bir uygulamayı abi'ye özgü apks'lere ayırmaya çalışıyorum, ancak tüm aplerin sürüm sayıları aynı. Oyun deposuna yüklemek için farklı olmaları gerekiyor. Bir şey mi eksik?Android gradle apk splits, versionCode ayarlanıyor

splits { 
    abi { 
     enable true 
     reset() 
     include 'x86', 'armeabi', 'armeabi-v7a', 'arm64-v8a' 
     universalApk true 
    } 
} 
+0

: Birden fazla productFlavors ve benim çözüm şimdi şöyle görünür olması 'universalapk()' – David

cevap

3

Eğer hızlı bir google araması yapmış olsaydınız, tüm cevapları alırdınız. Her neyse, küresin nasıl görünmeli? Farklı mimari yapılara bir tanımlayıcı atamayı kaçırdınız.

android 
    { 

    def versionMajor = 1 
     def versionMinor = 0 
     def versionPatch = 0 
     def versionBuild = 0 

     defaultConfig { 
      applicationId "com.example.app" 
      minSdkVersion 15 
      targetSdkVersion 22 

      versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild 
      versionName "${versionMajor}.${versionMinor}.${versionPatch}" 
     } 

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

    // map for the version code 
     project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9] 

     android.applicationVariants.all { variant -> 
      // assign different version code for each output 
      variant.outputs.each { output -> 
       output.versionCodeOverride = 
         project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode 
      } 
     } 
    } 
+0

sayesinde. Bir süre önce böyle bir şey denedim ve işe yaramadı. ama bir şans bulduğumda kodunuzu verbatim deneyeceğim. – Daykm

3

Sanırım bu biraz daha temiz olabilir. Gerçi automatable% 100 olarak olmayabilir, ama o * 1000000 ve sözlük-arama hile sevmiyorum: Ben eachWithIndex kullanarak varyantları üzerinde döngü ediyorum

ext { 
    versionCodeBase = 30 // 1 higher than current highest versionCode in Play store 
} 

android { 
    splits { 
     density { 
      enable true // just enable them all 
     } 
     abi { 
      enable true 
      universalApk false 
     } 
    } 

    android.applicationVariants.all { variant -> 
     variant.outputs.eachWithIndex { output, outputIndex -> 
      output.versionCodeOverride = project.ext.versionCodeBase + outputIndex 
      println variant.buildType.name + ' - ' + output.getFilter(OutputFile.ABI) + ' - ' + output.getFilter(OutputFile.DENSITY) + ': ' + output.versionCodeOverride 
     } 
    } 
} 

Not.

Bu, bir kullanıcının aygıtında yoğunluk ve abi değişmeyeceği için çalışır. minSdkVersion'a göre ayrı apk dosyaları için izin verirseniz, bu komut dosyasında daha fazla çalışma gerekecektir. sunulan çözümler kullanırken hep hatalar var Nedense

debug - mips64 - null: 30 
debug - x86_64 - null: 31 
debug - x86 - null: 32 
debug - armeabi-v7a - null: 33 
debug - armeabi - null: 34 
debug - mips - null: 35 
debug - arm64-v8a - null: 36 
debug - mips64 - xxxhdpi: 37 
debug - x86_64 - xxxhdpi: 38 
debug - x86 - xxxhdpi: 39 
debug - armeabi-v7a - xxxhdpi: 40 
debug - armeabi - xxxhdpi: 41 
debug - mips - xxxhdpi: 42 
debug - arm64-v8a - xxxhdpi: 43 
debug - mips64 - mdpi: 44 
debug - x86_64 - mdpi: 45 
debug - x86 - mdpi: 46 
debug - armeabi-v7a - mdpi: 47 
debug - armeabi - mdpi: 48 
debug - mips - mdpi: 49 
debug - arm64-v8a - mdpi: 50 
debug - mips64 - ldpi: 51 
debug - x86_64 - ldpi: 52 
debug - x86 - ldpi: 53 
debug - armeabi-v7a - ldpi: 54 
debug - armeabi - ldpi: 55 
debug - mips - ldpi: 56 
debug - arm64-v8a - ldpi: 57 
debug - mips64 - xxhdpi: 58 
debug - x86_64 - xxhdpi: 59 
debug - x86 - xxhdpi: 60 
debug - armeabi-v7a - xxhdpi: 61 
debug - armeabi - xxhdpi: 62 
debug - mips - xxhdpi: 63 
debug - arm64-v8a - xxhdpi: 64 
debug - mips64 - hdpi: 65 
debug - x86_64 - hdpi: 66 
debug - x86 - hdpi: 67 
debug - armeabi-v7a - hdpi: 68 
debug - armeabi - hdpi: 69 
debug - mips - hdpi: 70 
debug - arm64-v8a - hdpi: 71 
debug - mips64 - xhdpi: 72 
debug - x86_64 - xhdpi: 73 
debug - x86 - xhdpi: 74 
debug - armeabi-v7a - xhdpi: 75 
debug - armeabi - xhdpi: 76 
debug - mips - xhdpi: 77 
debug - arm64-v8a - xhdpi: 78 
release - mips64 - null: 30 
release - x86_64 - null: 31 
release - x86 - null: 32 
release - armeabi-v7a - null: 33 
release - armeabi - null: 34 
release - mips - null: 35 
release - arm64-v8a - null: 36 
release - mips64 - xxxhdpi: 37 
release - x86_64 - xxxhdpi: 38 
release - x86 - xxxhdpi: 39 
release - armeabi-v7a - xxxhdpi: 40 
release - armeabi - xxxhdpi: 41 
release - mips - xxxhdpi: 42 
release - arm64-v8a - xxxhdpi: 43 
release - mips64 - mdpi: 44 
release - x86_64 - mdpi: 45 
release - x86 - mdpi: 46 
release - armeabi-v7a - mdpi: 47 
release - armeabi - mdpi: 48 
release - mips - mdpi: 49 
release - arm64-v8a - mdpi: 50 
release - mips64 - ldpi: 51 
release - x86_64 - ldpi: 52 
release - x86 - ldpi: 53 
release - armeabi-v7a - ldpi: 54 
release - armeabi - ldpi: 55 
release - mips - ldpi: 56 
release - arm64-v8a - ldpi: 57 
release - mips64 - xxhdpi: 58 
release - x86_64 - xxhdpi: 59 
release - x86 - xxhdpi: 60 
release - armeabi-v7a - xxhdpi: 61 
release - armeabi - xxhdpi: 62 
release - mips - xxhdpi: 63 
release - arm64-v8a - xxhdpi: 64 
release - mips64 - hdpi: 65 
release - x86_64 - hdpi: 66 
release - x86 - hdpi: 67 
release - armeabi-v7a - hdpi: 68 
release - armeabi - hdpi: 69 
release - mips - hdpi: 70 
release - arm64-v8a - hdpi: 71 
release - mips64 - xhdpi: 72 
release - x86_64 - xhdpi: 73 
release - x86 - xhdpi: 74 
release - armeabi-v7a - xhdpi: 75 
release - armeabi - xhdpi: 76 
release - mips - xhdpi: 77 
release - arm64-v8a - xhdpi: 78 
+0

Bunun ideal olmadığını unutmayın. Sürüm kodlarının düzgün bir şekilde sıralanması gerekiyor, xxxhdpi cihazları örneğin onlar için çalışacak en yüksek sürüm kodunu alacaktır. Xhdpi, xxxhdpi'den daha yüksek bir sürüm koduysa, xhdpi uygulamasını çalıştıracaktır. Diğer cevaptaki arama tablosunu kullanarak bunları sipariş etmek o kadar da kötü bir fikir değildir. – xorgate

2

:

Bırak sadece ayrıca senaryonun çıktı ekleyin. bulunamadı Gradle DSL yöntemi: Ben olsun son AS ve gradle sürümü ile bu kullanma

android { 
    flavorDimensions 'app', 'store' 
    productFlavors { 
     appFlavorOne { 
      dimension 'app' 
      applicationId "com.my.application.id" 
      versionCode 123 
      versionName '1.2.3' 
     } 
     appFlavorTwo { 
      dimension 'app' 
      applicationId "com.my.other.application.id" 
      versionCode 100 
      versionName '1.0.0' 
     } 
    } 
    splits { 
     abi { 
      enable true 
      reset() 
      include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86' 
      universalApk true 
     } 
    } 

    // APK Splits based on ABI, map for the version code. Uncomment for appFlavorTwo Builds! 
    project.ext.versionCodes = ['null':0, 'armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'x86': 4] 
    android.applicationVariants.all { variant -> 
     // assign different version code for each output 
     variant.outputs.each { output -> 
      output.versionCodeOverride = android.productFlavors.appFlavorOne.versionCode + project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) 
      output.versionNameOverride = android.productFlavors.appFlavorOne.versionName + ' (' + (project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) == 0 ? 'universal' : output.getFilter(com.android.build.OutputFile.ABI)) + ')' 
      println output.versionNameOverride + ' (' + output.versionCodeOverride + ')' 
     } 
    } 
}