Android projelerinde kaynak oluşturma — RegisterGeneratedResFolder

Feb 12 2023
Android dünyasında kod ve kaynak oluşturma kavramları çok iyi bilinmektedir. Hançer, oda ve diğer kitaplıkların arkasındaki temel mekanik olan kod oluşturma çoğu projede kullanılır, peki ya kaynaklar? Örneğin, oluşturma işlemi sırasında google-hizmetleriniz.

Android dünyasında kod ve kaynak oluşturma kavramları çok iyi bilinmektedir. Hançer, oda ve diğer kitaplıkların arkasındaki temel mekanik olan kod oluşturma çoğu projede kullanılır, peki ya kaynaklar? Örneğin, derleme işlemi sırasında, Firebase kitaplıkları tarafından kullanılacak klasörde ayrıştırılır google-services.jsonve bir dosyaya dönüştürülür . Görünüşe göre, kendi ürettiğiniz kaynakları oluşturmak ve kullanmak, onlara sahip olduğunuzda onlarla ne yapacağınızı bildiğiniz sürece kolaydır. Görünüşe göre oldukça basit - gerekli dosyaları oluşturuyorsunuz ve onları oluşturulan klasöre yerleştiriyorsunuz. Ancak, sadece biraz daha fazla çalışma gerektirir.values.xmlgenerated

Dize dönüştürme için Gradle görevi

Bazı dizeleri içeren bir JSON dosyasını Android dizeleri XML dosyasına dönüştüren ve sonucu klasöre kaydeden basit bir Gradle görevi yapalım generated. Bu dizindeki diğer dosyalara bakılırsa, yol aşağıdaki gibi olmalıdır:

app/build/generated/res/${generator}/${sourceSet}/values/strings.xml

Bu yeterli olmalı, değil mi? Oluşturulan dosyadaki kaynakları kullanarak uygulamayı oluşturmaya çalışırsanız çalışmaz. Ne Android Studio ne de Gradle dosyanızı projenin bir parçası olarak tanıyamaz. Onlara bunu yaptırmanın bir yolu var.

RegisterGeneratedResFolderkurtarmak için

BaseVariantAndroid derleme sisteminin arayüzünde registerGeneratedResFoldertam olarak bunu yapan sihirli bir yöntem var .

FileCollectionKlasörümüze işaret eden ve onu oluşturan görevi belirten bir nesne gerektirir .

Yukarıdaki yorum bize, görevin derleme işlemine Gradle tarafından bağlanacağını söylüyor, yani tek yapmamız gereken klasörü kaydetmek. Burada, kendisi için kullanılan yolun, oluşturulan dosyayı gerçekten depolamak için kullanılan yoldan farklı olduğuna dikkat edilmelidir.

app/build/generated/res/${generator}/${sourceSet}

generateStringsFilegörev, tarihinden önce çalıştırılacak mergeResourcesve tüm yeni kaynakları sonraki oluşturma aşamaları için ve Android Studio'da kullanılabilir hale getirecektir. Gerekli dosyaları oluşturmak için manuel olarak da çalıştırabilirsiniz, böylece çalışırken "kaynak bulunamadı" hatası olmaz.

Sıradaki ne?

Yukarıdaki örnek basit durumlar için yeterli olsa da, önemli bir dezavantajı vardır - görev artımlı değildir. Başka bir deyişle, proje her inşa edildiğinde çalıştırılacak ve kaçınılmaz olarak inşa süresini artıracaktır. Ayrıca, girdi olarak kullanılması gereken dosyaları ve sonucun depolanacağı klasörü belirlemenin şu anda bir yolu yoktur. Görevin kendisini artımlı hale getirerek ilk sorunu çözebiliriz. İkincisi, görev girdileri eklenerek ve potansiyel olarak bir eklentiye sarılarak çözülür. Özel bir eklenti oluşturmak bu makalenin kapsamı dışındadır, ancak kodu GitHub depomda bulabilirsiniz .

Bu, Gradle ve Android derleme sistemine ilk derin dalışımdı ve umarım kendi zorluklarınızın üstesinden gelmenize yardımcı olur. Mutlu kodlama!