Monday, June 27, 2016

iOS Swift NSThread 생성하기

selector의 구문이 바뀌었다.
self 클래스에 runLoop()가 있어야 한다.

            let thread = NSThread(target:self, selector:#selector(runLoop), object: nil)
            thread.start()
  
func runLoop() {
        while(true) {
            print("runLoop")
        }
    }

Friday, June 17, 2016

Android 소프트키 상태바 반투명 만들기

전체화면 애플리케이션을 만들대 소프트키와 상태바를 반투명으로 만들어서 보이기/감추기를 해야될때가 있다.
그럴때는 다음과 같이 한다.

안드로이드 4.4부터 지원이 되므로 values-v19 폴더를 만든다.
다음과 같이 테마에서 translucent값을 2개를 true로 설정한다.
    <style name="PlayerTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:windowTranslucentStatus">true</item>
    </style>
액티비티에서 해당 테마를 적용한다.
android:theme="@style/PlayerTheme"

Android 소프트키 유무 체크 및 높이 구하기

안드로이드 하단바 소프트키 네비게이션바 높이를 구할때는 다음과 같이 구한다.
단위는 pixel이다.

private boolean hasSoftMenu() {
        //메뉴버튼 유무
        boolean hasMenuKey = ViewConfiguration.get(getApplicationContext()).hasPermanentMenuKey();

        //뒤로가기 버튼 유무
        boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);

        if (!hasMenuKey && !hasBackKey) { // lg폰 소프트키일 경우
            return true;
        } else { // 삼성폰 등.. 메뉴 버튼, 뒤로가기 버튼 존재
            return false;
        }
    }

    private int getSoftMenuHeight() {
        Resources resources = this.getResources();
        int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
        int deviceHeight = 0;

        if (resourceId > 0) {
            deviceHeight = resources.getDimensionPixelSize(resourceId);
        }
        return deviceHeight;
    }

Friday, June 10, 2016

Android N Preview 요약

안드로이드 N Preview
-멀티윈도우 서포트
-노티피케이션 커스텀(다이렉트 리플라이, 번들드)
-JIT/AOT 향상
-업데이트 설치 간소화
-Doze 향상
-백그라운드 최적화
-데이터 세이버
-OpenGL ES와 같은 Vulkan
-퀵 세팅 타일
-넘버 블로킹
-콜 스크리닝
-멀티 로케일
-새로운 이모티콘
-ICU4J API 유니코드
-OpenGL ES 3.2
-Android TV 레코딩
-Android For Work
-VR 지원
-Sign v2
-가상파일
-Scoped 디렉토리
-네트웍 시큐리티

Thursday, June 9, 2016

Android FFmpeg MacOS에서 빌드하기

인터넷에 안드로이드 FFmpeg 빌드하기 내용을 찾아봤보았다.
거의다 Linux거나 Windows의 cygwin으로 빌드하는 방법이 나온다.

그런데 MacOSX에서도 직접 빌드가 가능하다.
그리고 예전의 버전들에 비해서 빌드가 한결 간편해 졌다.
사용하는 버전은 다음과 같다.

Android NDK: r11c
ffmpeg: 3.0.2
MacOSX: El Capitan  10.11.5

먼저 다음 디렉토리에 ffmpeg 소스를 받아서 압축을 푼다.
~/android-ndk-r11c/sources/ffmpeg-3.0.2$

그리고 다음과 같이 config.sh를 만들어서 실행한다.
여기서 중요한 것은 다른 예제에서는 --target-os=linux로 설명하는데 안드로이드가 리눅스라도 그냥 빌드하게되면 .so파일 뒤에 .so.5.24 이런식으로 major, minor 버전으로 symlink가 걸리게 된다.
그러므로 반드시 --target-os=android로 설정하자.

#!/bin/bash
NDK=/Users/duongame/android-ndk-r11c
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one
{
./configure \
    --disable-symver \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=android \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

빌드가 끝나면 다음 디렉토리에 include, lib가 생기는데 이것을 복사해서 ndk빌드할때 사용하던지, 패스를 설정하던지 하면된다.
~/android-ndk-r11c/sources/ffmpeg-3.0.2/android/arm

Thursday, June 2, 2016

MacOSX Visual Studio Code PATH 추가

Visual Studio Code를 열고 Shift+Command+P를 입력 후
"shell command"를 입력