system/app 폴더에 644 퍼미션 주시고 재부팅하면됩니다.


퍼미션 주는법 : chmod 644 SystemUI.apk

read-only라고 뜰 때 :  mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system


루팅필수 백업필수










수정파일

SystemUI.apk


백업파일

SystemUI.apk.bk



저작자 표시 비영리 변경 금지
신고
Posted by Leo 리오 트랙백 0 : 댓글 0

아이러브커피 판매량 계산기


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


아이러브커피의 꾸미기점수와 직원에대한 커피판매량과 사이드판매량의 계산법이 공개되어있지 않습니다.
따라서 꾸미기점수를 얼마나 올려야될지 모르는데 
이 어플을 통해 커피 판매량을 계산 할 수 있습니다.







저작자 표시 비영리 변경 금지
신고

'Android > MyApps' 카테고리의 다른 글

아이러브커피 판매량 계산기  (0) 2012.12.13
Love 가계부  (0) 2011.09.30
Posted by Leo 리오 트랙백 0 : 댓글 0

키스에 연결이 안되서 오딘으로 젤리빈을 올렸다.


이건 순정

magnet:?xt=urn:btih:4B0C0599B8B073F20DBA7700C839A97EA3BCA105&dn=KIES_HOME_E210SKSJLK3_E210SSKTALK3_508165_REV00_user_low_ship.tar.md5&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce


이건 순정+루팅버전

magnet:?xt=urn:btih:D62D9B27648933B472A0D18A26E415FF82C22A16&dn=KIES_HOME_E210SKSJLK3_E210SSKTALK3_508165_REV00_user_low_ship_rooted.tar&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80%2fannounce


오딘 으로 올리자.




저작자 표시 비영리 변경 금지
신고
Posted by Leo 리오 트랙백 0 : 댓글 0

Android 어플 크래킹

2012.11.12 17:11 from Android

1. 소스 보기


1-1. classes.dex

 apk 파일을 압축을 풀어서 classes.dex파일을 얻는다.



1-2. classes_dex2jar.jar

dex2jar를 이용하여 classes.dex를 jar파일로 바꾼다.

http://code.google.com/p/dex2jar/downloads/list




1-3. 소스를 본다.

http://java.decompiler.free.fr/?q=jdgui 를 이용하면 거의 원본의 소스를 볼 수 있다.



1-4. 수정할 곳 찾기

수정할 곳을 찾는다.



보통 결제크렉은 이부분을 본다.


ps. 위에서 보여주는 예는 구글에서 제공하는 샘플 코드랑 거의 비슷하다.

구글에서는 이런 크래킹(리버스)를 방지하기위해서는 샘플코드를 변형할것을 강력히 권장하고 있다.


ps2. 또한 구글에선 inapp결제에 의해 생성되는 콘텐츠를 어플에 가지고 있지 말고, 따로 서버에 두기를 강력히 권장하고 있다.


 이걸 이용해서 다시 컴파일 해볼려고 해봤는데 잘 안된다. 디컴파일이 완전하지도 않고 이것저것 귀찮다.

그래서 그냥 차라리 아래의 apk manager를 이용하는게 더 편하다.




2. 수정하기


수정할 곳을 찾았으면 수정을 해보자.


2-1. Apk Manager 5.0.3


Apk_Manager_5.0.3.zip

이걸로 풀자.(9. Decompile)


그럼 smail 폴더에 자바 중간파일인 smali가 생성된다.


이렇게 하나의 클래스가 여러개의 파일로 나눠질 수도 있다.

파고들자!


텍스트파일이라서 메모장으로도 열린다.


이게 자바의 어셈블러 라고 볼 수도 있는데, 원래도 그리 어려운건 아니지만 이미 소스를 보면서 할 수 있기 때문에 쉽다!


smali이 파일은 Dalvik 위에서 도는 assem으로 되있다.

이 부분은 http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html 여기 살펴보면 된다.



수정후 다시 11.컴파일- 12.sign-하면 signed apk가 생성되는데 설치하면 끝!!!







저작자 표시 비영리 변경 금지
신고
Posted by Leo 리오 트랙백 1 : 댓글 21

오픈소스 git svn 안드로이드 프로젝트 이클립스로 가져오기




이런 오픈소스 프로젝트를 봤다고 하자.




URL 부분만 복사




SVN Reopository Exploring Perspective에서 New Repository Location 선택 URL붙여넣기





가져온걸 볼 수 있다.

