6월, 2013의 게시물 표시

블로그 이전 합니다.

이미지
  블로그를 이전하려고 합니다 . 다른 서비스는 아니구요 같은 구글 블로거에 주소만 바꿔서 새로 만들려고 합니다. 이유는 이렇습니다. 구글 블로거에 신택스 하이라이터를 연동 후 블로그 포스팅이 구글 검색에 노출되지 않는 문제 발생 구글+ 연동 후 생긴 댓글 알림 문제  위 스샷들은 블로거에 신택스 하이라이터를 적용 후 작성한 포스팅들의 검색 결과입니다. 현 블로그를 내보내기 후 임시로 만든 블로그(wwforeverblogtest)에 가져온 것은 검색이 잘됩니다. 기존 블로그는 전혀 검색이 안되고요. 물론 예전건 검색이 잘되죠. 기존 블로그에서 신택스 하이라이터 스크립트 부분들 제거해도 안되는군요. 그래서 이전을 합니다.  네이버에서는 검색이 되는 불편한 진실이...  이 블로그에 올리는 마지막 포스팅이 될 듯 합니다. 새로운 곳으로 옮기고 이 블로그를 삭제할 예정입니다. 블로그 주소만 바뀌는거고 새로 포스팅하면 어짜피 구플에 연동되니 크게 상관은 없을 듯 하네요. 혹시 RSS로 받고 계셨던 분들은 수정하셔야겠죠. 새로운 블로그에서는 구글+ 연동하고 댓글 알림이 잘 오기를 기대해봅니다.  새 블로그는  http://westwoodforeverlog.blogspot.kr/  입니다.

Unity3D Android 91 Market Platform SDK Integration - 1. 준비작업

이미지
  유니티3D 안드로이드에 중국 GameNoll의 SDK 연동 을 했었습니다. 이번에는 중국에서 안즈와, 360마켓, 완또우자등과 함께 중국 안드로이드 시장을 대표하는 앱 마켓인 91.com의 마켓 플랫폼 SDK 연동을 위한 준비작업에 대해 포스팅해봅니다. GameNoll과 마찬가지로 해당 SDK 설치나 다운로드는 저도 제가 직접 받은게 아닌 업무적인 절차로 처리된 것을 받은것이라 이 부분은 잘 모르겠네요. SDK를 이미 가지고 있고 압축 해제까지 했다는 전제로 진행합니다. 1. 유니티3D 안드로이드 플러그인 기본 작업   유니티3D 안드로이드 Jar 플러그인 프로젝트를 만들어 기본적인 처리 를 합니다. 전 스샷과 같이 패키지명을 com.wwforever.plugin91 이라고 했습니다. 참고로 91측에서 요구하는 필수 개발사항중 패키지명에 91이 위 스샷과 같이 꼭 포함 되어야한다고 하네요.  다음으로 91SDK 압축해제 후 SDK_lib\91SDK_LibProject\libs 안에있는 NdComPlatform.jar 파일을 Java Build Path의 Add External JARs로 추가합니다. 2. AndroidManifest.xml 수정 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="and

Unity3D GameNoll SDK Android Integration - 1. 준비작업

