My Mobile Notes

Some useful tips & tricks for Android & iOS Programming, and Mobile Life

  • Contact

    Mustafa Ferhan Akman, Android Evangelist, Android & iOS Developer, Author, Blogger, Speaker

  • Subscribe

Unutulan Android-Keystore (.keystore .jks) dosyasının şifresini bulmak

Posted by Mustafa Ferhan Akman on August 16th, 2014

Geçtiğimiz günlerde geliştirdiğim bir uygulamanın KeyStore şifresini kaybettim:) ilk defa başıma böyle birşey geldi. Aslında tam bir kaybetme sayılmaz, elimde keystore dosyamın şifresi var fakat yanlış:)

Şifre ile ilgili farklı kombinasyonlar denemiş olsam da, bir türlü bulamadım. Android Studio’da, apk sign ederken 1 kez master şifre belirledikten sonra her defasında tekrar tekrar şifre girmenize gerek kalmıyor. Android Studio ilgili keystore şifresini kendi bünyesinde saklıyor. Fakat benim durumunda, ilgili master şifrem elimde olmasına rağmen, Android Studio’yu update ettikten sonra keystore şifremi hatırlamamaya başlamasıydı. Doğal olarak ben de keystore şifemi elle girmeye çalıştım ve elimdeki şifremin hatalı olduğunu anladım.

Screen Shot 2014-08-16 at 13.47.53

Kombinasyonlar sonucunda şifremi elde edemediğim için ümitlerim tükenirken Musa Ülker arkadaşımında yardımıyla şu yöntemleri izleyerek şifreme geri kavuştum.

Eğer master şifrenizi hatırlıyorsanız aşağıdaki adımları izleyerek şifrenizi öğrenebilirsiniz;

  1. Eğer Android Studio’da 1 kez bile şifrenizi store etmişsseniz, Android Studio tüm şifreleri security.xml dosyası içerisinde saklıyor
  2. Bu dosyanın yeri
    • MacOS için: ~/Library/Preferences/AndroidStudioPreview/options/security.xml
    • Linux için: ~/.AndroidStudioPreview/config/security.xml
    • Windows için: <User home>\.AndroidStudioPreview\config\security.xml
  3. security.xml dosyasına eriştikten sonra şifremizi öğrenebilmek için açık kaynak kodlu intellij-decrypt isimli kütüphaneyi kullanacağız. Tüm repoyu indirmek istemiyorsanız yalnızca intellij-decrypt.jar dosyasını indirmeniz yeterli.
  4. Terminal'i, açarak aşağıdaki komutu çalıştırıyoruz.
    java -classpath .:intellij-decrypt.jar:lib/commons-codec-1.9.jar org.corneliudascalu.intellijdecrypt.Main -f security.xml -p &lt;MASTERŞİFRESİ&gt;
  5. Ve işte şifrelerimiz

sifreler

 

Tags: , , , , , ,
Posted in Android | No Comments »

Bilkent ve UKÜ’deydim

Posted by Mustafa Ferhan Akman on August 16th, 2014

Geçtiğimiz günlerde Bilkent Üniversitesi’nin düzenlediği Mobil günler ve kendi mezun olduğum; Uluslararası Kıbrıs Üniversitesi’nin düzenlemiş olduğu Mobil Trendler eetkinliklerinde Android’de gelir etme üzerine yaşadığım tecrübelerimi ve yaklaşık 3 ay süren bir kullanıcı&gelir testimin sonuçlarını paylaştım.

uku-seminer uku2

 

 

Posted in Android, General, iOS | No Comments »

Google’ın düzenlemiş olduğu Grow your App Business etkinliğindeydik

Posted by Mustafa Ferhan Akman on August 16th, 2014

Sefa ile birlikte Google’ın İstanbul’daki Grow your App Business with Google etkinliğindeydik. Genel olarak güzel bir etkinlikti, özellikle Google Analytics ve AppEngine ile ilgili sunumlar etkileyiciydi.

google1

Posted in Android, General | No Comments »

Türkiye için bir OS versiyon istatistiği

Posted by Mustafa Ferhan Akman on June 29th, 2014

17bin aktif kullanıcısı olan ve sadece Türk vatandaşlarını hedef alan bir uygulamamın OS bazında dağılımı;

(kullanıcıların %80′i Türkiye’den)

Türkiye Android version dağılımı

Tags: , ,
Posted in Android | No Comments »

BozukYol.com Yayında!

