여기서 중요한점은 @Override 를 쓰면 오류난다는 것이다.
왜냐하면 openFileChooser 메소드는 프레임웍에서 @hidden 처리되어있기때문에 sdk 에서 보이지 않기 때문이다.
하여튼 인앱브라우저에서 파일첨부를 하려고하면 저 메소드가 자동으로 호출되게 된다.
우리가 할일은 위 코드처럼 file chooser 를 열어주고 결과를 uploadMsg 로 다시 돌려주면 된다.
코드는 아래와 같다.
private static final int FILECHOOSER_RESULTCODE = 1;
private ValueCallback<Uri> uploadMessage = null;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
android 자동빌드환경을 구성할때 가장 힘들었던것이 emulator 가 켜져있어야만 테스트를 돌릴수 있다는 것이었습니다.
google 에서는 emulator 를 자동으로 켜고 부팅시까지 기다리고 자동으로 꺼주는 스크립트를 지원해주지 않는데 자동으로 빌드하기위해선 이런것들이 꼭 필요하기 때문에 직접 만들어보았습니다.
OS 는 윈도우이고 sdk 버젼은 r16 이고 ant build 환경이 갖추어져있다는 가정하에 이 문서를 작성합니다.
(ant 빌드환경 구성방법은 이전 글을 참조하세요.)
* 목적 android 기본적으로 제공되는 ant 스크립트로 자동 build 환경을 구성하는 방법을 알아보도록 하겠습니다.
* android project 만들기 - 기존 이클립스 프로젝트 만드는것과 동일합니다.
* ant project 만들기 - sdk/tools 디렉토리 path 설정 여기서는 sdk 에 포함되어있는 툴을 많이 사용하기때문에 path 로 잡아두는것이 편합니다. androidsdk/tools 디렉토리를 path 에 포함시킵니다.
- android update project ./ 실행 해당 프로젝트 디렉토리로 가서 아래 명령어를 실행하면 자동으로 build.xml 파일이 생성됩니다.
android update project –p ./
- keystore 설정하기 패키징을 하기위해서는 keystore 파일을 설정해야 합니다.
local.properties 파일을 열어서 아래와같이 keystore 의 위치와 alias 를 잡아줍니다.
* 컴파일직전에 config 설정하기 - build.xml 수정하기 maven 에서처럼 컴파일전에 자동으로 config 를 수정하도록 하려면 아래와같은 코드를 build.xml 에 추가합니다. 그리고 ant 실행시 파라메터에 config 를 변경해주면 됩니다.
<!-- extension targets. Uncomment the ones where you want to do custom work in between standard targets --> <property name="config" value="beta" /> <target name="-pre-build"> <echo>config setting!</echo> <delete file="src/config.properties" /> <copy tofile="src/config.properties" file="config/config_${config}.properties" /> </target>
* ant 를 이용하여 빌드하기 프로젝트 디렉토리에서 아래와같은 명령으로 빌드를 해볼수 있습니다. 단 이전에 ant 는 받아서 path 로 잡혀 있어야 합니다.
- ant debug -> debug 키로 빌드해서 bin 디렉토리에 apk 생성 - ant debug install -> debug 키로 빌드해서 bin 디렉토리에 apk 생성하고 디바이스에 설치 - ant release -> release 키로 빌드해서 bin 디렉토리에 apk 생성 - ant release install -> release 키로 빌드해서 bin 디렉토리에 apk 생성하고 디바이스에 설치 - ant debug install run –> apk 생성하고 디바이스에 설치해서 실행해보기 - ant debug install run –Dconfig=beta –> beta 환경으로 디바이스에서 실행해보기 - ant emma debug install test –> test 를 돌리고 emma coverage report 를 뽑아냅니다. (test 프로젝트에서 실행)
* 문제점 - maven 에서와같이 dependency 를 관리해주지 않아서 수동으로 해야 합니다.
public class HelloActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
TextView tv = (TextView) findViewById(R.id.textView1); tv.setText(Constants.URL); } }
* 디렉토리 구조 만들기
- config 디렉토리를 생성하고 config_beta.properties,config_real.properties 파일을 만들어서 집어넣습니다.
- 위와같은 형태로 디렉토리 구조를 만듭니다. - config_beta.properties 파일과 config_real.properties 파일에는 beta 와 real 에서 사용될 적절한 환경변수를 집어넣습니다.
* 필요한 eclipse 플러그인 설치 (마켓에서 다운로드 가능합니다.) - Maven Integration for Eclipse - Android Configurator for M2E
* 이클립스 환경설정 - maven 3.0.3 이상 설치 --> http://maven.apache.org/download.html 현재의 eclipse 플러그인의 maven 은 3.0.3 이하 버젼이라서 최신버젼을 다운받아야 합니다. 다운받은후에 eclipse 의 maven 설정에서 설치한 3.0.3 을 선택해 줍니다.
- jdk 6이상 선택 이클립스 기본 컴파일러를 jdk 6 이상으로 선택해 줍니다. jre 가 선택되어 있다면 컴파일시 오류납니다.
* eclipse 에서 android 프로젝트 생성 - 이 부분은 기존의 android 프로젝트 생성하는것과 동일합니다.
* maven 프로젝트로 변경 - 생성된 android 프로젝트에 마우스오른쪽 -> Configure -> Convert to maven project 를 클릭합니다.
위와같이 입력하면 pom.xml 이 생기면서 maven 프로젝트가 됩니다.
- 추가후 바로 오류가 나는데 아래와같이 pom.xml 파일을 변경하면 오류가 없어집니다.
이것은 디코딩을 할때 원본크기의 1/2 로 디코딩하라는 말입니다.
즉 inSampleSize 의 역수만큼의 크기로 사이즈를 줄입니다.
예를들어 4 라면 1/4 로 이미지가 줄어서 디코딩 되게 되죠.
어차피 사이즈를 줄일껀데 소스이미지 전체를 메모리에 올릴필요가 없습니다.
결국 이미지를 줄이기 위해서는 inSampleSize 를 이용하여 줄이고자하는 크기의 최대한 근접한 값으로 줄인후에 createScaledBitmap 함수를 호출해서 정확하게 줄이는것이 OutOfMemoryError 를 피하는 방법입니다.
RECENT COMMENT