이미지
 중국에는 수백개의 안드로이드 마켓이 존재한다고 합니다. 구글 플레이와 국내 티스토어 등의 몇개 안되는 마켓과 같이 각개격파하듯 대응하면 답이 없겠죠. 너무 많으니까요. 중국 퍼블리셔?측의 NollGame인지 GameNoll 인지(사이트는 GameNoll인데 SDK명이 NollGame)를 통하면 SDK하나로 몇백개의 중국 마켓을 커버할 수 있다고합니다. 이번 포스팅은 유니티3D 안드로이드 GameNoll SDK 연동에 대한 내용입니다.  GameNoll SDK를 어떻게 다운받는지는 모르겠네요. 저도 해외지원팀에게서 받은것이고 따로 직접 받으려고해도 중국사이트 접근자체가 안됩니다. 그러므로 SDK 다운로드 부분은 생략합니다.  또한 GameNoll이외 몇개의 중국 마켓 SDK 연동에 대해 글을 포스팅 예정인데요. 모두 서버딴 작업은 제외된 클라이언트 딴 작업에 대한 내용만 있다는걸 미리 말씀드립니다. 1. NollGame Lib 추가   유니티3D 안드로이드 플러그인 기본형 을 만든 후 GameNoll SDK\libs 디렉터리의 alipay_msp.jar와 NollGame-SDK-1.0-20130423.jar를 자바 빌드 패스에 추가합니다. NollGame-SDK는 파일명이 다를수 있겠네요. 유니티3D 플러그인 디렉터리에도 복사해줍니다. 2. CallbackListener 상속 클래스 추가  스샷과 같이 nollgame에 있는 CallbackListener을 부모 클래스로하는 콜백 클래스를 하나 만듭니다. 저는 CallbackNollGame이라고 만들었습니다. 3. 권한 설정 추가 <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"

Google Blogger SyntaxHighlighter로 소스코드 이쁘게 삽입하기

이미지
 그동안 제가 블로그에 정리했던 샘플 코드들이 위와같이 이쁘지 않았습니다. 구글 블로거에 그냥 텍스트 형식으로 붙여넣기가 되어버리는게 원인이었죠. 이번 포스팅은 구글 블로거에 소스코드를 이쁘게 삽입할 수 있는 신택스 하이라이터(SyntaxHighlighter) 를 적용하는 것을 정리해봅니다.  현재 3.0.83이 최신버전이네요. 최신버전 말고 2.1.382를 사용하시길 추천합니다. 3.0.83 사용했다가 제 블로그 최신 포스팅들이 검색 안되는 문제가 생겨서 블로그 이전하는등 삽질을 했었네요.  직접다운로드해서 자신의 서버에 설치하거나 자신의 구글 코드 프로젝트에 설치 후 적용하는도 가능한 듯 보이지만, 따로 설치없이 바로 웹 링크를 통해서 적용해보도록 하겠습니다.  블로거 -> 템플릿에서 사용중인 디자인의 HTML 편집을 클릭합니다. <link href="http://alexgorbatchev.com/pub/sh/2.1.382/styles/shCore.css" rel="stylesheet" type="text/css" /> <link href="http://alexgorbatchev.com/pub/sh/2.1.382/styles/shThemeDefault.css" rel="stylesheet" type="text/css" /> <script src="http://alexgorbatchev.com/pub/sh/2.1.382/scripts/shCore.js" type="text/javascript"> </script> <script src="http://alexgorbatchev.com/pub/sh/2.1.382/scripts/shBrushCpp.js" type="text/javascript">

Unity3D GameNoll SDK 로그인시 java.lang.NullPointerException

이미지
Shutting down VM threadid=1: thread exiting with uncaught exception (group=0x40a461f8) FATAL EXCEPTION: main java.lang.Error: FATAL EXCEPTION [main] Unity version     : 4.1.2f1 Device model      : Acer A500 Device fingerprint: acer/a500_ww_cus1/picasso:4.0.3/IML74K/1336617649:user/release-keys Caused by: java.lang.NullPointerException at com.nollgame.net.NollDialog.setUpTitle(NollDialog.java:231) at com.nollgame.net.NollDialog.onCreate(NollDialog.java:79) at android.app.Dialog.dispatchOnCreate(Dialog.java:353) at android.app.Dialog.show(Dialog.java:257) at com.nollgame.net.NollGame.memberLogin(NollGame.java:126) at com.Test.unityandroidjartest.MainActivity$2.run(MainActivity.java:75) at android.os.Handler.handleCallback(Handler.java:605) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4424) at java.lang.reflect.Method.invokeNative(Native Method) at jav

