SORU
3 Ocak 2010, Pazar


Ambalaj dağıtılabilir bir Jar dosyası içinde Kaynak dosyalar Android

Kendi uygulamaları içinde kullanım için diğer geliştiricilere dağıtmak istediğim bazı yeniden Android kodu üzerinde çalışıyorum. Kodu eklemek mümkün olmak istiyorum bazı kaynak bağımlılıkları (düzenleri, xml ve png drawables) ve tek bir paket (Jar dosyası) içinde referans.

Bunu yapmanın en iyi yöntemi nedir? bu yüzden bu mümkün değildir, ve?

CEVAP
19 AĞUSTOS 2011, Cuma


Android otomatik olarak R sınıfı /res klasörü altında kaynak dosyaları ile yapar, final static R sınıfını kullanarak imkansızdır.

Güzel bir çözüm res dosyaları ile jar Bir dosya kullanmak buldum. Nasıl yaptığımı burada

  1. jar dosyası ihraç edilecek olan, kaynak kodukullanmayınR derleme zamanında final statik bir bellek adresi ile değiştirilecek, çünkü değişken. R, yerine kendi yöntemim aşağıda yaptım:

    public static int getResourceIdByName(String packageName, String className, String name) {
        Class r = null;
        int id = 0;
        try {
            r = Class.forName(packageName   ".R");
    
            Class[] classes = r.getClasses();
            Class desireClass = null;
    
            for (int i = 0; i < classes.length; i  ) {
                if (classes[i].getName().split("\\$")[1].equals(className)) {
                    desireClass = classes[i];
    
                    break;
                }
            }
    
            if (desireClass != null) {
                id = desireClass.getField(name).getInt(desireClass);
            }
    
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    
        return id;
    }
    

    Eğer bir düzen main.xml adında varsa, örneğin, yöntemini çağırarak:

    int id = getResourceIdByName(context.getPackageName(), "layout", "main");
    

    "Aradığınız yöntem . bunu alabilirsiniz" Metin1 olan bir dize varsa

    int id = getResourceIdByName(context.getPackageName(), "string", "text1");
    

    Bu yöntem, zamanında kaynak kimliğini verir. Yansıma API çalışma zamanında R durumu elde etmek için kullanır.

    Bu yöntemi kullanarak R değişken kullanarak önleyebilirsiniz.

  2. Hedef proje için res dosyaları kopyalamak.

  3. İnşa.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • gamingbits

    gamingbits

    2 Mayıs 2006
  • George McCarron

    George McCar

    29 Mayıs 2013