TortoiseSVN 사용 중 ‘xxx’ is not under version control 에러 처리

원인: 해당 파일 또는 폴더가 SVN 저장소에 없을 경우 발생함

해결 방법: .svn\wc.db 파일을 SQLite 툴에서 오픈한 다음 아래 쿼리 실행 (trunk/xxx_V8_R2/test 대신 에러가 발생한 파일의 경로를 넣어줌)

해킹 당하지 않는 인앱 빌링(In-App Billing) 처리 과정

몇 년 전에 작성한 것인데.. 혹시나 필요한 분이 있을까해서 올려봅니다.

해킹 당하지 않게 처리하기 위한 서버 검증 과정을 포함한 구글플레이의 인앱결제(In-App Billing) 과정입니다.

 

아이템 신규 결제 과정입니다. (더 보기…)

[android] Activity idle timeout for HistoryRecord 에러 발생 시

SurfaceView를 상속한 뷰 클래스를 하나 만들어 액티비티를 띄울 경우 아래와 같은 에러가 발생하면서
뷰가 표시되지 않고, 까만 화면만 표시되다 에러가 발생하는 경우

WARN/ActivityManager(374): Launch timeout has expired, giving up wake lock!
WARN/ActivityManager(374): Activity idle timeout for HistoryRecord{4776baf0 com.isulnara.game/.GameMain}

◆ 원인

-> SurfaceView를 상속한 뷰 내부의 쓰레드(Thread)에서 LOCK이 걸려서 발생함.

SurfaceView를 상속한 뷰 내부의 코드 중 아래처럼 synchronized를 사용하고

synchronized (holder)
{

}

액티비티 또는 쓰레드 내부에서 동시에 synchronized를 사용한 특정 메소드에 접근할 경우
LOCK이 걸려서 무한대기하다 에러를 발생시키는 것으로 확인했음..

◆ 해결방법

1. LOCK 발생 시키는 상황을 만들지 않도록 코딩
2. 동기화가 필요없을 경우 synchronized 블럭 제거

[안드로이드] 스플래시(로딩) 화면 띄우기

안드로이드(android) 앱이 실행되면서 스플래시(splash, 로딩) 화면을 띄우는 소스입니다.

여러가지 방법이 있겠지만 제가 사용하는 방법은 아래와 같습니다.

AndroidManifest.xml

<!– 메인 액티비티 –>
<activity android:name=”MainActivity” android:label=”@string/app_name”>
        <intent-filter>
            <action android:name=”android.intent.action.MAIN” />
            <category android:name=”android.intent.category.LAUNCHER” />
        </intent-filter>
</activity>
       
<!– 스플래시(로딩) 액티비티 –>
<activity android:name=”SplashActivity“/>

MainActivity .java

public class MainActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        // 스플래시 화면 띄우기
        startActivity(new Intent(this, SplashActivity.class));

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        initialize();  // 시간이 걸리는 작업 처리
    }

    /**
     * 스플래시 표시하는 것과 초기화를 동시에 진행시키기 위하여 쓰레드 처리
     *
     */
    private void initialize()
    {
        InitializationRunnable init = new InitializationRunnable();
        new Thread(init).start();
    }

    /**
     * 초기화 작업 처리
     *
     */
    class InitializationRunnable implements Runnable
    {
        public void run()
        {
            // 여기서부터 초기화 작업 처리
            // do_something
        }
    }
}

SplashActivity.java

public class SplashActivity extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);

        initialize();
    }

    private void initialize()
    {
        Handler handler =    new Handler()
                                     {
                                         @Override
                                         public void handleMessage(Message msg)
                                         {
                                             finish();    // 액티비티 종료
                                         }
                                     };

        handler.sendEmptyMessageDelayed(0, 3000);    // ms, 3초후 종료시킴
    }
}

* 화면을 가로/세로 모드로 전환할 경우 스플래쉬 액티비티가 보이는 문제가 발생할 경우 대처
– 여러가지 방법이 있겠지만 아래처럼 처리하면 됩니다.(2010/10/27 추가)

AndroidManifest.xml

<!– 메인 액티비티 –>
<activity android:name=”MainActivity” android:label=”@string/app_name” android:configChanges=”keyboardHidden|orientation”>
        <intent-filter>
            <action android:name=”android.intent.action.MAIN” />
            <category android:name=”android.intent.category.LAUNCHER” />
        </intent-filter>
</activity>

<!– 스플래시(로딩) 액티비티 –>
<activity android:name=”SplashActivity“/>

예제 다운로드:
1080351452.zip

이전 달의 파일을 특정 디렉토리로 이동시키는 배치 파일

@echo off
rem 이전 달의 파일을 하위 디렉토리로 이동
rem    by isul

SET ROOT=r:

SET DS=%DATE%
FOR /F “tokens=1-4 delims=-” %%A in (‘echo %DS%’) Do SET YY=%%A&SET MM=%%B%

SET /a MM=1%MM%-101

IF %MM% GTR 9 GOTO NEXT
SET MM=0%MM%

: NEXT

IF %MM% EQU 00 GOTO YEAR
GOTO END

: YEAR
SET /a YY=%YY%-1
SET MM=12

: END
SET DIRNAME=%YY%%MM%

mkdir %ROOT%\%DIRNAME%

echo move file: %DIRNAME%* → %ROOT%\%DIRNAME%\
move %ROOT%\%DIRNAME%* %ROOT%\%DIRNAME%\

안드로이드(Android) 에뮬레이터(emulator)에서 시리얼 통신하기

에뮬레이터 실행

C:\android\tools\emulator.exe -avd Android.2.0.1 -verbose -qemu -serial COM4

안드로이드 에뮬레이터에 쉘 접속

c:\adb kill-server

c:\adb devices
C:\adb shell

안드로이드 에뮬레이터 쉘에서 명령 실행

#cd /data/bin
# ./busybox microcom -s 300 /dev/ttyS2
./busybox microcom -s 300 /dev/ttyS2
connected to ‘/dev/ttyS2’ (300 bps), exit with ctrl-X…
*0100P3
*000114.2696
*0100P3
*000114.2695

시리얼 통신용 프로그램을 만들어서 테스트

# ./seriald
./seriald
 ttyS0 ttyS1 ttyS2
recv: *000114.2712

MyEclipse에 Flex Builder Plugin 설치하기

1. 설치 시 MyEclipse가 설치된 디렉토리는 “c:\Program Files\Genuitec\Common\“로 선택하고, 진행 시 경고 메시지가 표시되면 그냥 강제로 설정하고 진행합니다.

2.Flex Builder Plug-in 설치
사용자 삽입 이미지
“Add from Local Folder”을 클릭하여 “Flex Builder 3 Plug-in”을 설치한 디렉토리 하위 디렉토리인 “com.adobe.flexbuilder.update.site”을 선택합니다. (c:\Program Files\Adobe\Flex Builder 3 Plug-in\com.adobe.flexbuilder.update.site)
사용자 삽입 이미지
사용자 삽입 이미지

Help – Software – Windows – Preferences – Flex – Installed Flex SDKs에서 아래 그림에서 보이는 것처럼 수정합니다.

Flex 0.0 -> C:\Program Files\Adobe\Flex Builder 3 Plug-in\sdks\2.0.1
Flex 0.0(1) -> C:\Program Files\Adobe\Flex Builder 3 Plug-in\sdks\3.2.0

사용자 삽입 이미지
적용(Apply)하면 프로젝트 생성 시 Flex가 표시됩니다.