본문 바로가기

Programming

Privacy Policy Privacy Policy 1. Introductionpuppy develops and publishes various mobile applications for smartphones and mobile devices. We are dedicated to protect our users' (“users” or “you”) privacy rights. The purpose of this page is to inform you about our policies with the collection, use, and disclosure of Personally Identifiable Information(“PII”) if anyone decided to use the applications or software.. 더보기
Java의 리플렉션 API java.lang.Class#forName 클래스명으로부터 Class 객체를 취득한다. java.lang.Class#forName 객체를 생성한다. java.lang.Class#getConstructor 생성자 객체를 취득한다. java.lang.Class#getMethod 메소드 객체를 취득한다. java.lang.Class#getField 필드 객체를 취득한다. 더보기
특정 라이브러리가 없으면 설치 안되게 하기 특정라이브러리가 없으면 설치 안되게.... 설치 할 수 없다는... 에러메시지... [2012-12-12 10:39:25 - ApiDemos] Installation error: INSTALL_FAILED_MISSING_SHARED_LIBRARY [2012-12-12 10:39:25 - ApiDemos] Please check logcat output for more details. [2012-12-12 10:39:25 - ApiDemos] Launch canceled! 더보기
JNI 네이밍 규약 Java___ (JNIEnv* pEnv, ...) 첫번째 인자는 언제나, JNIEnv타입.그다음 인자는 자바 메소드의 실제 매개변수들. 더보기
이진검색 (Binary Search) 이진검색이란 ? 이진검색은, 정렬된 데이터에서 특정한 데이터를 찾는 방법이다. . 처음과 중간의 값을 임의의 값으로 선택하여, 그 값을 찾고자 하는 값과 크고 작음을 비교하는 방식을 채택한다. 또 다시, 처음 선택한 중앙값이 만약 찾는 값보다 크면 그 값은 새로운 최고값이 되며, 작으면 그 값은 새로운 최하값이 된다. 이 일을 반복한다. 예를 들어, 아래 16개의 데이터에서, 1개의 숫자를 찾는다고 하면... 4번의 시도로 숫자를 찾을 수 있다. 따라서, 복잡도는 O(logN)이 된다. 계산해 보면, 생각해보면 당연한 일. 내가 하던.. 사전에서 자주 사용하던 알고리즘이다. 관련 위키 : http://ko.wikipedia.org/wiki/%EC%9D%B4%EC%A7%84_%EA%B2%80%EC%83%8.. 더보기
[DRM] 마켓별 DRM 적용방법. 1. DRM 적용 스토어 리스트.1. 구글 스토어 2. 티스토어 3. 삼성앱스4. 올레마켓 2. 적용방법 # 각 스토어 별로 DRM 적용 방법은 , 각 스토어 별로 안내 지침 보셔야 합니다. 제가 하나하나 알려 드리면 좋지만, - 스토어 별로 DRM이 주기적으로 업데이트 되며, ( DRM 라이브러리의 버전이 맞지 않다면, 리젝됩니다. ), 주기적으로 소스도 바뀝니다. - 파일 하나로 끝나는 것이 아니라, java 파일, manifest파일, proguard관련 설정 까지 경우에 따라서 맞추어야 합니다. 그래서, 스토어 안내사항 보시는 것이 최고입니다. # 스토어별 링크 1. 구글 스토어 - 추가적 DRM 필요 없습니다. 2. 티스토어 - http://dev.tstore.co.kr/devpoc/downlo.. 더보기
안드로이드 개발자 간담회 후기 ( 2 ) 안드로이드 개발자 간담회 각 세션에 대한 상세 설명을 기록해 보자. ^^ 감상평은 요기. 2012/09/18 - [Programming/android] - 안드로이드 개발자 간담회 후기 ( 1 )앞쪽에서는, 열심히 적었는데.. 뒤로 갈수록 졸음이 밀려와서 약간은 기록이 허술하다. ㅜ_ㅜ 사진 출처는 : 권순선 님의 구글 플러스 모든 세션은 영어로만 진행되고, 통역지원조차 되지 않아 불가피하게 영어로 필기. 뭐 통역하면서 필기하는 것이 더 어려우니까.. 휴..흠... 몇가지만 한글로 살짝 통역하고... 나머지는 뭐 패스. ^^;; 아, 발표 내용중에 VSync라는 내용에 대하여, 조금은 길게 설명했는데...이는 잘 모르겠는 내용. 공부가 필요하다. 1st. Definitive Android Design (.. 더보기
안드로이드 개발자 간담회 후기 ( 1 ) 휴가 중 짬을 내어, 안드로이드 개발자 간담회에 다녀왔다. 열정적인 개발자들이 참 많았던 자리, 이런 모임은 항상 스스로를 독려하게 한다. 발표자들의 모습을 보면... 타고난 재능을 기반으로, 즐겁게 최선을 다하며 개발을 즐기고 있는 그들의 모습이 느껴진다.나는 정말 그들만큼 하면서, 주어진 현실을 비판하고 있는 것일까? 아이구야, 이상한 사족이 길다. 강남 파이낸스 센터 . 구글 본사에서 진행된, 안드로이드 간담회.권순선 부장님의 구글 플러스에서 가져온 사진입니다.70여명의 사람들이 모여있다. 우르르르~ 열정적인 개발자님들... 항상 존경스럽다. 흠, 세션은 다음과 같다. 상세 일정 - 6:00 ~ 6:30 저녁식사 - 6:30 ~ 7:00 Android Design Guide - 7:00 ~ 7:30.. 더보기
android weightSum사용하기. parent에 weight_sum을 1로 정하시고, child에 layout_weight 을 .7로 주면.. 70%를 차지하게 됩니다. http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1" android:background="#ffffffff"> 안드로이드 한지, 2년만에 알게된, 새로운 사실... -_-;;; 출처 : http://www.androidpub.com/1507297 더보기
Android sqlCipher Proguard 오류시... SQLCIPHER In Android development, you probably want to encrypt the database (*.sdf) so that user (especially with rooted device) can't read the database without the application; for example, using SQLite Database Browser (http://sqlitebrowser.sourceforge.net). Fortunately, you can useSQLCipher (http://sqlcipher.net) to complete the task. Here are the implementation steps:Download the latest SQLC.. 더보기
sqlCipher 요즘, 프로젝트에 sqlCipher를 쓰고 있다...sqlite 암호화 툴로, 안드로이드, IOS, php등 다양하게 사용 가능합니다.공식 홈페이지 : http://sqlcipher.net/ # 헌데 생긴 문제점 !! Performance가 너무 안나왔다.데이터가 70000건까지는 원활한 속도로 수행하였으나, 뭐, 120000건이 넘어가자... 쿼리 하나를 하는 속도가 2초까지 나왔다. 흠...쿼리를 아무리 최적화하고, 인덱스를 잡고 등등 다해도....나는 200000건이 넘어가는 테이블도 있었는데... ㅠ_ㅠ 왜그렇게 만들었냐고 묻는다면, 내가 안만들었으니 주는대로 쓸뿐이다...이 정도까지 모바일에서 사용해보겠다고 만들어본것도 조금은 용감하네... 흠... 그래서, 적용하다가... 일부 중요한 데이터에.. 더보기
안드로이드 복사한 데이터 베이스 사용하려면, 파일은 asset에 넣고, 복사하여 사용하면, 되지만, "android_metadata"라는 테이블이 없으면, 오류가 생긴다. Locale정보를 저장한다는.http://developer.android.com/reference/java/util/Locale.html * 데이터베이스를 열 때, 생성한 데이터베이스가 아닌 외부에서 만들어져서 복사된 데이터 베이스인 경우 android_metadata라는 테이블이 데이터베이스 마다 존재해야 하며, 해당 테이블에는 로케일과 관련된 정보가 저장된다. 다음과 같은 쿼리 둘을 실행시켜 테이블을 생성하고, 필드를 추가해야 한다.CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'ko_KR')INSERT INTO "andro.. 더보기
서식 문자의 종류 서식문자 출력 형태 %c 단일 문자 %d 부호 있는 10진 정수 %i 부호 있는 10진 정수, %d와 같음 %f 부호 있는 10진 실수 %s 문자열 %o 부호 없는 8진 정수 %u 부호 없는 10진 정수 %x 부호없는 16진 정수, 소문자 사용 %X 부호없는 16진 정수, 대문자 사용. %e e 표기법에 의한 실수 %E E 표기법에 의한 실수 %g 값에 따라서 %f, %e 둘 중 하나를 선택 %G 값에 따라서 %f, %E 중 하나를 선택 %% % 기호출력 * 서식 문자를 응용해, 필드 폭을 지정. 서식 문자 출력의 형태 %3d 필드 폭을 3칸 확보하고 오른쪽 정렬하여 출력. %-3d 필드 폭을 3칸 확보하고 왼쪽 정렬하여 출력. %+3d 필드 폭을 3칸 확보하고 오른쪽 정렬한 상태에서 양수는 +, 음수는.. 더보기
카카오톡 테마 만들기 시간이 살짝 비는데, 카카오톡 테마를 만들어볼까나,http://www.kakao.com/talk/theme 더보기
cocos2dx android back키 적용 요약. -> 안드로이드 하드웨어키인 back키를 누르면 종료되도록 한다. 1. I added a virtual void keyBackClicked(); in MainMenu.h2. Then in MainMenu.cpp I added this->setIsKeypadEnabled(true); 3. in MainMenu::init() and added a method: void MainMenu::keyBackClicked() { CCDirector::sharedDirector()->end(); } 출처 http://www.cocos2d-x.org/boards/6/topics/5041?r=10363#message-10363 더보기
안드로이드 단말별 해상도 정보 (단위 : 픽셀) 범주기기명가로세로가로비세로비Apple아이패드768102411.3아이폰4G64096011.5아이폰3G32046011.4375HVGAG1, 옵티머스1, 이자르 등32048011.5WVGA 800넥서스원, 갤럭시S, 갤럭시S2, 디자이어 등48080011.66WVGA 854모토로라, 드로이드, XPeria, X10 등48085411.777인치 태블릿킨들파이어, 누크태블릿, 갤럭시탭 7인치600102411.710인치 태블릿갤럭시탭 10.1, Asus transformer800128011.610인치 태블릿2모토로라 XOOM720128011.77-갤럭시 S2 LTE, 갤럭시 S3720128011.77갤럭시 노트800128011.6갤럭시 넥서스720128011.77 잘못 기재된 내용이 있다면, 덧글.. 더보기
GPL라이선스 정보 http://www.gnu.org/licenses/gpl-faq.ko.html#AnonFTPAndSendSources 항상 잊기 때문에... 기록해둔다. 더보기
android NDK 개발하기 설정. 출처 : http://thdev.net/117Android NDK r7(최신버전)을 설치하고 build하는 방법을 설명하겠습니다. r7 이라고해서 기존 버전과 설치 방법이 다르거나 하지는 않았습니다. 다른 블로그를 참고해서 실행방법을 알아보고 제 환경에 맞는 NDK를 사용해보았습니다. 이번 글은 Ubuntu에서 NDK를 설치하고 NDK에서 제공하는 예제 코드를 사용해서 테스트 해보도록 하겠습니다.android 개발자 페이지  http://d.android.comNDK 다운받기 NDK는 위의 홈페이지로 접속하여, SDK -> android NDK, r7 을 클릭하시고 해당 OS 버전에 맞는 NDK를 다운 받으시면 됩니다.다운 받은 NDK를 압축 해제하기 명령어를 통한 압축 해제 방법입니다. tar -xvf.. 더보기
byte to long conversion package handler.file; public class ByteHandler {/** * long -> byte array * @param data * @return */ public static byte[] toByte(long data) { return new byte[] { (byte)((data >> 56) & 0xff), (byte)((data >> 48) & 0xff), (byte)((data >> 40) & 0xff), (byte)((data >> 32) & 0xff), (byte)((data >> 24) & 0xff), (byte)((data >> 16) & 0xff), (byte)((data >> 8) & 0xff), (byte)((data >> 0) & 0xff), }; } /*.. 더보기
C로 소숫점 반올림하기 아래의 소스를 참조합니다.반올림 하는 매크로를 작성하여 사용합니다. #include 를 하는 것을 잊지 맙시다.예 : RoundOff.c/* * RoundOff.c * Created on: 2012. 4. 10. * Author: Lee Hyun Jung */#include #include #include /** * num : 반올림할 대상 * point : 반올림할 자릿수 */#define roundOff(num, point) ((floor((x)* (pow(10, point)) + 0.5)/ (pow(10, point)))) int main() {double x = 12345.67847897; int i; for(i=2; i 더보기
자바로 소수점 반올림하기 음수일 경우에도 정상작동하며, 로직은 곰곰히 생각하시면, 이해가실 겁니다~아래의 roundOff method 이용 한다. 예 : RoundOff.javapackage round; public class RoundOff {public static void main(String[] args) {for(int i=2; i< 9; i++){System.out.println(roundOff(3.146592416, i));} }/** * num : 반올림할 숫자. * point : 어디까지 반올림할 것인가?. */public static String roundOff(double num, int point){return String.valueOf(Math.floor(num * Math.pow(10, point) + .. 더보기
Sqlite 문자 합치기. Sqlite에서의 문자열 합치기는 ||를 이용한다. 사용예 > SELECT "▶ " || CountryName AS CountryName FROM Country; 더보기
Sqlite에서의 Replace문. 문자열 Replace시 사용. replace(X,Y,Z) The replace(X,Y,Z) function returns a string formed by substituting string Z for every occurrence of string Y in string X. The BINARY collating sequence is used for comparisons. If Y is an empty string then return X unchanged. If Z is not initially a string, it is cast to a UTF-8 string prior to processing. 출처 > http://www.sqlite.org/lang_corefunc.html#replace 사용예.. 더보기
SQLite 에서의 NULL 체크 Sqlite에서의 NOT NULL은 다음과 같이 체크. >> COLUMN_NAME IS NULL >> COLUMN_NAME IS NOT NULL 사용예 > SELECT CountryName FROM Word WHERE CountryName IS NOT NULL 더보기
sqlite 에서의 if문. 특별히, if문은 존재하지 않는듯. 공식 홈페이지 가면, if문 대신 case문을 쓰라고 한다. 상세 설명은 다음과 같음... 읽어볼 사람은 읽어보시고, The CASE expressionA CASE expression serves a role similar to IF-THEN-ELSE in other programming languages. The optional expression that occurs in between the CASE keyword and the first WHEN keyword is called the "base" expression. There are two basic forms of the CASE expression: those with a base expression an.. 더보기
안드로이드 문자 보내기 (2) 안드로이드 문자 어플리케이션을 통해서 보내는 방법은 다음과 같다. # MIME type을 이용 ("vnd.android-dir/mms-sms") # 이렇게 하면, 실행됨. private void sendSmsByApplication(){ Intent i = new Intent(Intent.ACTION_VIEW); i.putExtra("address", "01025481781"); i.putExtra("sms_body", "Hello my friends!"); i.setType("vnd.android-dir/mms-sms"); startActivity(i); } 하지만, 갤럭시 탭에서는 에러가 발생한다. 실행할 문자 어플리케이션이 없어서 그렇다. 이런 경우, Exception발생. 다음과 같은 Except.. 더보기
안드로이드 문자보내기 (1) 문자를 보내는 방법은, 다음과 같다. 1. AndroidManifest.xml 파일에 퍼미션을 추가한다. 2. 자바 코드에 코드를 추가한다. 전화기능이 없는 갤탭 10인치에서는 NoService가 옴. public class MainActivity extends Activity { private Button btnSendSMS; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); findViewById(R.id.btnSendSMS).setOnC.. 더보기
Intent.FLAG_ACTIVITY_CLEAR_TOP Intent.FLAG_ACTIVITY_CLEAR_TOP flag ensures that the series of activities in the backstack is cleared. 더보기
ActionBar에 메뉴 넣기. 액션바에 메뉴를 넣는 방법은 , 1. Activity의 public boolean onCreateOptionsMenu(Menu menu) 메소드를 오버라이드 한다. 메뉴를 넣을려면 이 메소드를 오버라이드 한다. 2. Activity의 public boolean onOptionsItemSelected(MenuItem item) 메소드를 오버라이드한다. 메뉴가 나오고, 메뉴가 선택되면 호출된다. 예제 public class ActionBarExample01Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.. 더보기
Action Bar 숨기기 액션바는 상단의 타이틀이 보이는 화면을 말한다. 이를 숨기는 방법은 여러가지가 있다. 1. AndroidManifest.xml파일에서 숨기는 방법. theme를 다음과 같이 지정. 2. java코드에서 숨긴다. 액티비티 안에서 다음과 같이 코드를 만든다. public class ActionBarExample01Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ActionBar actionBar.. 더보기