trunk에서 프로젝트 Root(최상위)폴더를 찾자.

프로젝트를 어떻게 관리하냐에 따라 위치가 다른데

모르겠으면 .project파일이 있는 폴더이다.



폴더 우클릭 후 체크아웃.



프로젝트가 import됬으면 속성들어가서

최신 BuildTarget을 고르고





자바 컴파일러 1.6 사용.








저작자 표시 비영리 변경 금지
신고
Posted by Leo 리오 트랙백 0 : 댓글 0

이클립스에서 안드로이드 라이브러리 프로젝트 사용하기.


Build Path설정하고 머하고 해도 

ClassNotFound NoClassDefFoundError R$id

등등 에러가 뜨면서

잘 안되서 삽질했는데,

다른걸 사용하는거였다.



https://github.com/pingpongboss/StandOut

이 오픈소스 를 예를 들어보자.




StandOut은 라이브러리고,

StandOutExample은 샘플 코드이다.





StandOut 즉, 라이브러리 프로젝트 설정에서 Is Library를 체크한다.






StandOutExample 즉, 라이브러리를 사용하는 예제코드의 설정에서 

Add...을 누르면 Is Library체크 했던 프로젝트 목록이 나온다.

이걸 추가시키고 빌드하면 성공!








저작자 표시 비영리 변경 금지
신고
Posted by Leo 리오 트랙백 0 : 댓글 0

android-scripting

2012.09.24 16:49 from Android

android에서 python실행이 가능하다.
toast나 GUI SMS접근 등도 가능.

http://code.google.com/p/android-scripting/

저작자 표시 비영리 변경 금지
신고
Posted by Leo 리오 트랙백 0 : 댓글 0



  1.         static String getName(ContentResolver CR, String num)
  2.         {
  3.                 Cursor contacts2 = CR.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, "data1 = "+ num, null, null);
  4.                 String phone_name = null;
  5.  
  6.                 while (contacts2.moveToNext())
  7.                 {
  8.                         phone_name = contacts2.getString(contacts2.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
  9.                         return phone_name;
  10.                 }
  11.                
  12.                 return num;
  13.         }






신고
Posted by Leo 리오 트랙백 0 : 댓글 0





















신고
Posted by Leo 리오 트랙백 0 : 댓글 0

홈화면에서 메뉴-설정


언어및키보드


ezKeys선택


경고가 뜨지만 절대 개인정보를 수집하지않습니다


나가서 아무입력창 길게 터치


입력방법 선택


ezKeys선택

완료!
신고

'Android > App - ezKeys' 카테고리의 다른 글

ezKeys 사용방법  (1) 2011.10.25
ezKeys  (158) 2011.06.08
Posted by Leo 리오 트랙백 0 : 댓글 1

Love 가계부

2011.09.30 13:10 from Android/MyApps









카드사에서 문자가 오면 서버로 전달.
PC에서 카드 사용정보와 가계부를 볼 수 있다.
 위치정보가 있을때 위치정보도 같이 전달.

서버쪽 운영자님 블로그 : http://loveggb.tistory.com/m 
신고

'Android > MyApps' 카테고리의 다른 글

아이러브커피 판매량 계산기  (0) 2012.12.13
Love 가계부  (0) 2011.09.30
Posted by Leo 리오 트랙백 0 : 댓글 0




고려대학교
도서관 좌석 지킴이 어플입니다.

학교 열람실은 최대 4시간까지 시간을 연장할 수 있고, 최대 4시간마다 연장을 해줘야합니다. 그런데 공부에 열중하다 보면 좌석을 연장해야되는 시간을 지나쳐 다른 사람에게 자리를 뺏겨본 경험이 고려대 학생이면 모두 한번쯤은 있을 것입니다. 또한 연장하는 시간 때문에 신경이 쓰여 시계를 자주 보게 되는 문제점이 있습니다.

연장해야 될 때를 알려주는 어플입니다.


1. 사용한 시간을 bar로 표시하였습니다.

좌석 시간을 등록(시작)시켜놓으면

종료시간과 연장시간을 알려줍니다.

2. 한달동안 열람실 이용한 시간을 그래프로 보여줍니다.

3. 열람실 좌석정보를 쉽게 보기위해서

m.korea.ac.kr웹 뷰를 지원합니다.



신고

'Android > App - SeatKeeper' 카테고리의 다른 글

