안드로이드 이클립스에서  프로젝트를 개발을 하고나서

구글플레이에 등록하기위하여 apk를 만들어야 하는데요

오늘은 apk 생성방법을 알아 보겠습니다.



이클립스에서 프로젝트 위에 마우스를 포커싱한후

마우스 오른쪽을 클릭!! > Android Tools > Exprot Signed Application Package

위 사진과 같이 따라서 하시면 되겠습니다.



전단계에 말씀드린데로 프로젝트위에서 마우스오른쪽 해서

진행 하셨다면 경로가 자동으로 잡히게됩니다.

하지만 프로젝트 외에 영역에서 마우스클릭으로 들어오셨다면

프로젝트 경로를 잡아 주셔야 합니다.

Next 클릭!!



키를 저장할 곳을 선택하시면 됩니다. Browse 클릭 후 경로 선택

키에 대한 페스워드를 입력하신 후 next 클릭 하시면됩니다.

주의 : 페스워드는 나중에 찾을 수 없습니다. 따로 메로를 해두시거나 꼭 기억해두세요.



Alias : 프로젝트 명을 입력하시거나 자율적으로 입력하시면 되겠습니다.

페스워드를 설정 해주신 후 Validity 유효기간을 입력 하시면 됩니다. 60년 적어주세요

그아래에는 이름만 간단하게 적어주시고 넘어 가시면 됩니다.

next 클릭



마지막으로 구글플레이스에서 등록하게될 apk 저장 경로입니다.

경로를 성택하신 후 finish 클릭하셔서 구글플레이에 등록 하시면 되겠습니다. ^^

그럼 많은 유저를 확보 하시길 바래요 ~~~


오늘 소개하는 자바 소스는 스도쿠 게임 정답을 알아내는 스도쿠 정답 로직 입니다.

소스는 설명할건 없고 쭉~ 보시면 다 아실거라 생각되요

value 값에 스도쿠 게임 문제를 입력해주시면 정답이 출력 됩니다.

문제는 0099700720200 이런식으로 입력해주시면 되고 0자리는 빈칸입니다.

이해가 안되시는 부분은 댓글 남겨주시면 답변드리겠습니다 ^^


public class SudokuSolver extends Exception{
    
    public SudokuSolver(String value ) {
      
        
        int[][] sudoku = new int[9][9];
        String line = value;
        int ii = 0;
        for (int y = 0; y < 9; y++){
            ii += 9;
            int xx = 0;
            for (int x = ii - 9; x < ii; x++){
                sudoku[y][xx] = Character.getNumericValue(line.charAt(x));   
                xx++;
            }
        }

        solve(sudoku, 0, 0);
    }
    
    private void solve(int[][] sudoku, int cellX, int cellY){         
        if(cellY > 8){
            printSudoku(sudoku);
        }else{
            int nextX = cellX;
            int nextY = cellY;
            if(cellX == 8){
                nextX = 0;
                nextY++;
            }else{
                nextX++;
            }

            if(sudoku[cellY][cellX] != 0){
                solve(sudoku, nextX, nextY);
            }else{
                for(int checkNum = 1; checkNum < 10; checkNum++){
                    if(checkSquare(sudoku, cellX, cellY, checkNum)
                            && checkRow(sudoku, cellY, checkNum)
                            && checkCol(sudoku, cellX, checkNum))
                    {
                        sudoku[cellY][cellX] = checkNum;
                        solve(sudoku, nextX, nextY);
                    }
                }
                sudoku[cellY][cellX] = 0;
            }
        }
    }

    private boolean checkSquare(int[][] sudoku, int reqX, int reqY, int toCheck)    {
        int rowY;
        int colX;

        if(reqX < 3){
            colX = 0;
        }else if (reqX < 6){
            colX = 3;
        }else{
            colX = 6;
        }

        if(reqY < 3){
            rowY = 0;
        }else if (reqY < 6){
            rowY = 3;
        }else{
            rowY = 6;
        }

        for(int y = rowY; y < rowY + 3; y++){
            for(int x = colX; x < colX + 3; x++){
                if(sudoku[y][x] == toCheck){
                    return false;
                }
            }
        }

        return true;
    }

