ViewBinding

개발/Android 2021. 2. 25. 10:26

app모듈 build.gradle 파일에 viewBinding 사용 설정을 한다.

 

android {

    buildFeatures{
        viewBinding = true
    }
}

 

Binding 클래스이름은 레이아웃 xml 파일명을 파스칼케이스(단어 첫글자를 대문자표기)로 변환하여 Binding을 붙인다.

 

예)

activity_main.xml => ActivityMainBinding

fragment_menu.xml => FragmentMenuBinding

contact_list_item.xml => ContactListItemBinding

 

Activity

//바인딩 변수 생성할때 초기화
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
 
 	//기존
    //setContentView(R.layout.activity_main) 
    
    //변경 binding.root로 전달
	setContentView(binding.root)
}

fun initView(){
	binding.txtName.text = "Name" //사용은 기존코드에 binding. 만 앞에 추가하면 된다.
}

 

Fragment

//바인딩 변수
private lateinit var binding:FragmentMenuBinding

override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {

    //기존
    //val view = inflater.inflate(R.layout.fragment_menu, container, false)		   
    //return view
    
    //변경
    binding = FragmentMenuBinding.inflate(inflater, container, false)
    return binding.root
}

fun initEvent(){
    binding.btnUp.setOnclickListener{v:View? -> //TODO }
}

 

Adapter

class ContactListAdapter(val contacts: ArrayList<Contact>) : RecyclerView.Adapter<ContactListAdapter.ViewHolder>() {

	//기존
    //class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView){
    //변경 binding.root로 전달
    class ViewHolder(val binding: ContactListItemBinding) : RecyclerView.ViewHolder(binding.root){

        fun bindItems(contact:Contact){
        	//기존
            //val tvName = itemView.findViewById(R.id.tvName) as TextView
            //val tvNumber = itemView.findViewById(R.id.tvNumber) as TextView
            
            //변경 binding 추가
            binding.tvName.text = "("+ contact.id +") "+ contact.name
            binding.tvNumber.text = contact.number
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContactListAdapter.ViewHolder {

		//기존
		//val v = LayoutInflater.from(parent.context).inflate(R.layout.contact_list_item, parent, false)
		//return ViewHolder(v)

		//변경
		val binding = ContactListItemBinding.inflate(LayoutInflater.from(parent.context), parent, false))
        return ViewHolder(binding)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.bindItems(contacts[position])
    }

    override fun getItemCount(): Int {
        return contacts.size
    }
}

'개발 > Android' 카테고리의 다른 글

풍선도움말 레이아웃 구현  (1) 2021.03.24
프로젝트에 NDK 모듈 추가하기  (0) 2021.03.05
Android Studio Rename Package  (0) 2021.02.24
Appium 설치  (0) 2021.02.17
Appium 실행  (0) 2021.02.17
Posted by Lumasca
,

 

Studio의 Project view에서 Android 로 변경한다.

 

옵션메뉴(톱니바퀴모양) 버튼을 누르고, Compact Middle Packages 에 체크가 해제되었는지 확인한다. 체크되었으면 클릭해서 선택해제한다.  이 옵션이 체크되어 있으면 중간 패키지명을 변경할 수 없다.

그러면 아래와같이 패키지 경로를 계층적으로 표시한다.

변경하고자 하는 계층에서 마우스를 우클릭해서 Refactor 메뉴로 이동한다.

Reactor 서브메뉴에서 Rename을 선택한다.

 

그러면 아래와 같은 경고창이 팝업된다.

Rename package를 클릭한다. Rename directory는 디렉터리 이름만 변경하는 기능이다.

 

변경하고싶은 이름을 입력하고 Refactor 버튼을 클릭한다.

 

상황에 따라서 Studio 하단에 Find Refactoring Preview 창이 노출될 수 있는데 'Do Refactor' 버튼을 클릭하면 되겠다.

 

마지막으로 app 모듈의 build.gradle 파일의 applicationId를 수정하면 끝이다.

 

 

'개발 > Android' 카테고리의 다른 글

프로젝트에 NDK 모듈 추가하기  (0) 2021.03.05
ViewBinding  (0) 2021.02.25
Appium 설치  (0) 2021.02.17
Appium 실행  (0) 2021.02.17
Android Screen Capture(화면캡쳐)  (0) 2021.02.16
Posted by Lumasca
,

IntelliJ Community Edition 버전은 Spring Boot를 지원하지 않는다.

 

그래서 아래 사이트에서 프로젝트를 생성해서 이용하도록 한다. 여기서 생성한 프로젝트를 IntelliJ에서 오픈하면 폴더구조에 맞게 Application 클래스, 테스트 클래스, build.gradle 파일 등이 구성되어 있다.

 

start.spring.io/

 

위와 같은 화면이 나오는데 왼쪽은 프로젝트 정보를 작성하는 영역이고, 오른쪽은 프로젝트 디펜던시를 추가하는 부분이다.

원하는 대로 설정하고 하단에 GENERATE 버튼을 누르면 압축파일을 다운로드한다.

 

다운 받은 파일을  압축을 풀고 IntelliJ에서 오픈하면 된다.

 

IntelliJ에서 Run/Debug Configuration 을 설정해줘야 한다.

빌드(망치모양) 버튼 옆에 Edit Configuration 을 선택한다.

아래 창이 나타나는데 추가(+)버튼을 클릭하고, Application을 선택한다.

Main class 항목에 Application 클래스를 설정해준다. 우측에 ... 버튼을 클릭하면 Application 클래스가 보일 것이다.

혹시 찾이 못하면

혹시 Application 클래스를 자동으로 찾지 못하면 중간에 Use classpath of module 항목이 있는데 Application클래스가 위치한 경로를 선택해주면 된다.

 

이제 Application을 실행하면 된다.

 

Application Class 설정이 잘못되면 실행할때 아래 오류가 발생할 수 있다.

java.lang.NoClassDefFoundError: org/springframework/boot/SpringApplication

'개발 > 웹개발' 카테고리의 다른 글

IntelliJ LomBok Plugin 설치  (0) 2020.08.07
MariaDB(mysql) root password 분실 초기화  (0) 2020.08.07
gradle wrapper version 변경  (0) 2020.03.11
Posted by Lumasca
,

Appium 설치

개발/Android 2021. 2. 17. 16:46

터미널에서 npm 을 이용해서 설치를 진행한다.

 

$npm install -g appium

 

Desktop용 앱은 아래 사이트에서 dmg 파일을 받아서 설치하면 된다.

github.com/appium/appium-desktop/releases

 

Releases · appium/appium-desktop

Appium Server and Inspector in Desktop GUIs for Mac, Windows, and Linux - appium/appium-desktop

github.com

appium-doctor는 Appium의 의존성을 검증하는 도구이다.

$npm install -g appium-doctor

 

의존성이 올바른지 아래와 같이 점검하면 된다.

$appium-doctor --ios

$appium-doctor --android

 

flutter Driver 설치

$npm i -g appium-flutter-driver

 

Appium 실행

lumasca.tistory.com/966

 

Appium 실행

여기서 Appium 설치는 다루지 않는다. 일단 터미널에서 로그인한 계정의 쉘 환경설정을 검토해보자. JAVA_HOME이 잘못설정되어 있어서 오류가 발생했었다. ANDROID_HOME 에는 설치된 Android SDK 경로인데

lumasca.tistory.com

 

'개발 > Android' 카테고리의 다른 글

ViewBinding  (0) 2021.02.25
Android Studio Rename Package  (0) 2021.02.24
Appium 실행  (0) 2021.02.17
Android Screen Capture(화면캡쳐)  (0) 2021.02.16
Flutter Studio  (0) 2021.02.03
Posted by Lumasca
,

Appium 실행

개발/Android 2021. 2. 17. 11:14

여기서 Appium 설치는 다루지 않는다. 설치는 아래링크에서 확인하면 된다.

lumasca.tistory.com/967

 

Appium 설치

터미널에서 npm 을 이용해서 설치를 진행한다. $npm install -g appium Desktop용 앱은 아래 사이트에서 dmg 파일을 받아서 설치하면 된다. github.com/appium/appium-desktop/releases Releases · appium/appium..

lumasca.tistory.com

 

일단 터미널에서 로그인한 계정의 쉘 환경설정을 검토해보자. JAVA_HOME이 잘못설정되어 있어서 오류가 발생했었다.

 

ANDROID_HOME 에는 설치된 Android SDK 경로인데 아마 개발환경이 구축되어 있다면 이미 되어 있을 것이다.

JAVA_HOME 경로가 설정안되어 있으면 추가해야 한다. JAVA_HOME은 터미널에서 /usr/libexec/java_home -V 명령을 실행하면 확인할 수 있다.

 

$cd ~

$vi .bash_profile

export ANDROID_HOME=/Users/kbcard/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_241.jdk/Contents/Hom

수정한 환경설정을 적용한다.

$source .bash_profile

 

이제 Appium을 시작한다.

이제 첫 화면에서 Start Server 버튼을 클릭해서 서버를 시작하도록 하자.

Appium 서버가 실행중인 모습이다.

이제 돋보기 모양 버튼을 클릭하면 세션을 구성하는 화면이 보인다.

JSON 우측하단에 보면 Representation 항목이 있는데 안드로이드나 아이폰 테스트 환경에 맞게 구성해주면 된다.

 

아래는 안드로이드 예제이다.

{
  "platformName": "Android",
  "platformVersion": "9",
  "automationName": "Appium",
  "app": "/Users/$계정/Downloads/app-debug.apk",
  "appPackage": "com.example.flutter_app",
  "appActivity": "com.example.flutter_app.MainActivity"
}

automationName: 사용할 자동화 엔진. Appium이 기본, Android용은 UiAutomator2, Espresso, UiAutomator1 가 있고, 아이폰용은 XCUITest, Instruments 가 있다.

platformName: 사용할 모바일 OS 플랫폼. iOS, Android

platformVersion: 모바일 OS 버전.

deviceName: 사용할 모바일 디바이스나 에뮬레이터 종류. iPhone Simulator, Android Emulator 등. 안드로이드에서는 무시된다.

app: 디바이스에 설치할 apk 나 ipa 파일의 로컬 절대 경로 또는 원격 http URL

appActivity: 실행할 Activity명

appPackage: 실행할 앱의 패키지명

 

사용가능한 Capability 목록은 다음 링크에서 확인할 수 있다.

github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

 

이제 Start Session 버튼을 클릭한다. 이 작업은 시간이 조금 소요된다. 작업로그는 Appium 앱에서 확인할 수 있다.

 

문제가 없이 실행된다면 아래와 같은 화면을 보게될 것이다. 실제 디바이스 화면에서 실행된 앱이 보인다.

 

왼쪽화면에서 버튼을 눌렀더니 우측 Selected Element에 해당 버튼에 대한 속성들이 나타난다.

'개발 > Android' 카테고리의 다른 글

Android Studio Rename Package  (0) 2021.02.24
Appium 설치  (0) 2021.02.17
Android Screen Capture(화면캡쳐)  (0) 2021.02.16
Flutter Studio  (0) 2021.02.03
안드로이드 TextView 특수문자 표시  (0) 2021.02.01
Posted by Lumasca
,

먼저 apt로 tomcat8을 설치한다.

 

$sudo apt install tomcat8 tomcat8-admin

 

설치하겠냐고 물으면 'y'를 입력하면 된다.

 

설치가 완료되면 자동으로 서비스를 시작한다.

서비스를 확인해본다.

$sudo service tomcat8 status 

 

$IP주소:8080 또는 $도메인:8080을 브라우저 주소창에 입력하고 톰캣에 접속해본다. 

아래와 같은 화면이 나오면 정상.

톰캣 설정 폴더는 다음 경로이다. 

$cd /etc/tomcat8 

 

서버 설정은 다음 파일을 수정하면 된다.

$sudo vi server.xml

 

기본포트는 8080인데 파일에서 8080을 찾아서 원하는 포트번호로 변경해주고 톰캣을 재시작하면 된다.

 

$IP주소:8080/manager 에 접속하면 403 오류가 나타날 것이다.

 

tomcat-users.xml Role User 추가해야 manger 접속할 있다.

$sudo vi tomcat-users.xml

파일 마지막에 아래와 같은 부분이 있는데 ..

이 작성 양식을 참조해서 role과 user를 추가하면 된다. 다음 내용을 </tomcat-users> 태그 안에 위치하도록 작성한다.

 

<role rolename="manager-gui"/>

<user username="계정" password="비밀번호" roles="manager-gui"/>

 

저장하고 톰캣을 재시작한다.

$sudo service tomcat8 restart

 

보통은 방화벽을 설정해두었을테니 해당 tcp포트를 허용하도록 한다. 

$sudo ufw allow 8080/tcp

 

참고로 톰캣 설치 위치는 아래 경로이다.

/usr/share/tomcat8/

'개발 > 라즈베리파이' 카테고리의 다른 글

Jenkins NginX sub directory 설정  (0) 2020.01.07
Posted by Lumasca
,

PMP는 3년마다 갱신을 위해 60PDU를 보고하는 아주 수고스러운 작업을 해야한다. 

게다가 $150 를 지불해야한다. 혜택은 없는데 버리기는 약간 아쉬운 참 계륵같은 자격증이다.

 

PDU 확보하는데 어려움을 겪는 분들이 꽤 있는듯 한데 융통성 있게 처리하자.

우리는 돈을 내는 고객이고, PMI는 돈받는 입장이 아닌가...

적당히 PDU 등록해도 승인이 안된 적이 없었다.

 

https://pmi.org 에 가서 로그인하고 DashBoard로 이동한다.

중간에 아래와 같은 영역이 있는데 Report PDUs 버튼을 클릭한다.

 

PDU를 보고하는 화면인데 크게 Education과 Giving Back 2가지 영역으로 분류되어 있다.

Giving Back은 최대 25PDU이고, Work as a Practitioner는 최대 8PDU를 등록해야 한다.

Education은 최소 35PDU이고, 영역별로 Technical 최소8, Leadership 최소 8, Strategic 최소 8을 등록해야 한다.

 

나는 보통 PM실무(Work as a Practitioner) 8과, 나머지 52는 교육으로  처리했다.

교육은 Course or Training, Online or Digital Media, Read 3가지를 이용했다.

Course는 인터넷 강의, Digital Media는 웨비나, Read는 책을 이용해 학습한 내용을 등록했다.

 

먼저 PM  실무 경험을 등록한다.

최대 8이므로 5,3 이나 3,3,2나 편한대로 프로젝트를 나눠서 등록하면 된다.

Work as a Practitioner를 클릭한다.

아래와 같이 업무 경험을 입력하는 폼이 나타나는데 회사명, 직책, 프로젝트 시작일, 프로젝트 종료일만 필수이고, 나머지는 옵션항목이니 굳이 입력할 필요는 없다.

 

입력을 다했으면, 보고할 PDU를 선택하고, Submit 버튼을 클릭한다.

두번째는 Course or Training이다.

Provider(강의제공업체), Course(강의명), 강의 시작일/종료일 만 필수 입력사항이다.

PM 관련 온라인 또는 오프라인 강의를 입력한다.

 

위에 PM 실무와 다른데 Technical, Leadership, Strategic 으로 구분되어있다.

3가지 항목은 모두 최소 8PDU를 등록해야 한다.

적절히 분배해서 입력한다.

 

 

세번째는 Read 이다.

Author(저자), Title(제목), 시작일,종료일이 필수 입력항목이다.

PM 관련 책을 등록하면 된다.

 

 

마지막으로 Webinar는 영상을 시청하면 Digital Media 항목으로 자동 등록된다.

 

60PDU를 다 등록했으면, 남은것은 결제뿐이다.

 

비용이 아깝다. 이 자격증으로 뭔가 수익을 창출할 방법을 찾아야 한다..ㅋ

 

 

'IT 자격증 > PMP' 카테고리의 다른 글

PMP 자격증 취득!  (2) 2011.08.09
Posted by Lumasca
,

스마트폰의 물리 전원버튼 + 볼륨 Down 버튼을 동시에 누르면 캡쳐된 이미지가 갤러리에 저장된다.

 

최근에 출시된 갤럭시 모델들은 손날로 화면을 쓸어주면(왼쪽->오른쪽 or 오른쪽 -> 왼쪽) 캡쳐가 된다.

 

Android Studio 에서는 Logcat Viewer 왼쪽에 Screen Capture(카메라 모양) 버튼이 있다. 이 버튼을 클릭하면 캡쳐한 이미지를 저장할 수 있다. 이 버튼이 비활성화된 경우는 디바이스가 제대로 연결이 안된 것이니 다시 확인하도록 한다.

 

혹시 Logcat Viewer가 안보이면 메뉴에서 View -> Tool Windows -> Logcat을 선택하면 스튜디오 하단에 노출된다.

 

'개발 > Android' 카테고리의 다른 글

Appium 설치  (0) 2021.02.17
Appium 실행  (0) 2021.02.17
Flutter Studio  (0) 2021.02.03
안드로이드 TextView 특수문자 표시  (0) 2021.02.01
onTouch lambda should call View#performClick when a click is detected  (0) 2021.01.21
Posted by Lumasca
,