SeatKeeper 고려대학교 좌석지킴이  (3) 2011.06.16
Posted by Leo 리오 트랙백 0 : 댓글 3

/** Read the object from Base64 string. */
    public static Object S2Object( String s ) {
        byte [] data = Base64.decode(s, 0);
        ObjectInputStream ois;
        Object o=null;
        try
        {
            ois = new ObjectInputStream(new ByteArrayInputStream(data));
            o  = ois.readObject();
            ois.close();
        } catch (ClassNotFoundException e)
        {
            System.out.println("S2Object ClassNotFoundException failed");
            return null;
        } catch (IOException e)
        {
            System.out.println("S2Object IOException failed");
            return null;
        }
        return o;
    }
    /** Write the object to a Base64 string. */
    public static String O2String( Serializable o ) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos;
        try
        {
            oos = new ObjectOutputStream( baos );
            oos.writeObject( o );
            oos.close();
        } catch (IOException e)
        {
            System.out.println("writeObejct failed");
            e.printStackTrace();
            return "";
        }        
        return new String( Base64.encode( baos.toByteArray(),0 ) );
    }


implements Serializable 를 해야한다.


신고
Posted by Leo 리오 트랙백 0 : 댓글 0

EditText Attributes

2011.06.10 01:20 from Android

Type

Attribute

Description

입력방식

android:singleLine

한 줄로만 표현스크롤 및 개행 불가

android:digits

유효 글자 제한, ex)ab면 ab만 입력 가능

android:numeric

"integer" : 숫자만 입력

"signed" : 부호 가능

"decimal" : 소수점 가능

android:phoneNumber

전화번호 입력 방식

android:password

비밀번호 입력 방식, * 로 표시됨

android:capitalize

"characters" : 글자 모두 대문자

"words" : 단어의 첫 글자만 대문자

"sentences" : 문장의 첫 글자만 대문자

Focus

android:selectAllOnFocus

선택 시 전체 선택됨

android:cursorVisible

“true” : 커서 활성

“false” : 커서 비활성

편집관련

android:ellipsize

(singleLine에서 적용)

"start" : 첫 부분 절삭

"middle" : 중간 절삭

"end" : 뒷부분 절삭

"marquee" : 좌우로 Scrolling ,

  - default : 포커싱이 될때만 적용

  - android:focusable=”true” 설정시

    marquee 상태 유지됨

android:marqueeRepeatLimit

(singleLine에서 적용)

"integer" : 기본 3, integer값 만큼 왕복

"marquee_forever" : 계속 반복

링크

android: autoLink

"email" : e-mail 링크 연결

"map" : 지도로 연결

"web" : web 브라우저로 연결

"phone" : 전화 걸기로 연결

"all" : 전체

설정

android:textStyle

bold, italic, bolditalic 로 설정

android:shadowColor 

그림자 색상 설정

android:shadowDx 

글자와 그림자 거리 x설정

android: shadowDy 

글자와 그림자 거리 y설정

android: shadowRadius 

그림자의 크기

android: textScaleX

텍스트 높이에 대한 폭의 비율로

장평 조절

android:lineSpacingMultiplier

줄 간격 설정

android:lineSpacingExtra 

줄 간격 추가 설정

android:lines

라인 설정을 한다.

android:layout_height=”wrap_content”

때 자동으로 높이가 lines value 크기

만큼 강제 설정된다.

android:minLines 

android:layout_height=”wrap_content”

일때 최소 line 설정

android:maxLines 

android:layout_height=”wrap_content”

일때 최대 line 설정

android:ems 

수평 크기를 ems 기준으로 한다.

android:minEms 

android:layout_height=”wrap_content”

일때 최소 ems 설정

android:maxEms 

android:layout_height=”wrap_content”

일때 최대 ems 


신고
Posted by Leo 리오 트랙백 0 : 댓글 0

ezKeys

2011.06.08 12:27 from Android/App - ezKeys


ezKeys 1.6.51.apk


ezKeys 페이스북 페이지



1.6.51 임시로 업로드했습니다.

불편을 드려 죄송합니다...

☆=====================================사용법=====================================☆
☆숫자패드에 ⓘ를 누르시면 설정화면에 가실 수 있습니다. 

특문은숫자패드에서SHIFT를누르면되고 쉼표,점과 획,쌍,ㅡ조합으로특문가능합니다.

- ~
. ! :
, ? ;

슬라이드
왼쪽:백스페이스
오른쪽:스페이스
아래쪽:키보드감추기
위쪽:텍스트모두잘라내기


