Wednesday, January 7, 2015

Unity3D 안드로이드 프로젝트 Export시 JDK가 없다고 나오는 경우

Unity3D에서는 JDK를 최신버전 1.7을 설치해서 사용하는데도 불구하고 Export시 없다고 나오는 경우가 있다.

이럴때는 JDK를 x64를 사용하고 있더라도 i586 버전을 한번더 설치해 주면 해결된다.

Unity3D AngryBots 프로젝트 위치

Unity3D를 처음 시작하면 AngryBots 프로젝트를 읽어와서 보여주는데 한번 닫으면 다시 열기가 쉽지 않다. 프로젝트가 어디에 있는지 찾기가 어렵기 때문이다.

아래와 같은 위치에 AngryBots프로젝트가 존재한다. 여기서 프로젝트를 읽으면 AngryBots를 다시 사용할 수 있다.

C:\Users\Public\Documents\Unity Projects\4-0_AngryBots

Monday, January 5, 2015

MySQL Error> 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)

MYSQL C API 사용시 아래와 같은 에러가 발생하는 경우가 있다.

MySQL Error> 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)

이 에러는  mysql_real_connect()에 host로 "localhost"를 넣는 경우 발생한다.
이럴 때는 host에 "localhost"대신에 "127.0.0.1"을 넣으면 문제가 해결된다.

MySQL libmysqlclient.so.18: cannot open shared object file: No such file or directory

CentOS에서 MySQL C API를 사용하는 프로그램을 실행 도중 위와 같은 에러가 발생했다.
find로 찾은 결과 다음과 같은 위치에 있었다.

[root@SE3576 src2]# find / -name  libmysqlclient.so.18
/usr/local/src/mysql-5.6.21/libmysql/libmysqlclient.so.18
/usr/local/mysql/lib/libmysqlclient.so.18

그래서 다음과 같이 LD_LIBRARY_PATH를 정해주어야 한다.
내가 작업하는 CentOS 서버의 경우에는 iconv.so까지 찾을수가 없어서 다음과 같이 정의했다.
export LD_LIBRARY_PATH=/usr/local/mysql/lib/:/usr/local/src/libiconv-1.14/lib/.libs/:$LD_LIBRARY_PATH





Android @hide 코드 호출하기

안드로이드에서 @hide로 정의된 코드는 소스에는 존재하나 SDK 사용시 일반적인 방법으로는 호출할 수 없다.

/** @hide */
public static int checkUidPermission(String permission, int uid) {
    try {
        return AppGlobals.getPackageManager()
                .checkUidPermission(permission, uid);
    } catch (RemoteException e) {
        // Should never happen, but if it does... deny!
        Slog.e(TAG, "PackageManager is dead?!?", e);
    }
    return PackageManager.PERMISSION_DENIED;
}

그런데 다음과 같이 Java reflection을 사용하면 호출이 여전히 가능하다.
Class c;
c = Class.forName("android.app.ActivityManager");
Method m = c.getMethod("checkUidPermission", new Class[] {String.class, int.class});
Object o = m.invoke(null, new Object[]{"android.permission.READ_CONTACTS", 10010});