    private boolean checkRow(int[][] sudoku, int rowY, int toCheck){
        for(int x = 0; x < 9; x++){
            if (toCheck == sudoku[rowY][x]){
                return false;
            }
        }
        return true;
    }

    private boolean checkCol(int[][] sudoku, int colX, int toCheck){
        for(int y = 0; y < 9; y++){
            if (toCheck == sudoku[y][colX]){
                return false;
            }
        }
        return true;
    }

    private void printSudoku(int sudoku[][]){

        for(int y = 0; y < 9; y++){
            for(int x = 0; x < 9; x++){
                System.out.print(sudoku[y][x]);
                if(x == 8){
                System.out.println();
                }
            }
        }
      
    }
}


안드로이드 토스트 위치 변경에 대해서 알아 보겠습니다.

기본 토스트 위치는 핸드폰 위치 하단에 나오게 되는데요 상단이나 가운대로 이동 시킬 수 있습니다.

기본사용법은 아래와 같습니다.

  Toast.makeText(this, "토스트 기본", Toast.LENGTH_SHORT).show();

위에같이 사용하는 소스를 위치 변경하기 위해서는 gravity 설정을 해줘야하는데

Gravity.CENTER 또는 Gravity.TOP 으로 하시면 위치는 중앙 아니면 상단으로 토스트가 나오게 됩니다.

아래 소스는 제가 사용하기 쉽게 메서드로 만들어둔 소스입니다.


public void showToast(String msg){
        Toast toast ;
        toast = Toast.makeText(this, msg , Toast.LENGTH_LONG);
        int offsetX = 0;
        int offsetY = 0;
        toast.setGravity(Gravity.CENTER, offsetX, offsetY);
        toast.show();
    }


안드로이드 CountDownTimer 를 사용방법을 소개 하겠습니다.

개발 하면서 viewpager 또는 imageview 롤링 즉 자동슬라이드 해야 할 경우에

이용하시면 되겠습니다~


자동슬라이드나 롤링 방법은 onFinish()에서 계속 start(); 시켜주는 방법으로

사용하시면 됩니당


소스는 간단해서 따로 설명은 안하고 소스만 소개하겠습니당


CountDownTimer CountTimer = new CountDownTimer(5000, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {}

            @Override
            public void onFinish() {
                // start(); 5초에 한번씩 다시 시작 됩니다 

               // 만약 위에서 5000 를 8000 변경하면 8초에 한번이 되겠습니다. 
            }
        }.start();

안드로이드 Fragment 초보자를 위하여 간단하게 소스만을 정리 해볼까 합니다

fragment 생명주기등 여러가지 설명을 해야 하지만 fragment에 대한 내용은

이미 많은 분들이 포스팅해서 저는 소스만을 소개 해드리겠습니다 ^^


일단 fragment 를 사용하기위하여 레이아웃안에 FrameLayout을 추가 해줘야 합니다.


Fragment 를 사용할 xml 안에 아래 소스를 입력해 주시면 됩니다.

FrameLaouy 안에 Fragment 화면이 보여지게 됩니다.


<FrameLayout
        android:id="@+id/main_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>


이제 fragment 를 사용해보겠습니다

Fragment를 생성하고 위에서 추가한 framelayout에 화면을 보여주는 소스입니다.


FragTsaction 는 fragment를 관리하기 위하여 생성합니다.


FragmentTransaction FragTsaction = getSupportFragmentManager().beginTransaction();


// 아래와 같이 생성하시거나 excalss.instanc(); 식으로 생성 하셔도 되며.

// intance는 따로 static으로 정의를 한 것입니다.
FragTsaction.replace(R.id.main_frame, new excalss()); 


// fragment 보여지거나 사라질때 애니메이션 처리 입니다.
FragTsaction.setCustomAnimations

(R.anim.layout_leftin, R.anim.layout_leftout)


