İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

Midlet Suit'lerde Jar Dosya Boyutunu Daha Küçük Yapmanın Yöntemleri

Giriş

Cep telefonlarının hafızaları sınırlıdır. Bu yüzden kurulacak midlet suit'lerin az yer kaplaması istenir. Bu yüzden üretilen jar dosyasının olabildiğince küçük boyutlu olması gerekir. Bu yazıda jar dosya boyunun küçük olması için kullanılan teknolojilerden bahsedilecektir.

Jar dosyasının küçük olması şu nedenlerle istenmektedir.

jar dosyaları iki ana bölümden oluşur: Class dosyaları ve resource dosyaları. Önce class dosyalarının daha az yer kaplaması için ne yapılması gerektiğinden bahsedilecektir. Daha sonra resource dosyaları (özellikle resimler için) ne yapılması gerektiği hakkında bilgi verilecektir.

Daha Küçük Class Dosyaları

Gereksiz yere class yaratmayın.Her class extra bir boyut demektir. Gereksiz class yaratmamaya çalışın. Anonymous class'lar yaratmayın. Örneğin

setCommandListener( new CommandListener(){
	public void commandAction( Command c,Displayable d ){
	                  if( c == exitCommand ){
                  		exitMIDlet();
	                  }
                	}
});

ile CommandListener set ettiğinizde bir anonymous class dosyası yaratılmaktadır. Bu dosyanın adı ClassAdıı$1.class,ClassAdıı$2.class şeklinde gitmektedir. Bunun yerine midlet CommanListener'ı implements eder. ve setCommandListener(this) diyerek kendisini kaydedebilir.

Inner class'lar kullanmayın. Inner class dosyalarına gereksiz yere outer (kap class'ı) class'ının değişkenleri ve methodları da eklenmektedir. Inner class yapmak yerine ayrı bir class yaratmak daha doğru olur. Ayrı bir dosyaya koyulan class'a kurucusunda kap(outer) class'ı parametre olarak verilebilir. Böylece inner class outer class'ın public alanlarını kullanabilir.

class Outer
.....
	class Inner{
		....
	}
}

yerine

class Inner{	
	Outer outer;
	Inner(Outer  outer){
		this.outer=outer;
	}		....
}

Bir midlet içinde sadece bir kere implements ettiğiniz interface'ler yaratmayın. Bir interface birden fazla class'ın implements etmesi için kullanılmaktadır. Yaptığınız interface midlet suit'te sadece bir kere implements ediliyorsa interface'in bir anlamı olmaz.

Class'larınızı paketlere koymayın. Paketler gereksiz yere class isimlerin uzamasına neden olur. Çünkü bir class'ın ismi gerçekte paket.ClassAdı'dır. Örneğin Vector class'ı derlendiğinde her geçtiği yere java.util.Vector yazılmaktadır. Bu da jar dosyasının boyutunu artırır. Vector class'ı için yapacağınız bir şey yok ancak kendi class'larınızı pakete koymayarak class boyutunu daha küçültebilirsiniz.

Kütüphane kullanmayın. Kulladığınız bir kaç özellik için kütüphaneyi jar'a eklemeyin. Eklerseniz kütüphanenin kullanmadığınız class'ları, method'ları gereksiz yere jar dosyasının boyunu artırır. Bunun yerine kopyala-yapıştır yaparak istediğiniz yerini alabilirsiniz. Eğer bir daha önce yapmış olduğunuz bir class'ı kullanmayın. Çünkü o class ya daha önce yapmış olduğunuz programla ilgili bir class'tır ya da daha genel işlevler için geliştirilmiş bir class'tır. Sizin için ikisi de gereksiz method'lar ve field'ler demektir. Bunun yerine class'ı açın ve sadece kullanacağınız yerlerini alın.

Dizileri static olarak başlatmayın. Değerlerini daha sonra atayın. Örneğin

int[] test=new int[]{1,2,3}; 

yapmak yerine

int[] test;
test[0]=1;
test[1]=2,
test[2]=3;

şeklinde yapın. ilk örnekte değerler class dosyalarına yazılırlar. Bu yüzden boyutu artırırlar.. İkinci örnekte ise değerler runtime'da atanır.

Obfuscator kullanın. Kodları yazdıktan sonra Obfuscator kullanın. Obfuscator derlenmiş kod üzerinde boyut indirme işlemleri yapan programlara verilen isimdir. Örneğin uzun method ve değişken isimleri yerine küçük isimler verir. Genellikle %10 kadar boyut azaltırlar.

Midlet'ler Obfuscator'dan geçirilirken bazı method ve class isimlerinin değiştirmemesi gerekir. Obfuscator programının ayarlarından bu yapılabilir. Sun ONE Studio veya J2ME Wireless Toolkit gibi programlar RetroGuard denilen bir obfuscator ile çalışabilirler.

Resource'ların boyutunu azaltmak

Resource'lardaki PNG dosyaları optimize edilebilir. Optimize işlemleri ile dosyanın boyutu bir hayli azalmaktadır. Midlet'ler için şu anda PNG kullanılmaktadır. PNG optimezer programları çok fazla değildir. PaintShop Pro 7 gibi programlar PNG dosyasını kaydederken optime edebilmektedir. (Ancak bazı programlar optimize ederken transpanlığı kaldırabilir. Görüntüyü bozabilirler. )

Diğer bir teknik ise ayrı ayrı resim dosyalarını tek bir dosyada birleştirmektir. Böylece dosya sayısı azaltılır. Her dosya kendisi ile ilgili bilgiler tuttuğundan fazladan boyut artırmaktadır. Ayrıca tek bir dosya daha fazla sıkıştırılabilmektedir. Bir resmin istenilen bir dikdörtgeni çizilebilir. Bunun için önce Graphics class'ının setClip methodu ile ekranın bir dikdörtgen bölgesi ayarlanır. Büyük resim ise çizilmesi istenilen bölge clip edilmiş bölgeye denk gelecek şekilde çizilir. Clip bölgesinin dışındaki bölgelerde büyük resim gözükmez. Böylece istenilen bölge çizilmiş olur.

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır