검색

레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Android인 게시물을 표시합니다. 모든 게시물 표시

2021년 4월 15일

라스베리파이 4 - Android

 작업환경

  • Model : MacBook Pro (16-inch, 2019)
  • CPU : 2.3 GHz 8코어 Intel Core i9
  • GPU : AMD Radeon Pro 5500M 4 GB
  • MENORY : 16GB
  • DISK : 1TB SSD
  • OS : macOS Big Sur 11.2.3
기기
  • DEVICE : Raspberry Pi 4 (4G RAM)
  • DISK : 64GB SD Card 


① 라스베리파이용 안드로이드 OS 이미지 다운로드

OS 이미지를 다운로드 하기 위하여 LineageOS 홈페이지를 방문했으나 LineageOS 팀 공식 지원 배포본이 없어 다음 경로의 사용자 커스텀 빌드 본을 사용하였다.


https://konstakang.com/devices/rpi4/LineageOS17.1/


② SD 카드에 OS 이미지 쓰기

 SD 카드에 이미지를 쓰는 작업은 balenaEtcher 를 사용하였다.  다운로드한 .zip 파일을 이미지 파일로 선택하고 쓰기 대상 SD 카드를 선택 Flash 버튼을 클릭하면 쓰기가 진행하면 된다. 


③ 라스베리파이 시작

SD 카드를 삽입하고 전원을 켜면  아래와 같은 화면이 보여지는데 안내에 따라 설정을 진행하면 된다.


인터넷 사용을 위하여 WIFI 연결 설정했지만 반복적으로 연결이 끊기는 현상이 발생하여 랜선으로 연결하였다. 




2017년 12월 5일

안드로이드에서 Glide 를 이용한 GIF 이미지 사용

안드로이드에서 GIF 이미지를 보여주는 가장 쉬운 방법중 하나는 강력한 이미지 로드 도구인 glide 라이브러리를 사용하는 것이다.

환경 설정

참고로 실재 적용한 안드로이드 API 버전이 5.1 인 이유에서 4.x 버전을 사용하지 않고 3.x 버전을 사용하였다.

Gradle 빌드환경에서는 아래와 같이 build.gradle 파일에 의존성을 추가하면 된다.

repositories {
  mavenCentral()
  maven { url 'https://maven.google.com' }
}

dependencies {
    compile 'com.github.bumptech.glide:glide:3.8.0'
}

다운로드한 jar 파일을 사용하여 의존성을 추가하는 경우는 아래와 같이 설정한다. (/lib 경로에 라이브러리가 있는 경우 )

repositories {
  mavenCentral()
  maven { url 'https://maven.google.com' }
}

dependencies {
    compile files('libs/volley.jar')
    compile files('libs/okhttp-2.3.0.jar')
    compile files('libs/okhttp-urlconnection-2.0.0.jar')
    compile files('libs/glide-3.8.0.jar')
}

volley, okhttp-xx 라이브러리는 glide 가 의존성을 갖는 라이브러리이기 때문에 추가하였다.

사용하기

참고로 여기에서는 URL 를 통하여 이미지를 불러오는 대신에 앱에 포함된 이미지를 불러오는 것으로 사용하였다. GIF 이미지를 보여주기 위해서는 아래와 같은 방법으로 원하는 위치의 ImageView에 이미지를 로드하면 된다.
    @Bind(R.id.ivSnowBall)
    ImageView mIvSnowBall;

    protected void onCreate(Bundle savedInstanceState) {
         animateSnowball();
    }

    private void animateSnowball(){
        Glide.with(this).load(R.drawable.snowball_animate).asGif().into(mIvSnowBall);
    }

이경우 최초 이미지 로드시에 상당한 시간의 딜레이가 발생하는 문제에 직면하게 된다. 해당 이슈는 캐쉬 설정을 추가하는 방법으로 해결이 가능하다. (4.x 버전에서는 해당 이슈가 해결되었다고 들었다. )


    @Bind(R.id.ivSnowBall)
    ImageView mIvSnowBall;

    protected void onCreate(Bundle savedInstanceState) {
         animateSnowball();
    }

    private void animateSnowball(){
        Glide.with(this).load(R.drawable.snowball_animate).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).into(mIvSnowBall);
    }