Posted by Mustafa Ferhan Akman on June 12th, 2014

BozukYol, 2 yıl önce sadece bir fikirdi.

Musa ve Süleyman ile birlikte geliştirdiğimiz BozukYol, bir kaç hafta önce Turkcell app markette yayınlandı. Uygulama Maratonu yarışması kapsamında dereceye girdi. Şimdi ise yeni özellikler ile Google Play‘de!

BozukYol’dan kısaca bahsedecek olursam, yollarda giderken cheap cialis online karşılaştığımız yol bozukluklarını otomatik olarak track ediyor, algoritmamız sayesinde onun bir yol bozukluğu olup olmadığını anlıyor ve farklı kullanıcılardan gelen dataları harmanladıktan sonra gerçek bir yol bozukluğu olup olmadığını anlayabiliyor. Sonrasında ise, twitter üzerinden ilgili belediyelere bildirip, düzeltilene kadar takipçisi oluyor.

Android uygulamasına ait bazı ekran görüntüleri;

device-2014-05-12-161324device-2014-05-12-161052   device-2014-06-12-163206

Yolda giderken, real-time analiz ekranını inceleyebiliyorsunuz.

device-2014-06-12-163607

 

Twitter http://tgwb.org/cheap-generic-cialis/ hesabınızla login olup, çeşitli badge kazanmaya başlayabiliyorsunuz. Çok yakın bir zamanda “gerçek ödüller” kazanabileceksiniz.

device-2014-06-12-163434

 

BozukYol’un gelişmiş bir çok özelliği bulunuyor.

  • Tamamen arkaplanda  çalışmak,
  • Yolda bozuk yol tespiti yaparken, çağrı gelmesi durumunda tespiti durdumak,
  • Uygulamayı arkaplanda unutmanız durumunda otomatik olarak uygulamayı duraklatmak,
  • İnternetsiz olarak yolları track edebilmek ve kablosuz ağa bağlandığınızda otomatik olarak senkronize etmek

gibi.

device-2014-06-12-163353

 

Turkcell’in düzenlediği ve dereceye giren uygulamaların basına tanıtıldığı toplantıdan bir kare;

buyuk

 

Uygulamamızın canlı demosuna ait bir video:

 

Yakın zamanda gelir modelimiz ile ilgili kurguladıklarımızı hayata geçirmeye ve kullanıcılarımıza ödüller/hediyeler vermeye başlıyor olacağız.

Uygulamayı indirmek için;

https://play.google.com/store/apps/details?id=com.bozukyol

Türkiye’nin bozuk yol haritası için;

Screen Shot 2014-06-13 at 10.16.26

http://www.bozukyol.com

 

Posted in Android | Comments Off

SourceTree aracını herhangi bir Git reposu ile kullanmak

Posted by Mustafa Ferhan Akman on March 19th, 2014

SourceTree mac üzerinde kullandığım en güzel git ve mercurial aracı. Command-line kullanmaya devam etmek istiyorsanız yazının geri kalanını okumak zorunda değilsiniz. Fakat ben basit işlerimi UI’dan halletmeyi seviyorum.

SourceTree resmi olarak bitbucket, github, stash’ı destekliyor. Fakat viagra prescription online mesela GitLab’ı eklemek istediğinizde çeşitli gıcıklıklar yapabiliyor. Bitbucket ve github repolarında olduğu gibi direkt olarak eklenemiyor  ama aşağıdaki adımlarla problem çözülüyor.

1- gitlab’da mevcut olan git repo’yu command-line’dan çekiyoruz.

2- SourTree’de    Add Repo -> Add Working Copy -> projemizin git klasörünü seçiyoruz

3- Eklediğimiz repo’yu açıp,

Settings -> Edit Config File  dedikten gitlab’daki user’ımızı eklememiz gerekiyor. (bazı durumlarda)

[user]
name = Mustafa Ferhan Akman
email = mustafa.ferhan.akman@eba.gov.tr

gibi. Bu kadar.

Posted in General | Comments Off

Android DebugLog [GitHub]

Posted by Mustafa Ferhan Akman on March 5th, 2014

Yakın zamanda MFCalendarView isimli kütüphaneyi github’da paylaştığımı aktarmıştım. Şimdi, yaklaşık 2 yıldır kullandığım, çok işime yarayan ve geçmişte yaşadığım tecrübelere dayanarak hazırladığım bir kütüphane var: DebugLog.

Neden DebugLog?