Unity3D error CS1525: Unexpected symbol `else'

Assets/Plugin91Manager.cs(124,20): error CS1525: Unexpected symbol `else' Assets/Plugin91Manager.cs(130,20): error CS1519: Unexpected symbol `else' in class, struct, or interface member declaration Assets/Plugin91Manager.cs(130,36): error CS1519: Unexpected symbol `==' in class, struct, or interface member declaration Assets/Plugin91Manager.cs(132,40): error CS1519: Unexpected symbol `=' in class, struct, or interface member declaration Assets/Plugin91Manager.cs(136,20): error CS8025: Parsing error  유니티3D 안드로이드에 중국 91 마켓 Platform SDK 연동중에 위와 같이 에러가 발생했습니다. 오류 메세지를 보면 딱히 91 마켓 SDK 문제는 아니고 문법적인 이슈인 듯하죠. // public static final int UPDATESTATUS_NONE = 0; // 이미 최신 버전임 if (strResult == "0") { this.strLogMsg = "Update None"; } // public static final int UPDATESTATUS_UNMOUNTED_SDCARD = 1; // SD 장착 안됨 else if(strResult == "1") { this.strLogMsg = "Update Failed. SDCard Unmounted"; } // public static final int UPDATESTATU

Unity3D Android GCM Integration - 3. Send Single, Multi Push(without Server)

이미지
  유니티3D에 안드로이드 GCM 클라이언트 부분인 Sender ID 등록과 푸시 메세지 핸들링 후 알림 띄우기 까지 정리해봤습니다. 이번에는 마지막으로 서버측 처리를 정리하겠습니다. 하지만 미리 언급했듯이 JSP나 PHP등의 서버가 아닌 안드로이드 자바딴에서 클라이언트 + 서버 기능을 사용하는 내용입니다. 1. GCM Server 라이브러리 준비   안드로이드 Jar 프로젝트 빌드를 위해 gcm 서버 기능을 사용하기 위해 gcm-server.jar 파일을 자비 빌드 패스에 추가해줍니다. 위치는 스샷에 보이는 것과 같이 androidsdk/extras/google/gcm/gcm-server/dist 에 있습니다.  당연히 유니티3D 최종 빌드를 위해 플러그인 디렉터리에도 복사를 해줍니다.  마지막으로 androidsdk/extras/google/gcm/gcm-server/lib 에 있는 json_simple-1.1.jar파일을 유니티3D 플러그인 디렉터리에 복사해줍니다. 이것이 없다면 java.lang.NoClassDefFoundError : org.json.simple. JSONValue 오류가 발생합니다. 2. GCM에 단일 또는 멀티로 푸시하기  원래는 자체 서버딴에서 처리해야할 푸시 기능을 안드로이드 프로젝트에 자바로 구현한 부분을 정리해보겠습니다. 아래는 기존 MainActivity에 추가 된 것입니다. public class MainActivity extends UnityPlayerActivity { private final String LOG_TAG = "UNITY_GCM_TEST" ; private final String GCM_SENDER_ID = "xxxxxxxxxxxx" ; // API ACCESS KEY private final String API_KEY = "xxxxxxxxxxxxxxx" ;

Unity3D GCM java.lang.NoClassDefFoundError: org.json.simple.JSONValue

이미지
FATAL EXCEPTION: AsyncTask #1 java.lang.Error: FATAL EXCEPTION [AsyncTask #1] Unity version     : 4.1.2f1 Device model      : Acer A500 Device fingerprint: acer/a500_ww_cus1/picasso:4.0.3/IML74K/xxxxxxx:user/release-keys Caused by: java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:278) at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) at java.util.concurrent.FutureTask.setException(FutureTask.java:124) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) at java.lang.Thread.run(Thread.java:856) Caused by: java.lang.NoClassDefFoundError: org.json.simple.JSONVa

cocos2d-x Unity3D 처럼 쉽고 빠르게 개발할 수 있을까?

이미지
 cocos2d-x로 게임 개발하시는게 많이들 불편하시진 않았나요? 퍼포먼스 이슈나 외부 SDK 연동 이슈 같은 것을 제외하고라도 첫 시작인 프로젝트 개발 환경 설정하는 것에서부터 최종 빌드하는 것까지 마무리 할려면 한번쯤 곤욕을 치루게되죠. 제 블로그의 수많은 포스팅들이 그 것을 증명?을 해주고 있습니다. 상용 엔진이 아닌 오픈소스 엔진이다보니 어느정도 불편함을 감안한다고 하더라도 많은 사람들이 스트레스를 적잖이 받은건 사실입니다. cocos2d-x 2.1.4 업데이트  약 하루전에 cocos2d 씨리즈가 5번째 합동? 릴리즈 를 했습니다. 지속적인 업데이트가 이루어지는 모습 보기 좋네요. 간단히 하이라이트를 보면, Highlights Added support for  XMLHttpRequest  and WebSocket on JSB Added support for encoded JavaScript files and add  command line tool  for generating javacript code Upgraded Spidermonkey to v21 Added support for Emscpriten and Tizen port,  usage of Emscpriten  and  usage of Tizen AssetsManager downloads resources in a new thread CCLabelTTF  supports shadows and stroke Added support for ETC1 image format on Android Added many test cases for Lua bindings Added more plugins: weibo, twitter  위와 같고 자세한 업데이트 체인지 로그 는 링크를 통해 확인할 수 있습니다. 크게 눈에 띄는건 WebSocket 추가, CCLabelTTF에서 그림자 처리 지원,  Lee Jae-Hong님께서 cocos2d-x를 타이젠으로 포팅 하신 것이 정

Unity3D 91.com SDK android.content.res.Resources$NotFoundException: Resource ID #0x0

이미지
FATAL EXCEPTION: main java.lang.Error: FATAL EXCEPTION [main] Unity version     : 4.1.2f1 Device model      : Acer A500 Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wwforever.plugin91/com.nd.commplatform.activity.SNSLoginActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x0 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) at android.app.ActivityThread.access$600(ActivityThread.java:123) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4424) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784