(키보드 실행방법:
1. 설정-키보드 사용할키보드 체크
2. 입력할때 텍스트상자 길게 터치
3. 입력방법 선택 ezKeys)

☆================================================================================☆

 


신고

'Android > App - ezKeys' 카테고리의 다른 글

ezKeys 사용방법  (1) 2011.10.25
ezKeys  (158) 2011.06.08
Posted by Leo 리오 트랙백 0 : 댓글 158




ExpandableListView elv = (ExpandableListView)findViewById(R.id.elvMarks);
MyexpandableListAdapter ad = new MyexpandableListAdapter();
elv.setAdapter(ad);
for(int i=0;i<ad.getGroupCount();i++)
elv.expandGroup(i);

public boolean expandGroup (int groupPos)

  • True if the group was expanded, false otherwise (if the group was already expanded, this will return false) 
  •  
    신고
    Posted by Leo 리오 트랙백 0 : 댓글 0

    안드로이드 예제들

    2011.05.04 11:42 from Android
    Handler 예제

    final Handler handler = new Handler() {
    public void handleMessage(Message msg) {

    switch (msg.what)
    {
    case I.KEY_HANDLE_TOAST:
    String toastMsg = (String) msg.obj;
    Toast.makeText(getApplicationContext(), toastMsg, 3000).show();
    break;

    case IContent.KEY_HANDLE_123:
    {
    //list adapter refresh()
    if(adapter != null)
    adapter.notifyDataSetChanged();
    }
    break;
    }
    }
    };

    호출 방법
    Message msg1 = handler.obtainMessage(IContent.KEY_HANDLE_TOAST, "Print Toast");
    handler.sendMessage(msg1);

    Message msg2 = handler.obtainMessage(IContent.KEY_HANDLE_123);
    handler.sendMessage(msg2);

    sendMessageDelayed()) 



    안드로이드의 스크린 가로, 세로 모드를 고정시키는 방법은 2가지입니다.

    1. source에서 수정

    - Activity를 상속받은 클래스에서 onCreate() 안에 super.onCreate()전에 다음 함수를 실행시켜주면 간단하게 고정이 됩니다.

    setRequestedOrientation(Activity.SCREEN_ORIENTATION_LANDSCAPE);


    2. AndroidManifest.xml에서 수정

    - 가로 : landscape, 세로 : portrait 둘중 하나로 설정하면 된다.

    <activity android:screenOrientation="landscape"

    android:configChanges="keyboardHidden|orientation" />




    즐겨찾기 별버튼

            <CheckBox android:id="@+id/cbMark" 
            style="?android:attr/starStyle" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content" 
            /> 























    신고

    'Android' 카테고리의 다른 글

    EditText Attributes  (0) 2011.06.10
    ExpandableListView 자동으로 열어보여주기  (0) 2011.05.26
    안드로이드 예제들  (0) 2011.05.04
    List View - UI thread 에러  (4) 2011.04.21
    achartengine에서 TimeBarChart 만들기  (5) 2011.01.08
    구글맵 맵상에서 거리구하기  (0) 2010.11.24
    Posted by Leo 리오 트랙백 0 : 댓글 0

    List View - UI thread 에러

    2011.04.21 09:06 from Android

    (custom) ListView를 사용할 때



    ArrayList<x> list;
    Adapter ad;

    list.add(xx);


    처럼 동적으로 추가하면

    ERROR/AndroidRuntime(28265): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131034121, class android.widget.ListView) with Adapter(class Leo.myCoupon.CouponAdapter)]

    이런 에러가 났다..


    몇시간동안 찾고

    UI thread에서 돌아가게 할려고 handler도 써보고 RunOnUiThread도 해보고 했는데도

    똑같은 계속에러가;

    그러다 디버거를 돌려보니까 Thread1에서 돌았다. 결국, 다 UI Thread에서 돌고있었던거다;

    UI Thread문제가 아니었다.


    ArrayList<x> list;
    Adapter ad;

    ad.add(xx);


    이런식으로 추가 했어야한다.... 너무 초보적인 실수라;

    아니면

    list.add(xx);  후에
    ad.notifyDataSetChanged(); 로 알려줘도된다.

    아마 list에 직접 추가되는것은 UI에 적용이 안됬던것이라 에러가 났었나보다

    adapter를 통해 추가 시켜주면

    자동으로 list에 추가도 해주고 UI도 업데이트 시켜주는듯 하다.
    신고
    Posted by Leo 리오 트랙백 2 : 댓글 4

    achartengine(http://www.achartengine.org)에는

    x축 값이 시간을 사용할 수 있는 TimeChart꺽은선 그래프밖에 지원하지 않는다.

    BarChart + TimeChart를 합친

    TimeBarChart를 새로 정의 하였다.




    TimeBarChart 소스





    사용자 삽입 이미지






    신고
    Posted by Leo 리오 트랙백 0 : 댓글 5
    http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/
    신고

    'Android > ' 카테고리의 다른 글

    How to Create QuickAction Dialog in Android  (0) 2010.11.29
    Posted by Leo 리오 트랙백 0 : 댓글 0
    지구는 둥구니까

    지도상에서 거리구하는것이 아주 복잡하다.



     Area(GeoPoint c,GeoPoint r)
     {
      this.c = c; this.r= r;
      Location lc = new Location("gps"); lc.setLatitude(c.getLatitudeE6()/1E6); lc.setLongitude(c.getLongitudeE6()/1E6);
      Location lr = new Location("gps"); lr.setLatitude(r.getLatitudeE6()/1E6); lr.setLongitude(r.getLongitudeE6()/1E6);
      radius = lc.distanceTo(lr);
    }

    distanceTo함수를 사용하면 미터 단위로 값이 나오게된다.



    그런데 구글맵에서는 확대 축소가 가능하기때문에 미터단위가 아닌 픽셀단위의 값이 있어야 맵상에서 거리를 표현가능하다.

    mapView.getProjection().metersToEquatorPixels(meters);



    그런데 이렇게 나타내면 오묘하게 다르게 나온다.

    역시 지구는 둥구니까

    (mapView.getProjection().metersToEquatorPixels(meters) * (1/ Math.cos(Math.toRadians(latitude))

    를 이용하면 정확하게 두 지점사이의 거리를 맵상에서 나타낼 수 있다.

    사용자 삽입 이미지

    결과

    신고
    Posted by Leo 리오 트랙백 0 : 댓글 0
    확인

    1. debug.keystore를 사용해 md5를 받고 apikey를 다시 받는다.

    keytool.exe -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android
    (arg들을 똑같이 써준다)

    apikey를 받는다.
    http://code.google.com/android/maps-api-signup.html

    2. lib과 permission 확인
    <uses-library android:name="com.google.android.maps" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.INTERNET" />

    3. 프로젝트를 clean하고 다시 생성
    신고
    Posted by Leo 리오 트랙백 0 : 댓글 0

    PopupWindow를 제거를 하려고하면 밖에를 터치해도 backkey를 눌러도 반응이없다.

    KeyEvent로 받으려고 해도 받아지지가 않는다.




      popupview = View.inflate(this, R.layout.dialog_popup, null);
      popup = new PopupWindow(popupview,200,100,true);
      popup.setOutsideTouchable(true);
      popup.setBackgroundDrawable(new BitmapDrawable()) ;



    This is because the popup window does not respond to onTouchr onKey events unless it t has a background that != null. Check out some code I wrote co help with this. In the basic case you tan to call PopupWindow#setBackgroundDrawable(new BitmapDrawable()) oo force it to act the way you expect. You won't need your own onKey listener. You might also need to call PopupWindow#setOutsideTouchable(true) if you want it to go away when the user clicks outside of the window boundaries.
    [이건 popupwindow가 (background가 null이면) 밖의 터치에 반응하지 않기 때문이다. 위코드를 보면 PopupWindow#setBackgroundDrawable(new BitmapDrawable()) 가 당신이 원한 기능을 만들어준다. onkey listener를 등록할 필욘없다. PopupWindow#setOutsideTouchable(true)만등록하면 창의 밖을 터치하면 창이 없어지게된다.]


    Extended esoteric answer:
    The reason the background cannot be null is because of what happens in PopupWindow#preparePopup. If it detects background != null it creates an instance of PopupViewContainer and calls setBackgroundDrawable on that and puts your content view in it. PopupViewContainer is basically a FrameLayout that listens for touch events and the KeyEvent.KEYCODE_BACK event to dismiss the window. If background == null, it doesn't do any of that and just uses your content view. You can, as an alternative to depending on PopupWindow to handle that, extend your root ViewGroup to behave the way you want.

    신고
    Posted by Leo 리오 트랙백 0 : 댓글 7