Skip to main content

Android Build를 위한 Local Repository를 만들자 (2/2)

이번 포스트에서는 sonatype Nexus를 세팅해봅시다.

기존의 프로세스는 jcenter -> 개발PC에 다운로드 -> 빌드시에 사용 입니다..

우리가 할려는 대략적인 구조는 다음과 같습니다.
jcenter -> Local Repository -> 개발PC에 다운로드 -> 빌드시에 사용.

( 패키지를 찾아서 일일이 Local에 등록시켜 놓는것도 보통일이 아니기에… -_- )

우선 Nexus에 로그인합니다. 그러면 다음과 같이 메뉴가 나타납니다. Repositores를 클릭합니다.

nexus_repos2

그런다음 Add를 클릭하여 Proxy Repository를 클릭합니다.
nexus_repos3

이름은 마음에드는 “아무거나”로 하시고 다음과 같이 세팅합니다.
nexus_repos4

그럼 세팅이 완료 되었습니다.

여기서 중요한 것은 생성된 repository의 주소입니다. 나중에 이 주소가 Android 빌드시에 사용되게 됩니다.
nexus_repos5

다시 Android 프로젝트로 돌아와서….
Build.gradle(Project:아무거나) 파일을 열어주세요. 그리고 앞에서 생성한 repository 주소를
다음과 같이 편집해주세요.

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    /*
    repositories {
        jcenter()
    }
    */
    repositories {
        maven {
            url "http://repo.teracle.com:8081/nexus/content/repositories/trproxy/"
        }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0'
        classpath 'com.google.gms:google-services:1.3.0-beta1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    /*
    repositories {
        jcenter()
    }
    */
    repositories {
        maven {
            url "http://repo.teracle.com:8081/nexus/content/repositories/trproxy/"
        }
    }

}

이 파일을 편집하게 되면 편집툴 상단에 Sync Now 라는 링크가 표시됩니다. 수정이 완료되면
클릭해주세요.

그리고 다시 nexus로 돌아가보면….
nexus_repos6

빌드시에 사용했던 패키지들이 Local Repository에 넘어와 있는 것을 확인할 수 있어요!

끗 -ㅅ-)

Android Build를 위한 Local Repository를 만들자 (1/2)

오늘 따라 자주 글을 적는군요…

삘 받았을 때 적어야합니다.

최근에…. 아니 요..전에 eclipse를 사용해서 안드로이드 어플리케이션을 제작했던 적을 생각해봅시다.

각종 필요한 라이브러리들을 다운로드 받아서 프로젝트의 lib폴더에 넣어두고 프로젝트 세팅에서
Class Path를 걸어주고 lib가 참조가 되면 그때부터 해당 lib를 포함한 빌드를 할 수 있었었죠.

최근에 Android 개발툴이 Android Studio로 변경되었습니다. 아니 바꿔야만 했습니다. (쿨럭..)

InteliJ기반의 Gradle을 사용한 빌드로 바뀌었습니다. (InteliJ너무 좋아요 좋아죠 좋아요 좋아요)

너무 좋아졌어요…

그런데 약간의 부담이 있습니다. 사용 방법이 전혀 달라졌어요..

Build.gradle(Mobile:app) 파일을 편집하여 빌드에 대한 세팅을 하며, 사용하고 싶은 lib를 추가하여 사용하게 되었습니다.
물론.. 다음 파일을 보시면 아시겠지만 기존의 lib폴더의 파일들도 추가하여 빌드 할 수 있습니다.
dependency라고 부르더군요 .. 의존성..(전 영어를 잘 못..)

android {
    compileSdkVersion 22
    buildToolsVersion '22.0.1'
} 
//중략... 
dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.android.gms:play-services-analytics:7.3.0'
    compile files('libs/commons-io-2.1.jar')
    compile files('libs/android-support-v4.jar')
    compile 'com.google.guava:guava:18.0'
}

문제는 여기에 있습니다. 패키지로 빌드에 추가되는 lib들인데요.
일일히 찾아서 다니지 않아도 패키지명:버전만 적어주면 얼마나 편리합니까 ㅠ_ㅠ)
다만, 네트워크를 통해서 jcenter라는 곳에서 받아오기 때문에 속도도 느리고,
jcenter가 접속 되지 않으면, 빌드가 망하게 되지 않을까요.. ㅠ_ㅠ)

그래서 Local Repository를 만들어 보기로 했습니다.

같은 프로젝트를 동시에 진행하는 동료가 있다면! 강추 드립니다.
Local Repository를 사용하여 서로 같은 패키지 버전을 사용 할 수 있도록도 해준다고 합니다.

이미 알아체신 분도 계셨겠지만.. 서버를 설치할겁니다. Repository서버를…

sonatype Nexus Community Edition을 설치할겁니다.

다음 사이트에 접속합니다.

http://www.sonatype.org/nexus/go/