APK 파일 Compile, Decompile 해보자. APK Manager

이미지
 안드로이드를 사용한다면 한번쯤 APK Manager라는 것을 들어봤을 수 있습니다. 보통 테마를 만든다던지, 게임 데이터 조작이나 리소스 추출 또는 변경등을 하기위해 APK Mnager를 사용 하는 것 같더군요.  제 경우는 중국 SDK를 연동중에 이상한 요구사항때문에 만지게 되었는데요, 요구사항에 대한 것은 다음에 중국 SDK 연동 포스팅에서 정리하기로하고 이번 포스팅에서는 직접 개발한 APK파일을 APK Manager로 컴파일, 디컴파일하는 것을 정리해보겠습니다. 보통은 framework-res.apk와 SystemUI.apk등을 필요로하는 것 같더군요. 1. APK Manager 설치   Redmaner라는 분의 블로그 에 가보면 링크를 통해 다운로드 할 수 있습니다. 또는 아래 링크를 클릭해 직접 다운로드합니다. 5.1이 최신인 듯하네요. 블로그를 보니 요구사항으로 자바 1.6과 안드로이드 SDK를 필요로하니 설치되지 않은분은 설치 하시기 바랍니다. APK Manager 5.1 Windows  다운로드 후 적당한 곳에 압축해제합니다. 2. 디컴파일  place-apk-here-for-modding 디렉터리에 작업을 진행할 APK 파일을 넣어줍니다. AndroidBuild.apk와 Unity3DBuild.apk를 넣어봤습니다. 이름 그대로 이클립스에서 빌드한 순수 안드로이드 apk 파일과 유니티3D에서 빌드한 안드로이드 apk파일입니다.  상위 디렉터리에 있는 Script.bat를 실행하면 위와같이 콘솔창이 뜹니다. 작업할 apk를 선택하기위해 22를 입력합니다.  작업 디렉터리에 넣었던 apk가 보입니다. AndroidBuild.apk로 진행해 보겠습니다. 1을 선택합니다.  오른쪽 위에 보면 선택한 apk명이 보입니다. Decompile apk인 9번을 선택하면 디컴파일이 진행됩니다.  디컴파일된 apk의 파일들은 projects안에 파일명과 같게 생성 된 디렉터리 안에 생성됩니다.