DebugLog kütüphanesinin 2 temel amacı var;

  1. Uygulama geliştirilirken DebugLog aracılığı ile yazdığımız tüm logları App release edildiğimde otomatik olarak kapatmak.
  2. DDMS’e otomatik olarak daha anlaşılabilir log kayıtları düşmek.

DebugLog ile uygulama geliştirirken herhangi bir log düşmek için sadece mesajınızı yazmanız yeterli;

 DebugLog.e(message);

Mesela, aşağıdaki gibi myFunc() isimli fonksiyonun içerisinde DebugLog’u kullanırsanız,

void myFunc(){
   DebugLog.e(simple log from myFunc());
}

DebugLog aşağıdaki gibi, Tag kısmına log’un yazıldğı class ismini, log mesajının başına parantez içerisinde fonksiyonun ismini otomatik olarak yazar.

DebugLog output

Veya örnek olarak başka bir fonksiyonun içerisindeyken;

DebugLog output

android.util.Log‘un desteklediği tüm formatlarda DebugLog’u kullanabilirsiniz:

DebugLog.e(log);
DebugLog.i(i log);
DebugLog.d(d log);
DebugLog.v(v log);
DebugLog.w(w log);
DebugLog.wtf(wtf log);

Kaynak kodlarına ve örnek uygulamaya https://github.com/MustafaFerhan/DebugLog adresinden ulaşabilirsiniz.

Tags: , , , , , ,
Posted in Android | No Comments »

MFCalendarView – Android Calendar

Posted by Mustafa Ferhan Akman on February 21st, 2014

MFCalendarView isimli ilk opensource çalışmamı GitHub’daki hesabımdan paylaştım.

Neden?

  • Android’in native CalendarView’inda multiple selection özelliği olmaması. Ve event base here herhangi bir takvim için eksik kalması
  • Hali hazırda yayınlanmış Square’in takvim uygulaması vardı. Fakat kütüphanenin performans probleminin  olması, kütüphaneyi UI’da create ederken en baştan “şu tarihler arasında takvimi oluştur” denme zorunluluğu (yani  ocak-şubat-mart ayını görüntüle derseniz, sonradan diğer ayları görüntüleyemiyorsunuz. Çok fazla ay gösteririseniz performans problemi oluyor)
  • Yine Square’in sadece yukarı-aşağı scroll’u destekliyor olması geliştirdiğim uygulamada UX açısından kötü bir deneyime sebep olması
  • Başka open source ve paralı kütüphanelerden bu tarz ihtiyaçlarımı karşılayamamam.

gibi sebeplerden dolayı MFCalendarView ortaya çıktı.

MFCalendarView

Kullanımı oldukça basit;

Layout XMML’inize ekleyip;

<br /><br />
&amp;lt;com.mustafaferhan.MFCalendarView<br /><br />
    android:id=&amp;quot;@+id/mFCalendarView&amp;quot;<br /><br />
    android:layout_width=&amp;quot;wrap_content&amp;quot;<br /><br />
    android:layout_height=&amp;quot;wrap_content&amp;quot; &amp;gt;<br /><br />
&amp;lt;/com.mustafaferhan.MFCalendarView&amp;gt;<br /><br />

Takvimde herhangi event atayacağımız zaman;

<br /><br />
 ArrayList&amp;lt;String&amp;gt; eventDays = new ArrayList&amp;lt;String&amp;gt;();<br /><br />
 eventDays.add(&amp;quot;2014-02-25&amp;quot;);<br /><br />
 eventDays.add(Util.getCurrentDate());</p><br />
<p> mf.setEvents(eventDays);<br /><br />

MFCalendarView’in kendi listenerları ile tarih değiştiğinde ya da görüntülenen ay değiştiğinde listenerlardan ilgili bilgiyi okuyabilirsiniz.

<br /><br />
mf = (MFCalendarView) findViewById(R.id.mFCalendarView);<br /><br />
mf.setOnCalendarViewListener(new onMFCalendarViewListener() {</p><br />
<p>    @Override<br /><br />
        public void onDisplayedMonthChanged(int month, int year, String monthStr) {<br /><br />
                //codes<br /><br />
            }</p><br />
<p>            @Override<br /><br />
            public void onDateChanged(String date) {<br /><br />
                //codes<br /><br />
            }<br /><br />
    });</p><br />
<p>