윈도우를 사용하며 개인적으로 혼자 사용하실 분은 zip 버전을
다른분과 같이 사용하시고 싶다면 (로컬)리눅스 서버에 설치하실려면 tar.gz버전을 다운로드 합니다.

“적당한곳”에 압축을 해제합니다.

“적당한곳\bin” 폴더에 가보시면 nexus.bat(윈도우용)와 nexus(리눅스용) 가 있습니다.
윈도우용은 nexus.bat install로 서비스에 등록하고 nexus.bat start로 시작하셔서 사용하실 수 있습니다.
(프롬프트에서 입력하셔야 합니다.)
리눅스용은 컨피그 파일을 조금 만져주셔야 합니다. 실행하는 유저를 지정해야 했던것 같습니다.(가물…)

정상적으로 실행되면 브라우저를 실행하여 다음 주소를 입력해봅니다.

http://localhost:8081/nexus

그럼 다음과 같은 사이트가 실행됩니다.

nexus_repos

로그인은 admin / admin123

입니다.

일단 설치하셨으면 절반은 끝났습니다. ㅠ_ㅠ)

자자 글이 너무 길어졌으니 다음 포스트로 넘기렵니다.

Log.e, Log.w…. Console를 제어 해보자

안드로이드 앱, 혹은 Java Application을 디버깅하기 위해서는 로그가 필수입니다.

잘 모르면 로그를 찍어보는게 가장 좋습니다.

보통은 다음과 같이 코드 사이에 쭉… 적어두었는데….

Log.e(MY_APP,"출력테스트"+aaa);

제품을 릴리즈 하거나, 배포 해야할 때는 불필요한 정보는 최대한 노출 시키지 않는게 좋겠죠… ?

public class myLog {
    // true 는 로그 노출 상태 , false는 로그를 출력하지 않음... 
    static final Boolean is_debug_log = true;


    /** Log Error **/
    public static final void e(String tag, String message) {
        if(is_debug_log) Log.e(tag, buildLogMsg(message));
    }

    /** Log Warning **/
    public static final void w(String tag, String message) {
        if(is_debug_log)Log.w(tag, buildLogMsg(message));
    }

    /** Log Information **/
    public static final void i(String tag, String message) {
        if(is_debug_log)Log.i(tag, buildLogMsg(message));
    }

    /** Log Debug **/
    public static final void d(String tag, String message) {
        if(is_debug_log)Log.d(tag, buildLogMsg(message));
    }

    /** Log Verbose **/
    public static final void v(String tag, String message) {
        if(is_debug_log)Log.v(tag, buildLogMsg(message));
    }

    //현제 클래스 스텍을 추적함
    public static String buildLogMsg(String message) {
        StackTraceElement ste = Thread.currentThread().getStackTrace()[4];
        StringBuilder sb = new StringBuilder();
        sb.append(ste.getFileName().replace(".java", ""));
        sb.append(".");
        sb.append(ste.getMethodName());
        sb.append(message);
        return sb generique de viagra.toString();
    }
}

is_debug_log 변수에 대해서는 BuildConfig.DEBUG를 이용하여 Android Studio에서 빌드를 선택하여

로그 출력 여부를 조정 할 수도 있습니다.

사용 방법은 어짜피 Static이기 때문에 다음 처럼 사용 할 수 있습니다.

myLog.i(TAG,"나는 로그로그");

더 좋은 아이디어 있으신분은 공유해주세엽… 뿅 -ㅅ-)/

안드로이드에서 View를 이미지로 저장하기

안드로이드 View를 이미지 파일로 저장하기 위한 메서드 입니다.

자세한 내용은 다음 코드를 참고하세요.

SD카드의 “적당한곳”에 이미지로 저장되게 된답니다.

(파일의 경로를 바꾸시거나 파일 포멧과 퀄리티를 바꾸시거나 알아서 잘…하실 겁니다. )

“적당한곳” 대신에 .cache 와 같이 . 으로 시작하는 폴더를 사용하시면, 겔러리에서 검색되지 않겠죠?

static public void MakeCache(View v,String filename){

        String StoragePath = 
               Environment.getExternalStorageDirectory().getAbsolutePath();
        String savePath = StoragePath + "/적당한곳";
        File f = new File(savePath);
        if (!f.isDirectory())f.mkdirs();

        v.buildDrawingCache();
        Bitmap bitmap = v.getDrawingCache();
        FileOutputStream fos;
        try{
            fos = new FileOutputStream(savePath+"/"+filename);
            bitmap.compress(Bitmap.CompressFormat cherche viagra a vendre.JPEG,80,fos);

        }catch (Exception e){
            e.printStackTrace();
        }
    }

테스트는 WebView에 대해서 테스트 해보았고 잘 작동하네요…

WebView이외 다른 View에도 사용 가능함으로 잘 활용해보세요. (좋네영~ )

현재는 Cache용도로 사용하고 있습니다.

ps. 이 글이 코드 하이라이트 테스트라고는 절대 말 못함.