비공개 Maven repository를 이용해서 안드로이드 라이브러리 받아오기

라이브러리를 개인적으로 만들어서 공개되지 않은 메이븐 repository로 올려야 할 때가 있다. (ex. 회사 라이브러리)
원래는 필요하다면 비공개 메이븐 repository를 만들려했지만, 이미 구성된 것이 있으므로, build 설정만 해서 사용했다.

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "http://nexus.localhost:8080/content/repositories/snapshots") {
                authentication(userName: "admin", password: “PASSWORD")
            }
            pom.version = "1.0-SNAPSHOT"
            pom.artifactId = "library-project"
            pom.groupId = "com. library
"
        }
    }
}

그렇게 빌드를 설정한 후 Gradle > uploadArchives빌드를 하면 메이븐 repository에 업로드가 된 것을 볼 수 있다.

uploadArchive_build

build

upload

가져올 때 build 설정

apply plugin: 'android'
apply plugin: 'maven'

repositories {
    maven {
        url "http://nexus.localhost:8080/content/repositories/snapshots/"
        credentials {
            username 'admin'
            password ‘PASSWORD'
        }
    }
}

… 

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:19.+'
    compile ('com.lib:library-project:1.0-SNAPSHOT@aar')
}

참고

http://stackoverflow.com/questions/22852611/maven-uploadarchives-aar-to-gitlab-maven-repository
http://blog.gaku.net/uploading-aar-to-a-private-maven-repo-from-gradleandroid-studio/
http://www.vandalsoftware.com/post/52468430435/publishing-an-android-library-aar-to-a-maven

호스팅 하기

http://cemerick.com/2010/08/24/hosting-maven-repos-on-github/
http://www.sigil.org/coding/hosting-a-private-maven-repository-using-github/

Android L Developer Preview 주목할만한 것만 ..

블로그에 간략히 나와있는데 주목할만한 것만..

Material design

ART가 시스템 기본으로 되면서 뷰랑 애니메이션 쪽을 강화하는 느낌인데, 관련 API들도 생겼다.
그리고 polymer라는 이름의.. 새로운 크로스플랫폼 라이브러리로 보이는데, 웹 언어로 앱을 만드나보다.

http://www.polymer-project.org/

 

Project Volta

베터리를 효율적으로 쓰게 하려고 API를 제공

Battery Historian – power를 어떻게 쓰는지 시각화한 새로운 tool

bettery bettery2

job scheduler API – 베터리를 최소한으로 쓰게 하기위해 상황에 따라 어떤 백그라운드 job을 실행할지 선택할수 있는 모양이다.

job scheduler

 

Android Runtime (ART)

L 부터는 System Default

 

64-bit support

EBS 라디오 듣다가 ..

화가 날 때 어떻게 하냐는 설문에

어떤 사람이 화가날때 명상을 해보면 화가 파도처럼 왔다가 가는걸 느낄 수 있다고 한다

그때 DJ가 좋은 방법이라고 근데 그렇게 파도가 왔다가 지나가면 모래가 조금 남는다고 ..
그러다 모래가 쌓이면 폭발한다고 함

위의 말은 불교 서적에서 자주 보는 말인데 DJ 아저씨 말이 엄청 공감 ㅋㅋ

[Java] Atomic Variables

java.util.concurrent.atomic 패키지에 atomic한 연산을 지원하는 변수들이 정의되어 있다. 모든 클래스는 set, get 메소드를 가지고 있고 volatile 변수처럼 작동한다.

즉, 락을 걸지않고 thread-safe한 프로그래밍을 할 수 있게 지원한다.

밑은 패키지 안에있는 클래스들..

package

아이폰은 클래스 이름만 봐서는 atomic 한지 알 수 없어서 나중에 알게되곤 했는데,

Mutable 하지않은 변수들 NSArray , NSDictionary 들이 atomic 하다고 알고 있음
(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Multithreading/ThreadSafetySummary/ThreadSafetySummary.html)