Ekran görüntüsünde nokta olarak gözüken event belirteçleri aslında birer icondur. dot.png dosyasını değiştirerek orada herhangi bir belirteç kullanabilirsiniz.

Posted in Android | Comments Off

Android SharedPreferences yazma hızı problemi

Posted by Mustafa Ferhan Akman on February 12th, 2014

SharedPreferences’e bir datayı yazmaya çalışıyor ve arkasından hemen okumaya çalışırsanız, Android o sıra IO yaptığı için  yazdığınız kayıt hiç yokmuş gibi davranıyor.

Aslına daha öncede SharedPreferences ile benzer bir problemle karşılaşmıştım fakat sanırım problemin IO’dan kaynaklandığını çözememiştim.

Mesela, bu gece karşılaştığım bir durumda; fragment’imde kullanıcının bir edittext’e acheter cialis france mail adresini yazıyor ve ben bunu SharedPreferences’da saklıyorum. aşağıdaki gibi;

prefs.edit().putString(KEY_EMAIL, toStr(etEmail)).commit(); 

Ve hemen ardından o fragment’ı popBackStack() edip, yeni açılan fragmentta generic bir method’dan kaydedilmiş olan maili okuyorum. Kodu debugger ile debug ettiğimde, SharedPreferences üzerinden ilgili mail adresi geliyor. Yani herhangi bir problem gözükmüyor. Fakat app’i run edip gerçekten bir kullanıcı gibi kullanmaya çalıştığımda SharedPreferences bana cevap veremiyor :)

Kısa yoldan çözüm olarak, kullanıcının uygulamada donma hissini anlamayacağı kadar ama android işletim sisteminin IO yapacak fırsatı bulabileceği zaman tanıdım.

<br /><br />
try{</p><br />
<p>  Thread.sleep(100);<br /><br />
  getActivity().getFragmentManager().popBackStack();</p><br />
<p>}catch(InterruptedException e){ /* code */ }<br /><br />

Ben gece gece kafadan 100 milisaniye verdim. Kalite açısından daha düşük Android cihazları hesaba katarak belki biraz daha uzun zaman vermekte fayda olabilir.

Posted in Android | Comments Off

Android Fragment Overlap

Posted by Mustafa Ferhan Akman on January 27th, 2014

Bir uygulamamda yalnızca 1 activity olmasına rağmen 30′a yakın fragment var (:

Hal böyle olunca, bazı zamanlar fragmentlar iç içe, bazen de replace edilerek üzerine açmam gerekti. Fakat bir durumda, fazlaca fragment açıp, geri tuşu ile geriye gittiğimde daha önce açılmış 2 fragment’ın üst üste bindiğini, karıştığını gördüm.

Araştırdığımda aşağıda örnekte olduğu gibi başkalarıda bu tarz problemlerle karışılaşmışlar fakat bu fragmentların karışma problemi farklı farklı durumlarda ortaya çıktığı için benim problemimin kaynağına benzer bir çözüm bulamadım.

fragmentoverlap

Benim case’imde,

bir fragment’ı ilk başta aşağıdaki gibi çağırıp,

addNewFragment( new SearchFragment(), &amp;quot;sf&amp;quot;, false);

sonra, app’in ilerleyen bölümlerinde bir tanesinde aynı fragment’ı,

addNewFragment( new SearchFragment(), &amp;quot;sf&amp;quot;, true); 

şeklinde çağırmam oluyordu.

&lt;br /&gt;<br />
	void addNewFragment(Fragment fragment, String tag, boolean backstack){&lt;/p&gt;<br />
&lt;p&gt;		ft = getFragmentManager().beginTransaction();&lt;br /&gt;<br />
		ft.setTransition(FragmentTransaction.TRANSIT_NONE);&lt;br /&gt;<br />
		ft.replace(R.id.fragment_placeholder, fragment, tag );&lt;br /&gt;<br />
		if (backstack) {&lt;br /&gt;<br />
		 ft.addToBackStack(tag);&lt;br /&gt;<br />
		}&lt;/p&gt;<br />
&lt;p&gt;		ft.commit();&lt;br /&gt;<br />
	}&lt;br /&gt;<br />

Aynı fragment’ı her zaman aynı şekilde çağırdığımda problem basit yoldan düzeldi.

Posted in Android | No Comments »

 
canakkale canakkale canakkale truva search canakkale vergi mevzuati bagimsiz denetim bagimsiz denetim web security ozurluler bilisim teknoloji sgk bagimsiz denetim bagimsiz denetim