Soru Sürüm için Hata Ayıklama yapı tipini kullanmayan APK Splits'i kullanma


Başarıyla uygulandım APK Bölmeleri Böylece farklı ABI'ler için ayrı APK'ler oluşturulur.

Ancak, verimlilik için (ve hata ayıklamada Armeabi-v7a APK'larına ihtiyaç duymadığımdan), Debug yapılarını yalnızca armeabi-v7a APK'leri oluşturmak için sınırlamak istiyorum.

Bu nasıl yapılabilir?

Bir fikir şudur:

abi {
    enable true
    reset()
    include 'x86', 'armeabi-v7a', 'mips'
    universalApk false
}

Belki ayarlamak için bir yol var enable Build türüne göre mi?


21
2018-01-04 13:41


Menşei




Cevaplar:


@ Geralt_Encore'un cevabındaki bir varyasyonu deneyebilirsiniz; gradlew Komut. Benim durumumda, sadece APK dosyasının boyutunu azaltmak için APK bölme kullanıyorum ve bunu tamamen Android Studio'da yapmak istedim.

splits {
    abi {
      enable gradle.startParameter.taskNames.contains(":app:assembleRelease")
      reset()
      include 'x86', 'armeabi-v7a', 'mips'
      universalApk false
    }
}

Değiştirmeniz gerekebilir. :app tam olarak adlandırılmadıysa, uygulama modülünüzün adını içeren önek app.

Gördüğüm kadarıyla, Build | Android Studio'da İmzalı APK menü öğesi oluştur. assembleRelease Gradle hedefi.

Oluşturma aromalarını kullanarak bir APK oluşturuyorsanız veya sürüm oluşturma işleminiz adlandırılmamışsa unutmayın. release, değiştirmeniz gerekecek assembleRelease buna göre hedef, ör. assemblePaidRelease eğer yapısındaki lezzet ise paid.


15
2017-10-10 02:34



Bu, çok boyutlu lezzetleri kullanırken bile harika çalışır. - Jose Gómez
Bu konuyu muhtemelen geçen sene 6 kez ziyaret ettim. Saçma problemimi çözdün. Sonsuza dek teşekkür ederim. - aProperFox
Kısmi dizi eşleşmesi biraz daha temiz yapar taskNames.any { it.contains("assembleRelease") } - Kevin Brotcke


Sen ayarlayabilirsiniz enable komut satırı argümanına dayanarak. Ayrım sürümünü yalnızca sürüm sürümü için kullanmak istediğimde, ancak normal hata ayıklama işlemleri için değilken benzer bir sorunu çözdüm.

splits {
    abi {
        enable project.hasProperty('splitApks')
        reset()
        include 'x86', 'armeabi-v7a'
    }
}

Ve sonra ./gradlew -PsplitApks assembleProdRelease (prod benim durumumda bir lezzettir).


13
2017-09-13 13:03





Aslında, Bölmeleri etkinleştirmeniz gerekiyor, aksi takdirde APK'nız tüm ABI'lar için libs içerecek ve muhtemelen sizin istediğinizi değil.

Bu ihtiyaçlarınız için çalışmalıdır:

buildTypes {
    debug {
        splits {
            abi {
                enable true
                reset()
                include 'armeabi-v7a'
                universalApk false
            }
        }
        ...
    }
    release {
        splits {
            abi {
                enable true
                reset()
                include 'x86', 'armeabi-v7a', 'mips'
                universalApk false
            }
        }
        ...
    }
}

1
2018-01-04 13:52



Ne yazık ki yapı araçları tarafından tamamen göz ardı ediliyor. - Eugen Pechanec


Bu partiye biraz geç kaldım, ama farklı tatlar ve görev isimleriyle ilgili bir sorun yaşıyorum, bununla birlikte geldim:

ext.isRelease = { array ->
    array.each { name ->
        if (name.contains("Debug")) {
            return false
        }
    }
    return true
}

android {

...

    splits {
        abi {
            enable isRelease(gradle.startParameter.taskNames)
            reset()
            include "x86_64", "x86", "arm64-v8a", "armeabi-v7a"
            universalApk false
        }
    }

}

Bu sadece Jeff P'nin cevabının küçük bir güncellemesidir, ancak farklı tatlar ve konfigürasyonlar ile iyi çalışır.


0
2017-08-30 10:38