//replace(R.id.newmain_frame, targetFragment, "newmain_fragment")

//위에 repace 방법과 동일하지만 파라미터 하나가 더있습니다.

//마지막 파라미터 "newmain_fragment" 값은

//이름을 정해준다고 생각 하시면 됩니다. 

//추가해둔 fragment를 다시 불러 올때사용 됩니다


FragTsaction.commit();  // 마지막으로 commint을 해주면 동작을 하게됩니다.



마지막으로 추가한 fragment불러와서 화면에서 사라지게하거나 삭제하는 소스입니다.


Fragment 페이지 삭제 방법 2가지가 이습니다.


1번 framelayout id 값으로 추가된 fragment를 불러와서 remove 시켜주는 방법입니다.
Fragment mFragment = getSupportFragmentManager().findFragmentById(R.id.main_frame);
FragTsaction.remove(mFragment);


2번 위에서 설명 했던 지어준 이름을 가지고 remove 시켜주는 방법입니다.
Fragment mFragment = getSupportFragmentManager().findFragmentByTag("newmain_fragment")
FragTsaction.remove(mFragment);
 


fragment에대하여 더욱 자세하게 알고 사용하면 좋지만

여기저기 블로그를 보시다가 정리가 안되시는 분들은 위에 소스를 사용해보시고

이론을 다시한번 보시면 더욱 쉽게 이해가 가실거라 생각됩니다.

또한 개발도 위에소스만으로도 충분하게 개발은 가능합니다 그래도 이론적으로 알고

개발하시는게 더욱 좋을거라 생각 됩니다. ^^


추가로 위에서 사용된 애니메이션과 intance 를 보여드리고 마무리 하겠습니다.


fragment class 에서 생성하시면 됩니다.

public static exclass Instance(int i){
        exclass fragment = new exclass();
        Bundle args = new Bundle();
        args.putInt("Num", i);
        fragment.setArguments(args);
        return fragment;
    }

애니메이션1 입니다. R.anim.layout_leftin
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="300"
        android:fromXDelta="100%p"
        android:toXDelta="0" />

</set>

애니메이션2 R.anim.layout_leftout
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:toXDelta="-100%p" />

</set>

안드로이드 앱 설치 유무 판단해서 다른 앱을

바로 실행 하거나 구글스토어로 설치 할 수 있도록

이동시키는 소스입니다.


페키지명으로 앱을 실행 시켜서 앱이 없다면

exception 이 발생하면서 구글플레이로 이동시키는

방법입니다~~



PackageManager pm = getActivity().getPackageManager();

try {
                pm.getApplicationInfo("패키지명", PackageManager.GET_META_DATA);
                Intent intent = pm.getLaunchIntentForPackage("페키지명");
                startActivity(intent);
            } catch (NameNotFoundException e) {
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=페키지명"));
                startActivity(intent);
            }


안드로이드 앱 종료시 백버튼 두번 터치 후 앱 종료

하는 방법을 소개 하겠습니다~


많은 앱들이 종료할때 옛날에는 팝업창을 띄워서

종료 여부를 물었지만 지금은 백버튼 터치시

토스트로 경고하고 한번더 터치하게되면 종료되게

많이 하고있는데요 


이걸 그대로 구연할 수 있는 소스를 소개하겠습니다.

아래 소스를 보시면 fnish() 를 오버라이드 해서

종료시 체크하도록 구현 하였습니다.


FinishFlag 라는 변수를 생성 해두고 아래 소스를 이용 하시면 됩니다.


@Override
    public void finish() {
        if ( FinishFlag == false){
            Toast.makeText(this, "'뒤로'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();
            FinishFlag =  true;
            mKillHandler.sendEmptyMessageDelayed(0, 2000);
            return;
        }
        super.finish();
    }
    
    Handler mKillHandler = new Handler(){
        @Override
        public void handleMessage(android.os.Message msg) {
            if (msg.what == 0)
                FinishFlag = false;
        };
    };

+ Recent posts