자바는 클래스명에서 대놓고 atomic하다고 말하고 있어 좋다 ㅎㅎ

기껏 atomic한 변수에 volatile 붙이고 그런 실수는 안할듯..

튜토리얼 : http://docs.oracle.com/javase/tutorial/essential/concurrency/atomicvars.html

도큐먼트 : http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/package-summary.html

안드로이드 스튜디오 디버깅

Breakpoint 리스트 보기 & 설정하기

브레이크 포인트 오른쪽 클릭

break point

More 클릭

more

디버깅 아이콘

restart 앱 다시 시작
object tree object tree 보기
evaluate evaluate expression
next line 다음 줄로 넘어가기
step in 메소드 안으로 들어가기
step out 현재 메소드 나가기
run 이어서 실행하기

Jump to Source 누르면 해당 소스를 볼 수 있음

jump

스크린 캡쳐 하기

1. 디버그 모드로 실행
2. 6: Android의 스크린 캡쳐 클릭

cpap ture

Frame screenshot 선택에 따라 스크린 샷 프레임의 유무를 선택할 수 있다.

frame

비디오 녹화하기

1. 디버그 모드로 실행
2. 6: Android의 녹화하기 버튼 클릭

video

레퍼런스 : https://developer.android.com/sdk/installing/studio-debug.html

이클립스 프로젝트를 안드로이드 스튜디오 프로젝트로 바꾸기

안드로이드 스튜디오에서 import하면 알아서 바꿔주는 줄 알았는데, 계속 에러나서 보니 아니었나보다.
역시 레퍼런스의 중요함을 다시 되새기며 ..

안드로이드 스튜디오에서 작업을 하려면 일단 먼저 이클립스에서 Export를 해야 한다. 그래야 Gradle 빌드 파일이 만들어진다. 그다음 안드로이드 스튜디오에서 import를 하면 된다.

Export from eclipse

1. ADT플러그인을 22.0 혹은 그 이후로 업데이트 한다.
2. File > Export
3. Generate Gradle build files 선택

export

4. export하고 싶은 프로젝트 선택

이클립스에서 export를 하고 폴더에서 확인하면 build.gradle이 생긴것을 확인 할 수 있다.

스크린샷 2014-06-16 오후 5.04.26

밑에는 import해서 프로젝트 구조를 확인한 화면이다.

import

레퍼런스 : http://developer.android.com/sdk/installing/migrate.html

Android Studio 빌드 관련

안드로이드 스튜디오에서 라이브러리 추가해서 빌드한다고 삽질 좀 하다가.. 이건 제대로 알아야 할 것 같아서 레퍼런스 해석을 했다.

Overview

안드로이드 스튜디오 빌드 시스템은 Gradle 안드로이드 플러그인으로 되어있는데, Gradle은 안드로이드 스튜디오와 독립적이다.

– 커맨드 라인으로 빌드를 할 수 있다. (안드로이드 스튜디오 설치와 무관함)
– 같은 프로젝트로 다른 기능을 가진 여러개의 APK를 만들 수 있다.

Gradle 빌드는 Groovy 문법이다.

– 자바 VM을 위한 동적 언어
http://groovy.codehaus.org/

Project and modules

안드로이드 스튜디오에서 프로젝트는 완전한 안드로이드 앱을 대표한다. 프로젝트는 하나 혹은 그 이상의 모듈로 구성되어 있다. 모듈은 독립적으로 빌드, 테스트, 디버그 할 수 있는 앱의 요소로써, 소스코드와 리소스를 포함하고 있다.

안드로이드 스튜디오 프로젝트에서 모듈은 세가지

– 자바 라이브러리 모듈
재사용 가능한 코드를 포함한다. 빌드 시스템이 자바 라이브러리 모듈을 위해서 JAR 패키지를 만든다.

– 안드로이드 라이브러리모듈
재사용 가능한 안드로이드 코드와 리소스를 포함한다. 빌드 시스템은 AAR (Android ARchive) 패키지를 만듬

