분류 전체보기
- 커스텀 뷰 2023.01.29
- Java 버전 에러 2022.12.21
- 특정 브랜치 클론 2022.11.13
- Git 설치 2022.11.13
- RecyclerView - item 위치 찾기 2022.08.06
- admob - app-ads.txt 설정 2022.07.16
- 멀티 모듈 2022.06.20
- Glide 구현 2022.06.03
커스텀 뷰
Java 버전 에러
java.lang.UnsupportedClassVersionError: com/android/tools/idea/gradle/run/OutputBuildAction has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
OutputBuildAction 클래스가 55 에서 컴파일 되었고, Java Runtime은 52라서 오류가 발생
안드로이드스튜디오의 Java 버전을 변경하여 해결
'기타' 카테고리의 다른 글
특정 브랜치 클론 (0) | 2022.11.13 |
---|---|
Git 설치 (0) | 2022.11.13 |
admob - app-ads.txt 설정 (0) | 2022.07.16 |
Button 배경색이 변경되지 않을 경우 (0) | 2022.05.27 |
Apache License 2.0 (0) | 2022.04.05 |
특정 브랜치 클론
Git(깃)을 이용하여 프로젝트 관리시 Master(마스터)가 아닌 Develop(디벨로퍼)으로 생성하여 개발 후 Test 를 위해 Git Clone이 필요한 경우가 있다.
그런 경우 기본적으로 알고 있는 방법으로 Git Clone을 하는 경우 Master가 바로 Clone(클론)이 됨에 따라, Develop과 같이 특정 Branch(브랜치)를 Clone 하는 방법을 알아보도록 하자.
- $ git clone -b <branch명> <remote_repo 주소>
# git clone -b <branch명> <remote_repo 주소>
$ git clone -b develop https://github.com/project/test.git
Cloning into 'test'...
Username for 'https://github.com': xxxxx
Password for 'https://xxxxx@github.com':
remote: Enumerating objects: 52, done.
remote: Counting objects: 100% (52/52), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 3084 (delta 21), reused 34 (delta 10), pack-reused 3032
Receiving objects: 100% (3084/3084), 5.22 MiB | 0 bytes/s, done.
Resolving deltas: 100% (1899/1899), done.
'기타' 카테고리의 다른 글
Java 버전 에러 (0) | 2022.12.21 |
---|---|
Git 설치 (0) | 2022.11.13 |
admob - app-ads.txt 설정 (0) | 2022.07.16 |
Button 배경색이 변경되지 않을 경우 (0) | 2022.05.27 |
Apache License 2.0 (0) | 2022.04.05 |
Git 설치
1. Git 다운로드 및 설치
Git - Downloads
Downloads Mac OS X Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific
git-scm.com
Windows 를 눌러 다운
다운받은 Git-2.24.0.2-64-bit.exe 를 실행
Use the OpenSSL library : OpenSSL 라이브러리 사용. 서버인증서는 ca-bundle.crt 파일을 사용
Use the native Windows Secure Channel library : Windows 인증서 저장소 사용
Enable file system caching : 성능향상을 위해 파일 시스템 데이터를 메모리에 캐시
Enable Git Credential Manager : Windows 용 보안 Git 자격증명 저장소를 사용
Enable symbolic links : symbolic links 활성화(기존 저장소는 영향을 받지 않음)
이제 다시 cmd를 열고 한번 더 git 명령을 쳐 확인
git 설치 전에 cmd가 열려 있었다면 닫고 다시 열어야 한다
이렇게 나온다면 git 설치가 완료 된것이고 android studio 에서도 실제 git 을 사용할 수 있다.
혹시나 저렇게 나오지 않는다면 "시스템환경변수" 에 git의 Path 를 추가
2. path 추가
환경변수 클릭.
하단 시스템 변수에서 Path 를 누르고 편집 클릭.
설치 시 경로를 기본으로 했다면 위와 같이 입력
C:\Program Files\Git\cmd
그리고 cmd 가 열려있다면 닫고 다시 실행 후 git
이제 git 프로젝트 복사도 cmd 창에서 git clone http://some_git_url
'기타' 카테고리의 다른 글
Java 버전 에러 (0) | 2022.12.21 |
---|---|
특정 브랜치 클론 (0) | 2022.11.13 |
admob - app-ads.txt 설정 (0) | 2022.07.16 |
Button 배경색이 변경되지 않을 경우 (0) | 2022.05.27 |
Apache License 2.0 (0) | 2022.04.05 |
RecyclerView - item 위치 찾기
val lastVisibleItemPosition = (recyclerView.layoutManager as LinearLayoutManager)
.findFirstVisibleItemPosition()
val lastVisibleItemPosition = (recyclerView.layoutManager as LinearLayoutManager)
.findLastVisibleItemPosition()
val lastVisibleItemPosition = (recyclerView.layoutManager as LinearLayoutManager)
.findFirstCompletelyVisibleItemPosition()
val lastVisibleItemPosition = (recyclerView.layoutManager as LinearLayoutManager)
.findLastCompletelyVisibleItemPosition()
findFirstVisibleItemPosition : 현재 뷰에서 최상단에 보이는 아이템의 위치 (조금이라도 보여도 인식됨)
findLastVisibleItemPosition : 현재 뷰에서 최 하단에 보이는 아이템의 위치 (조금이라도 보여도 인식됨)
findFirstCompletelyVisibleItemPosition : 아이템의 최상단이 완전히 보이는 가장 상위의 아이템
findLastCompletelyVisibleItemPosition : 아이템의 최하단이 완전히 보이는 가장 밑의 아이템
예시
'기술적용' 카테고리의 다른 글
Glide 구현 (0) | 2022.06.03 |
---|---|
Recyclerview, Databinding 연동 (0) | 2022.05.24 |
Jetpack Navigation, Bottom navigation 연동 (0) | 2022.05.14 |
Jetpack Navigation 이동 (Fragment -> Fragment) (0) | 2022.05.09 |
Navigation safe args 구현 (0) | 2022.05.07 |
admob - app-ads.txt 설정
순서
1. AdMob 사이트에서 APP-ADS.TXT 내용 확인 2. 구글 블로그(https://www.blogger.com/)에 해당 app-ads.txt 생성 3. 구글 플레이 개발자 콘솔에서 개발자 페이지에 웹사이트 주소 설정 |
1. AdMob 사이트에서APP-ADS.TXT 내용확인
[애드몹] - [앱] - [모든 앱 보기] - [APP-ADS.TXT 설정하기]
코드 스니펫을 복사한다.
2-1. 구글 블로그(https://www.blogger.com/)에 해당 app-ads.txt 생성
[구글 블로그] - [설정] - [수익 창출] - [맞춤 ads.txt 사용 설정 on] - [맞춤 ads.txt 내용 붙여넣기]
[설정] - [오류 및 리디렉션] - [맞춤 리디렉션] - [추가]
[맞춤 리디렉션]에 아래처럼 입력
올린이: /app-ads.txt
받는사람: /ads.txt
확정 on
[확인] 후 [저장]
[설정] - [게시 중] - [블로그 주소 확인 및 복사]
2-2 테스트
https://내 블로그 주소.blogspot.com/app-ads.txt 로 접속하여 테스트
설정이 제대로 되었다면 자신의 스니펫 코드 한 줄만 노출된다.
3. 구글 플레이 개발자 콘솔에서 각 애플리케이션 스토어 등록정보 웹사이트 주소 설정
[구글 플레이 개발자 콘솔] - [앱선택] - [스토어 정보] - [스토어 등록정보] - [연락처 세부정보]
[웹사이트] 에 위에서 만든 블로그 주소를 추가하고 [저장]
애드몹에서 확인은 다음날정도에 하면 된다.
[애드몹] - [앱] - [모든 앱 보기] - [APP-ADS.TXT 탭]
'기타' 카테고리의 다른 글
특정 브랜치 클론 (0) | 2022.11.13 |
---|---|
Git 설치 (0) | 2022.11.13 |
Button 배경색이 변경되지 않을 경우 (0) | 2022.05.27 |
Apache License 2.0 (0) | 2022.04.05 |
해시 키 얻기 (0) | 2022.04.04 |
멀티 모듈
출처 : https://www.youtube.com/watch?v=H4qh0n9Zu5k
모듈이란?
모듈은 소스 파일 및 빌드 설정으로 구성된 모음이며, 이를 통해 프로젝트를 별개의 기능 단위로 분할할 수 있습니다. 프로젝트에서 하나 이상의 모듈이 포함될 수 있으며, 하나의 모듈이 다른 모듈을 종속성으로 사용할 수 있다. 각 모듈은 개별적으로 빌드, 테스트 및 디버그 할 수 있습니다
모듈vs라이브러리
- 라이브러리도 일종의 모듈입니다
- 안드로이드 라이브러리와 모듈은 구조적으로 완전히 동일합니다! 구조적으로 동일하다는건 안드로이드 라이브러리도 앱모듈과 동일하게 자바 코틀린파일이나 드로어블같은 리소스파일을 포함해서, 매니페스트까지도동일하게 포함하고 있습니다
- 차이는 뭘까?
- 빌드시 어떤 파일로 컴파일되는지의 차이다 라이브러리는 다른 앱모듈이나 다른 라이브러리에 종속적으로 포함되려하는 목적으로 있는거기 때문에 안드로이드 라이브러리는 aar이라는 안드로이드 아카이브파일로, 자바 라이브러리는 jav이라는 자바 아카이브 파일로 컴파일되는데 그래서 aar, jar은 다른 모듈에 종속적으로 포함해서 빌드하는데 사용됨 안드로이드 스튜디오 기준으로 봣을떄 점찍힌게 앱모듈이고책이 안드로이드 라이브러리입니다.
앱모듈은 apk를 빌드해주는거고
안드로이드 라이브러리를 빌드해보면 빌드 결과로 aar파일을 빌드해줍니다.
모듈은 언제 왜, 사용하나?
- 여러 앱을 빌드할 때, 일부 동일한 구성 요소를 재사용할 때 유용합니다.
- 또한 앱에 새로운 기능을 추가할때 기존 코드에 기능을 추가하려면 힘이 더 들지만, 새로운 기능을 위한 모듈을 따로 만들고, demoapp 을 만들어서 테스트하면 훨씬 쉽습니다. 만약 기존 앱의 domain, data 계층이 모듈화 되어있다면 기존앱의 리소스들을 그대로 가져다가 테스트할 수 있으므로 유용합니다.
모듈을 나눠서 개발하는 기준이 뭐에요?
(1) 이 기능이 조금이라도 다른 앱에 이용될 수 있는 가능이성이 있을때
(2) 이 기능이 잘 된다면 별도의 앱이 될 수 있다고 생각이 될때
(3) 이 기능이 너무 커서 demo가 실제 기능이 될 때 까지 오랜시간이 걸릴다고 판단될때
(4) 기존 앱이 너무 무거워서 개발할때 앱을 자주 빌드해서 확인하기 버거울 때
멀티 모듈의 장점
(1) 코드 재사용성이 높아진다
(2) 의존성이 적은 코드를 작성할 수 있다.
(3) 모듈 단위의 코드 수정이 용이하다.
(4) 모듈 단위 테스트를 할 수 있다.
(5) 빌드 시간 감소 가능
- 여기서 주의할 건 빌드 시간 감소 '가능'하다는 겁니다!!
기본적으로 빌드를 할때 변경된 모듈만 빌드하므로 빌드 시간 감소를 기대할 수 있습니다 하지만! 모듈간 종속성이 복잡해지고 모듈의 수정이 많다면 빌드 시간이 증가될 수 있다. 또한 Dagger 같은 AnnotationProcessor 를 사용할때도 빌드 시간이 증가합니다.
단점
(1) 하나의 앱만 있는데, 모듈을 여러개로 나눠놓으면 코드량이 더 많게 느껴진다.
(2) 해당 프로젝트를 처음보면 코드 전체를 보고 이해하기 어렵다.
(3) 위의 이유로 오히려 빌드 시간이 늘어날 수 있다.
따라서
두개 이상의 앱을 서비스 하고 있거나, 여러 개의 앱으로 분리될 경우를 대비하고 싶은 경우에 잘 변하지 않는 기능/독립적으로 구성가능한 기능을 모듈화 하는게 좋습니다
'기초개념 > 기초개념' 카테고리의 다른 글
RxKotlin, RxAndroid란? - Reactive Programing (0) | 2022.05.10 |
---|---|
Gradle 개념 정리 (0) | 2022.05.03 |
액티비티 생명주기 (0) | 2022.05.02 |
Android MVVM 패키지 구조 (0) | 2022.04.29 |
앱 삭제 후 데이터가 남아 있다면? (0) | 2022.04.27 |
Glide 구현
1. gradle 추가
build.gradle
dependencies {
...
implementation 'com.github.bumptech.glide:glide:4.12.0' // 이미지로딩 라이브러리
}
Glide 적용
object CommonBindingAdapters{
@BindingAdapter("app:imageUrl","app:placeholder")
@JvmStatic fun loadImage(imageView: ImageView, url: String, placeholder: Drawable){
Glide.with(imageView.context)
.load(url)
.placeholder(placeholder)
.error(placeholder)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.apply(RequestOptions().fitCenter())
.into(imageView)
}
}
.load(url) : 불러올 이미지
.placeholder(defaultImage) : 이미지 로딩 시작하기 전 표시할 이미지
.error(defaultImage) : 로딩 에러 발생 시 표시할 이미지
.fallback(defaultImage) : 로드할 url 이 비어있을(null 등) 경우 표시할 이미지
.circleCrop() : 동그랗게 자르기
.into(imageView) : 이미지를 넣을 뷰
.diskCacheStrategy() : 불러온 이미지를 디스크 캐시에 저장할지 여부를 지정
xml
<layout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
>
<data>
<variable
name="item"
type="com.danggai.app.bindingAdapterSample.item.SampleItem"
/>
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_image2"
android:scaleType="fitXY"
app:imageUrl="@{item.img_url}"
app:placeholder="@{@drawable/icon_placeholder}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</android.support.constraint.ConstraintLayout>
</layout>
'기술적용' 카테고리의 다른 글
RecyclerView - item 위치 찾기 (0) | 2022.08.06 |
---|---|
Recyclerview, Databinding 연동 (0) | 2022.05.24 |
Jetpack Navigation, Bottom navigation 연동 (0) | 2022.05.14 |
Jetpack Navigation 이동 (Fragment -> Fragment) (0) | 2022.05.09 |
Navigation safe args 구현 (0) | 2022.05.07 |