마지막으로 이미지를 로드하는 동안 진행상태를 보여주고자 하는 경우는 아래와 같은 방법으로 구현이 가능하다.

    @Bind(R.id.ivSnowBall)
    ImageView mIvSnowBall;

    protected void onCreate(Bundle savedInstanceState) {
         animateSnowball();
    }

    private void animateSnowball(){
        
        final ProgressBar progressBar = (ProgressBar) findViewById(R.id.snowball_loading_progress);
        progressBar.setVisibility(View.VISIBLE);

        Glide.with(this).load(R.drawable.snowball_animate).asGif().diskCacheStrategy(DiskCacheStrategy.SOURCE).listener(new RequestListener(){

            @Override
            public boolean onResourceReady(Object o, Object o2, Target target, boolean b, boolean b1) {
                progressBar.setVisibility(View.GONE);
                return false;
            }

            @Override
            public boolean onException(Exception e, Object o, Target target, boolean b) {
                progressBar.setVisibility(View.GONE);
                return false;
            }

        }).into(mIvSnowBall);
    }

참고 layout.xml 파일

   
            
            
            
             



2016년 12월 26일

안드로이드에서 Volley 을 사용하여 HTTP 통신을 할때 타임아웃 문제

Volley 의 주요 기능중 하나는 비동기 방식의 RESTful HTTP 요청을 간단하게 구현할 수 있다는 점이다.

Transmitting Network Data Using Volley

다음의 코드를 보자. 일반적인 경우는 (2.5초 이내에 응답이 오는 경우) 문제가 없지만 서버와 통신이 지연되는 경우 안드로이드 앱이 다시 한번 서버 요청을 하게되는 것을 확인하게 될것이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
    private void memberJoin() {
        String url = "http://test.com/data/member/join.jsp";
        StringRequest stringRequest = new StringRequest(
            Request.Method.POST, 
            url, 
            createMySuccessListener(), 
            createMyErrorListener()) {
            protected Map<StringString> getParams() throws com.android.volley.AuthFailureError {
                Map<StringString> params = new HashMap<StringString>();
                eturn params;
            }
        };
        queue.add(stringRequest);
    }
    public Response.Listener<String> createMySuccessListener() {
        return new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {         
       
            }
        };
    }
    public Response.ErrorListener createMyErrorListener() {
        return new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                
            }
        };
    }
cs

이는 기본적으로 Volley 에서 서버에 요청을 보낼때는 기본정책이 적용되고 있는데 이때 응답 대기 타임아웃 값이  2500 마이크로초로 설정되어 있기 때문이다. 다음은 관련 Volley 자바 클래스이다.

  • com.android.volley.toolbox.StringRequest
  • com.android.volley.Request
  • com.android.volley.DefaultRetryPolicy 


2.5 초 이상의 응답 대기가 요구되는 경우는 아래와 같이 커스텀 정책을 생성하여 설정하면 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
    private void memberJoin() {
        String url = "http://test.com/data/member/join.jsp";
        StringRequest stringRequest = new StringRequest(
            Request.Method.POST, 
            url, 
            createMySuccessListener(), 
            createMyErrorListener()) {
            protected Map<StringString> getParams() throws com.android.volley.AuthFailureError {
                Map<StringString> params = new HashMap<StringString>();
                eturn params;
            }
        };
        // 커스텀 정책을 생성하여 지정한다.
        stringRequest.setRetryPolicy(new com.android.volley.DefaultRetryPolicy(
            20000 ,
            com.android.volley.DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
            com.android.volley.DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        queue.add(stringRequest);
    }
cs

2010년 12월 13일

Android Virtual Device (AVD)

Android Virtual Device (AVD)
여러 버전의 안드로이드 단말이 존재할 수 있기 때문에 작성하는 어플리케이션을 각각의 버젼과 SDK Add-On에 맞게 테스트해볼 수 있는 에뮬레이터 환경이다. 이것은 실제 안드로이드 단말이 다양한 하드웨어로 구성될수 있고, 서로 다른 플랫폼 버젼, SDK Add-On 등이 존재할 수 있는데 개발자가 이 모든 단말을 가져 있지 않더라도 에뮬레이터 환경에서 관리할 수 있도록 한다. 예를 들어 카메라가 있는 경우, 쿼티자판이 있는 경우, 1.1 SDK 탑재한 단말, 1.5 SDK를 탑재한 단말들 여러가지 구성을 가지고 있는 가상의 장치를 만들수 있는 개념.


JDK 1.6 과 이클립스 Helios 에 구축된 Android 개발 환경에서 AVD Manager 을 사용하여 Android 2.3 가상 디바이스를 생성해서 에뮬레이터를 실행해보는데 정말 느리다. 이런 환경에서 개발이 가능하기는 할까?

다른 자바 어플과 같이 eclipse.ini 파일을 조금 수정해서 에뮬레이터를 실행해보니 조금 빨라진것같기도 하다.



-startup
plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.1.1.R36x_v20100810
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Dosgi.requiredJavaVersion=1.5
-XX:+UseParallelGC
-XX:PermSize=128M
-Xms40m
-Xmx512m