– 안드로이드 어플리케이션 모듈
라이브러리 모듈에 의존적인 어플리케이션 코드를 포함한다. (대부분 안드로이드 앱은 하나의 어플리케이션 모듈로 구성되어 있음.) 빌드 시스템은 APK 패키지를 만든다.

안드로이드 스튜디오 프로젝트는 top-level Gradle 빌드 파일이 모든 모듈의 정보를 가지고 있고, 각자 모듈도 Gradle 빌드 파일을 가지고 있다.

Dependencies

Module Dependencies
– 다른 모듈을 포함할 수 있다.

Local Dependencies
– 바이너리 아카이브, JAR파일 같은 거

Remote Dependencies
– Maven
– 형식은 group:name:version
http://search.maven.org/

Gradle console

빌드 task와 subtask를 보여준다. 빌드가 실패하면 자세한 내용을 여기서 찾을 수 있음

Command line으로 빌드하기

맥 명령어

$ chmod +x gradlew   - Gradle wrapper스크립트에 권한 줌, 이 명령어는 처음에만 필요  
$ ./gradlew assembleDebug

APK 빌드는 app/build/apk/ 에 있고, AAR은 lib/build/libs/ 에 있다.

프로젝트의 가능한 빌드 task리스트를 보려면

$ ./gradlew tasks

릴리즈버전 빌드하기

커맨드 라인으로 빌드

gradlew assembleRelease

안드로이드 스튜디오에서 빌드

1. Gradle 클릭
2. 어플리케이션 이름 밑의 All task

all_task

3. app을 확장하면 보이는 assembleRelease를 더블 클릭

app

빌드 파일 기본

apply plugin: 'android'

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), \
            'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(":lib") // Module dependency
    compile 'com.android.support:appcompat-v7:19.0.1'  // Remote binary dependency
    compile fileTree(dir: 'libs', include: ['*.jar']) // Local binary dependency
}

apply plugin: ‘android’ 빌드를 위해 Gradle 플러그인을 적용한다.

android {…} 안드로이드 쪽 빌드 옵션을 설정한다.

defaultconfig : 동적으로 AndroidManifest.xml에 있는 요소를 설정한다. defaultConfig에 있는 값들은 manifest파일에 있는 걸 덮어쓰기(override)한다.

Local binary dependency

jar 파일 같은 것은 프로젝트의 <moduleName>/libs 에 복사를 한다.
compile fileTree(dir: ‘libs’, include: [‘*.jar’]) 은 app/libs에 JAR파일이 있다고 빌드시스템에 알려준다.

빌드 설정시 환경변수 이용하기

storePassword System.getenv("KSTOREPWD")
keyPassword System.getenv("KEYPWD")

빌드 시 입력창으로 받기

storePassword System.console().readLine("\nKeystore password: ")
keyPassword System.console().readLIne("\nKey password: ")

Source directories

여러 버전의 앱을 만들기 위해서는 아래처럼 소스코드와 리소스가 되어야 한다.

– src/main/ – 메인 소스 디렉토리
– src/<buildType>/ – 빌드 타입 소스 디렉토리
– src/<flavorName>/ – flavor 소스 디렉토리

 

다른 버전의 앱을 만들기 위해서
1. product flavor를 빌드 파일에 정의
2. 각 flavor의 추가 소스 디렉토리를 만든다.
3. 프로젝트에 flavor에 포함되는 소스를 추가한다.

configuration 예

...
android {
    ...
    defaultConfig { ... }
    signingConfigs { ... }
    buildTypes { ... }
    productFlavors {
        demo {
            packageName "com.buildsystemexample.app.demo"
            versionName "1.0-demo"
        }
        full {
            packageName "com.buildsystemexample.app.full"
            versionName "1.0-full"
        }
    }
}
..

flavor 디렉토리 추가 예

flavor

레퍼런스 : http://developer.android.com/sdk/installing/studio-build.html