안드로이드 프로젝트 테스트를 위해


새 프로젝트 만들기 메뉴의 [Android Project from Existing Code]로 안드로이드 프로젝트를 만드려고 하던 도중 다음과 같은 에러메시지가 떴다.


Error

Invalid project description


Reason:

Invalid project description.



[Details >>] 를 확인해보니 간단한 문제였다.


import 할 소스코드들을 프로젝트 디렉토리에 옮겨두고 새로운 프로젝트를 만드려고 시도해서


동일한 이름의 폴더가 이미 존재하기때문에 생긴 에러였다.


원본 폴더를 다른 폴더로 옮겨두고 다시 시도하니 문제없이 새로운 프로젝트가 생성되었다.



Posted by Kugi
,



안드로이드 폰에서 카메라 동영상을 연속적으로 촬영할 수 있도록 하기 위해 여러 인터넷 소스코드들을 실험해보던 도중


안드로이드펍에서 찾은 어느 소스[각주:1]를 돌려보았더니 MediaRecorder의 start() 부분에서 start failed 에러가 생겼다.


start failed: -19


구글링을 통해 다양한 해결 방법을 시도하다가 찾아낸 성공적인 해결 방법[각주:2]


setVideoFrameRate(...) 부분을 제거하는 것이었다.


내가 사용한 코드에는 프레임레이트 설정을 16으로 지정하도록 되어있었는데 이 부분을 주석처리하니 제대로 동작하였다.









  1. http://www.androidpub.com/431977 [본문으로]
  2. http://stackoverflow.com/a/11281902 [본문으로]
Posted by Kugi
,



안드로이드에서 동영상 목록을 뿌려주려고 Cursor 객체를 받아오려는데


managedQuery(Uri, String[], String, String[], String) 함수를 사용하려고 했더니 다음과 같은 deprecated되었다는 경고메시지가 떴다.


The method managedQuery(Uri, String[], String, String[], String) from the type Activity is deprecated



그냥 사용 가능하지만 거슬리기때문에 수정할 필요가 있겠다.


(Activity를 상속한 클래스 내에서라면) 경고메시지를 없애기 위해 다음의 메소드로 변경해주면 된다.


물론 여기서, 메소드 호출할 때의 파라미터는 각자의 용법에 맞게 고쳐 쓰도록 한다.


getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);



이 메소드의 원형은 다음과 같다.

Cursor android.content.ContentResolver.query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)





참고: http://stackoverflow.com/questions/12714701/deprecated-managedquery-issue

Posted by Kugi
,



간단한 테스트용 클래스를 만드는데  vector때문에 컴파일 에러가 발생했다.


error C2143: 구문 오류 : ';'이(가) '<' 앞에 없습니다.

error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다.

error C2238: ';' 앞에 예기치 않은 토큰이 있습니다.


헤더 선언 [#include <vector>] 및 네임스페이스 선언 [using namespace std;]는 미리 컴파일된 헤더[stdafx.h]에 추가해두었기 때문에

정상적으로 컴파일이 되어야 했으나 그러지 못했다.


짐작되는 원인으로는,

openCV라이브러리를 사용하고 있는데 이 라이브러리 내부의 네임스페이스와 겹치거나 하는 일이 생기는 듯 하다.



vector 선언에 네임스페이스를 명시해주니 문제가 해결되었다.

  --> std::vector<PCTYPE> m_ticks;



header


#pragma once

#define PCTYPE		__int64

class PerformCheck
{
private:
	PCTYPE m_lastTick;
	PCTYPE m_currentTick;

	vector<pctype> m_ticks;   // a compile error occurred here. attach "std::"

public:
	PerformCheck();
	~PerformCheck();

public:
	// Add current tick count to the queue with incremental index.
	// @return: elapsed time from last call to current call
	PCTYPE AddCheck();

	PCTYPE GetElapsed(const unsigned int& idxFrom, const unsigned int& idxTo);

	inline
	void Clear()
	{
		m_ticks.clear();
		m_lastTick = cvGetTickCount();
	}
};


Posted by Kugi
,



Problem:


오랜만에 Cpp 프로젝트를 다루다가 한 줄 짜리 클래스 멤버 함수를 inline으로 선언했더니 에러가 발생했다.


1>main.obj : error LNK2019: "public: FunctionType ClassName::FunctionName(void)" (?FunctionName@ClassName@@ObjID) 외부 기호(참조 위치: _main 함수)에서 확인하지 못했습니다.

1>...\test.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.



Solution:


해결 방법은 간단하다.


클래스 멤버 함수의 경우, inline으로 선언하면 함수 정의는 .cpp가 아닌 .h파일에 포함되어야 한다.







예전에도 비슷한 실수를 한 적이 있었는데, 또 저지르고 말았다. 반성... ㅜ ^ ㅜ

Posted by Kugi
,