처음엔 plex 미디어서버를 설치했지만 제대로 사용하기 위해선 유료 구매를 해야했다.

그리고 성능도 유료로 구매할 정도는 아닌거 같아서 다른 미디어 서버를 찾았다.

 

jellyfin은 무료이고 설치도 쉽다.

 

https://jellyfin.org/downloads/server

 

Downloads | Jellyfin

The portable version can be run on any system with a .NET Core runtime.

jellyfin.org

curl https://repo.jellyfin.org/install-debuntu.sh | sudo bash

명령 스크립트를 받아서 실행하면 바로 설치가 된다.

enter와 y를 적절하게 입력해준다.

기본적으로 8096포트로 설치가 된다.

 

앞서 설치했던 owncloud와 같은 공간을 사용하기 위해 그룹을 만들고 함께 묶었다.

적당한 그룹을 만든다.

sudo groupadd groupname

젤리핀과 owncloud의 계정을 그룹에 추가해준다.

자신의 사용자도 그룹에 추가하면 data폴더에 접근이 쉬워진다.

sudo usermod -aG groupname www-data
sudo usermod -aG groupname jellyfin

data디렉토리의 소유자 그룹을 변경해준다.

sudo chown :groupname /var/www/owncloud/data

재부팅을 하면 적용이 된다.

 

그외에 권한 문제가 생기면 acl을 참고하기 바란다.(setfacl,getfacl)

https://it-serial.tistory.com/58

 

[Linux] ACL 개념 & 설정법(setfacl, getfacl)

리눅스는 대체적으로 서버로 많이 활용되고 있습니다. 서버로 활용되면 보안을 철저히 해야합니다. 간단하지만 리눅스 서버 보안 관련하여 ACL을 사용하기도 합니다. ○ ACL이란 ? ▷ Access Control L

it-serial.tistory.com

ls -al을 하면 현재 디렉토리의 파일과 디렉토리의 권한과 소유자 그룹을 볼수 있다.

drwxrwxrwx+ 로 나오는데

d는 디렉토리 첫 rwx는 소유자의 권한 두번째 rwx는 그룹의 권한 마지막 rwx는 다른 사용자의 권한이다.

+는 acl이 설정되어 있다는 의미이다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,
sudo vi /var/www/owncloud/config/config.php

개인서버로 cloud서비스를 이용할 수 있는 owncloud를 설치한다.

처음에는 우분투22.04에서 owncloud 설치하기라는 owncloud 가이드대로 했지만

외부 도메인에서 작동하지 않아 다른 설치방법을 찾았다.

https://github.com/linuxsyr/owncloud

 

GitHub - linuxsyr/owncloud: script to install owncloud on ubuntu 22.04

script to install owncloud on ubuntu 22.04. Contribute to linuxsyr/owncloud development by creating an account on GitHub.

github.com

명령어 스크립트를 다운로드 받아서 한 번에 설치할 수 있다.

물론 중간중간 enter와 y를 눌러주긴 해야한다.

 

스크립트 파일을 받아서 실행가능하게 권한을 변경해주고 실행한다.

wget https://raw.githubusercontent.com/linuxsyr/owncloud/main/owncloud.bash
chmod +x owncloud.bash
sudo bash ./owncloud.bash

설치가 다 되면 config.php에 신뢰할수 있는 도메인을 추가해줘야 제대로 작동한다.

sudo vi /var/www/owncloud/config/config.php
'trusted_domains' => [
	'localhost',
	'도메인',
	'내부 ip',
  ],

처음엔 localhost만 존재할 텐데 도메인과 내부 ip를 추가해준다.

 

데이터 디렉토리를 바꾸려면 아래와 링크와 같이 하면 된다.

바꿀 데이터 폴더와 기존 데이터 폴더를 www-data:www-data로 소유권한을 주어야 하는 것 같다.

그리고 폴더가 변경된 이후에 소유그룹을 변경하자.

https://jamong1014.tistory.com/111

 

[Server]OwnCloud 'data 폴더' 바꾸기 (Ubuntu/Debian)

가정 현재 폴더 : /var/www/owncloud/data 새 폴더 : /mnt/owncloud/data 아파치로 웹 서버 사용 중 OwnCloud의 데이터베이스 이름은 'owncloud' 단계 설명 아파치 중지 인스턴스에 대한 유지 관리 모드 활성화 Rsync

jamong1014.tistory.com

 

이걸로 설치를 하게 되면 owncloud 계정이 root에 비밀번호가 1234로 저장된다.

로그인해서 비밀번호를 바꿔는게 좋을 것이다.

그리고 db 계정은 root 이고 비밀번호가 1234인데 바꿔주는 것이 좋을 것이다.

db로 mariadb와 mysql을 사용하는데 비밀번호 변경은 아래와 같이 해주면 된다.

mysql -u root -p

비밀번호를 입력하라고 나오는데 1234를 입력한다.

mariadb에 접속되는데 mysql을 사용한다고 설정한다.

use mysql;

패스워드를 변경해준다. password()는 암호를 복호화해준다.

set password for 'root'@'localhost' = password('바꿀 비밀번호');

 바뀐 사항을 적용시킨다.

flush privileges;
exit;

마리아 db에서 나온다.

mysql -u root -p

새로운 비밀번호로 로그인이 되는지 확인한다.

 

기본적으로 80 포트로 설치된다.

 

owncloud 데이터 폴더 내용을 변경해도 목록이 반영되지 않는데 아래와 같이 하면 반영된다.

owncloud가 설치된 폴더로 들어간다.

cd /var/www/owncloud
sudo -u www-data php occ files:scan --all

파일을 검색해준다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

우분투 서버 22.04 설치

 

설치 USB를 만들었으면 컴퓨터에 꽂고 전원을 킨다.

설치 usb가 없으면 여기서 보자.

여기선 ventoy를 이용했는데 rufus를 사용해도 된다.

delete키를 눌러 부팅 우선순위를 바꾸고 저장하거나

esc키를 눌러 현재 부팅할 저장소를 선택해준다.(해당 키는 메인보드마다 다르다)

그런 뒤에 부팅하면 ventoy 선택화면이 뜰 것이다. 설치할 iso파일을 선택해준다.

 

리눅스 부팅이 시작되는데 여기서 첫번째 normal을 선택한다.

try or install ubuntu server를 선택한다.

설치를 준비한 뒤에 언어를 선택하는 화면이 나온다.

english를 선택하고 done을 눌러준다.

우분투 서버는 기본적으로 cli환경인데 한글이 지원되지 않는다.

추가로 desktop을 깔면 한글을 추가할 수 있지만 cli에서 글자가 깨지므로 기본언어는 영어로 해두는게 좋다.

키보드 레이아웃은 korean으로 설치한다. 어차피 한영키 사용을 위해서 추후에 변경해줘야 한다.

전체설치 최소설치를 선택화면에서 전체설치를 선택하고 done을 눌러준다.

proxy address는 수정하지 않고 done을 눌러준다.

mirror address도 수정하지 않고 done을 눌러준다.

 

설치 버전 update는 가운데 continue without update를 선택해준다.

 

하드 선택은 custom을 선택해서 윈도우를 설치할 때 미리 만들어둔 파티션을 수정해준다.

우분투를 설치할 파티션에 엔터를 누르고 edit를 누르고 ext4 포맷으로 바꿔주고 마운트 위치도 /로 바꿔준다.

그리고 done을 눌러준다.

 

name 폴더에 사용되고 표시되는 이름이다. ex)user

servername 서버의 이름이다. ex)server

username 사용자 아이디이다 ex)userid

password 비밀번호이다.

password confirm 비밀번호를 다시 눌러준다.

 

openssh는 설치해도 되고 안해도 된다.

나는 안하고 지나갔다.

 

이제 한참 기다리면 우분투 서버가 설치 완료된다

완료됐다는 메시지가 나오면 usb를 빼고 엔터를 눌러 재부팅을 시켜준다.

부팅이 완료되면 login이 나올 것이다.

여기에 username을 입력한다.

그리고 password를 입력해서 로그인 한다.

 

sudo passwd root를 해서 root의 비밀번호를 설정해준다.

나는 만든 계정의 비번과 통일했는데 다르게 설정할 수 있는지는 모르겠다.

 

우분투 서버에 gui환경 설치하기

sudo apt-get update

업데이트 가능 패키지를 검색한다.

sudo apt-get upgrade

업데이트를 해준다.

서버 개발 ide를 사용하거나 설정을 쉽게 하기 위해 gui를 설치해준다.

sudo apt-get install --no-install-recommends ubuntu-desktop
sudo apt-get install ubuntu-desktop

위는 최소설치 아래는 전체설치 인데 전체설치를 한다.

저장소 용량을 사용한다고 물어보는데 y를 눌러준다.

sudo apt-get install indicator-appmenu-tools

몇몇 오류 해결과 편의성을 위해 설치해준다.

sudo apt-get install lightdm

가벼운 lightdm을 깔아준다.

gdm3 lightdm 선택화면에서 lightdm을 선택해준다.

 

CLI환경으로 부팅하기

sudo vi /etc/default/grub

desktop을 설치하면 gui환경으로 부팅되는데 cli로 부팅되도록 grub을 수정해준다.

 

화면에서 GRUB_CMDLINE_LINUX_DEFAULT="" 라인을 주석 처리 한다.

GRUB_CMDLINE_LINUX="text" text를 입력해준다.

#GRUB_TERMINAL=console 에서 주석을 제거 한다.

#GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="text"
GRUB_TERMINAL=console

수정을 마쳤으면 esc를 누르고 wq! 엔터를 눌러 저장한다.

sudo update-grub

수정한 grub을 적용해준다.

sudo systemctl set-default multi-user.target

시스템 설정을 cli로 변경해준다.

sudo reboot

리부팅 한다.

 

gui가 필요할때는 서비스를 실행해서 사용한다.

sudo service lightdm start

 

GUI환경으로 부팅하기 

sudo systemctl set-default graphical.target

시스템 설정을 gui로 변경해준다.

sudo vi /etc/default/grub

주석을 제거한다.

GRUB_CMDLINE_LINUX_DEFAULT=""

GRUB_CMDLINE_LINUX에서 text를 지워준다.

GRUB_CMDLINE_LINUX=""

GRUB_TERMINAL를 주석처리한다.

#GRUB_TERMINAL=console

wq!를 눌러 저장한다.

sudo update-grub

수정한 grub을 적용하고 리부팅한다.

reboot

리눅스 시간 로컬 타임존으로 설정하기

듀얼부팅할 경우 리눅스를 부팅한 후에 윈도우를 부팅해보면 시간이 바껴있다.

날짜가 하루 차이거나 같고 시간은 다른데 분이 똑같다.

메인보드까지 동일하게 시간을 바꿔버린다.

타임존에 문제인거 같아서 검색을 해보니

리눅스에선 utc타임을 사용해서 시간을 설정하고 거기서 로컬 타임 시간을 적용한다고 한다.

그걸 로컬 타임을 적용하는 방법이 있었다.

 

우분투 터미널에서 적용해주자.

timedatectl set-local-rtc 1 --adjust-system-clock

잘 적용되었는지 확인하려면 아래를 실행시키면 된다.

timedatectl

그 뒤에 메인보드 시간을 바꾸거나 윈도우에 로그인해서 시간을 동기화 해주어야 하는 것 같다.

이제는 우분투를 부팅하고 윈도우를 부팅해도 시간이 잘 나온다.

 

원래대로 utc 타임을 설정하려면 아래와 같이 실행하면 된다.

timedatectl set-local-rtc 0 --adjust-system-clock

 

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

2테라의 하드가 달려있는 오래된(인텔 3세대) 데스크탑이 있는데

방치하기 아깝고 우분투도 써보고 웹서버도 개발해보고 NAS도 깔아보기 위해

겸사겸사 우분투 서버 22.04를 설치했다.

여러가지 문제가 생겨서 6~7번은 지우고 다시 깔았던거 같다.

나중에 다시 찾아볼지 몰라 정리해둔다.

 

먼저 설치할 우분투를 받는다.

우분투 서버는 gui가 제외되서 이미지 용량이 1.4G정도이고 우분투 데스크탑은 3.6G정도 된다.

https://ubuntu.com/download

 

Get Ubuntu | Download | Ubuntu

Download Ubuntu desktop, Ubuntu Server, Ubuntu for Raspberry Pi and IoT devices, Ubuntu Core and all the Ubuntu flavours. Ubuntu is an open-source software platform that runs everywhere from the PC to the server and the cloud.

ubuntu.com

우분투 서버 22.04 버전을 다운로드 받는다.

 

이미지를 usb에 굽기 위해서 ventoy 를 다운로드 받는다.

운영체제에 맞는 버전을 다운로드 받는다.

나는 windows버전을 받았다.

 

https://www.ventoy.net/en/download.html

 

Ventoy

Ventoy is an open source tool to create bootable USB drive for ISO files. With ventoy, you don't need to format the disk again and again, you just need to copy the iso file to the USB drive and boot it.

www.ventoy.net

 

ventoy는 부트로더를 깐 뒤에 usb에 iso를 복사해서 선택하게 되어 있어

usb하나로 여러개의 운영체제를 설치할 수 있다.

4g이상의 usb 장치를 선택해준다.(우분투 서버기준)

여러 iso를 함께 넣을거라면 8g나 16g 이상을 선택하는 것이 좋다.

포맷이 되니 usb에 필요한 파일이 있다면 먼저 백업해두자.

 

압축을 풀어서 폴더에 들어간 뒤 ventoy2disk.exe를 실행시킨다.

오래된 컴퓨터라 11은 깔 필요가 없어서 옵션의 보안 부트는 해제했다.

옵션에서 파티션 유형을 mbr로 바꿔준다.

그리고 설치를 클릭한다. 경고가 나오면 확인을 눌러준다.

ventoy 실행화면

장치를 포맷하고 부트로더를 깔아준다.

완료되면 장치가 비어있을 것이다.

거기에 다운로드한 우분투 iso파일을 넣어준다.

나는 윈도우10도 같이 넣어주었다.

 

같은 저장소에서 윈도우와 멀티부팅을 하려면 윈도우를 먼저 깔고 우분투를 깔아야

grub을 통해 부팅할 운영체제를 선택할 수 있다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

먼저 아래 링크에서 cocos2d-x를 다운받아준다.

cocos2d-x 4.0 다운받기

 

다운받은 cocos2d-x를 적당한 곳에 압축을 풀자.

마땅히 떠오르지 않는다면 C:\cocos2d-x 압축을 풀자.

 

그리고 코코스를 설정하기 위해 python을 설치해준다.

3점과 2점대가 다르다고 하니 2점대 버전을 설치해야 한다.

현재 가장 최신 버전인 2.7.18을 설치한다.

 

python 2.7.18 다운받기

 

파이선을 설치한다 설치할 항목을 선택하는 곳에서 전부 선택해서 설치해준다.

마지막 항목이 python을 환경변수에 넣어주는데 그래야 명령어 입력이 쉽다.

 

cocos2d 프로젝트들을 관리하기 위한 프로젝트 폴더를 만들자.

생각나는게 없으면 C:\cocos2d_workspace 로 만들자.

 

cmd를 실행시켜 cocos2d-x를 압축 푼 곳으로 이동한다.

처음에 c:\users\계정이름 일텐데 cd ../../cocos2d-x 를 입력해 이동해준다.

 

python setup.py를 입력한다. 탐색기에서 setup.py를 실행해도 될 수 있다.

 

android ndk sdk 설치 위치를 묻는데 입력해줘도 괜찮고 나중에 안드로이드 스튜디오에서 설정할수도 있으니 그냥 엔터를 눌러 스킵해줘도 괜찮다.

 

이제 cocos2d-x 개발환경이 설정되었다.

 

cmd에서 아래 명령어를 실행한다.

 

cocos new [프로젝트명] –p [패키지명] –l [사용할 언어] –d [생성할 경로]

cocos new CocosGame -p com.cocos.game -l cpp -d c:\cocos_workspace\

생성할 경로로 미리 이동하면 -d c:\cocos_workspace\를 생략가능하다

경로가 없으면 만들어주는것 같다.

 

CocosGame 폴더 안에 여러가지 플랫폼에 해당하는 폴더들이 만들어졌을 것이다.

그 중에 proj.android를 안드로이드 스튜디오로 열어준다.

 

그리고 개발을 시작하면 된다.

android sdk manager에서 cmake를 설치해 줘야 한다.

(ndk는 설치 안해줘도 될 것 같은데 요구한다면 해주자.)

 

cocos2d-x는 크로스 플랫폼을 지원해 대개 ios와 안드로이드를 동시에 지원하는 경우가 많다.

그래서 ios를 개발할 수 있고 android도 개발할 수 있는 mac에서 개발하는 것이 좋다.

 

윈도우에서는 안드로이드만 개발이 가능하다.

맥은 없고 새로운 안드로이드 C++ 개발환경을 경험해 보기 위해 시도해보았다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

안드로이드 11 버전 이상에선 무선 디버깅을 공식적으로 지원하는 것으로 알려져있다.

하지만 그 전에 출시된 폰에서도 무선 디버깅을 할 수 있다.

지원하는 최소버전이 있는지는 확인을 못했다.

 

휴대폰 정보에서 빌드번호를 여러번 눌러서 개발자 모드를 활성화시켜준다.

개발자 모드에서 adb 디버깅을 활성화 시켜준다.

 

무선으로 디버깅이 가능하려면 개발 PC와 개발폰이 같은 네트워크안에 있어야 한다.

 

개발폰을 개발PC에 USB로 연결한 후

adb tcpip 5555

(포트 번호는 수정해도 된다.)를 입력한다.

 

개발폰을 PC에서 연결해제 한다.

 

개발폰의 설정 -> 연결 -> Wifi 현재 네트워크에서 ip 정보를 확인한다.

 

adb connect 192.168.0.1:5555

 (:5555)는 생략가능한것 같다.

 

연결 확인은

adb devices

를 통해 할수 있다.

 

무선 디버깅을 연결해제 하려면 다음과 같이 입력하면 된다.

adb disconnect

※주의 adb에 연결된 모든 장치가 해제된다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

Duplicate class androidx.lifecycle.ViewModelLazy found in modules lifecycle-viewmodel-2.5.1-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.1) and lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1)

 

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1’

 

일단 위의 내용을 입력하니 정상적으로 작동하였다.

 

종속성 확인을 위해 터미널에서

./gradlew app:dependencies

를 실행하면 라이브러리별 종속성이 나온다.

 

해당하는 라이브러리에 아래와 같이 해주면 될 것 같다

dependencies {
    implementation('some-library') {
        exclude group: 'com.example.imgtools', module: 'native'
    }
}
블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb7a8aa38: Failure in SSL library, usually a protocol error
error:14077102:SSL routines:SSL23_GET_SERVER_HELLO:unsupported protocol (external/openssl/ssl/s23_clnt.c:714 0xa8f6e6e2:0x00000000)

 

안드로이드에서 api20 미만에서 발생하는 오류이고 젤리빈 에뮬레이터에서 발생했다.

안드로이드 20미만에서는 TLSv1 SSLv3만 지원을 하는데 서버 프로토콜이 이를 지원하지 않으면 발생한다

api20미만에서도 구글 플레이 서비스를 이용해 해결할 수 있지만 예전 에뮬레이터에선 구글 플레이가 지원이 안되어서 해결을 못하였다.

 

try {
          ProviderInstaller.installIfNeeded(getContext());
        } catch (GooglePlayServicesRepairableException e) {

          // Indicates that Google Play services is out of date, disabled, etc.

          // Prompt the user to install/update/enable Google Play services.
          GoogleApiAvailability.getInstance()
                  .showErrorNotification(context, e.connectionStatusCode)

          // Notify the SyncManager that a soft error occurred.
          syncResult.stats.numIoExceptions++;
          return;

        } catch (GooglePlayServicesNotAvailableException e) {
          // Indicates a non-recoverable error; the ProviderInstaller is not able
          // to install an up-to-date Provider.

          // Notify the SyncManager that a hard error occurred.
          syncResult.stats.numAuthExceptions++;
          return;
        }

아래 라이브러리를 추가해 주어야 한다.

implementation 'com.google.android.gms:play-services-auth:17.0.0'

요즘은 minsdk를 안드로이드6.0으로 설정하는 추세인거 같은데 그렇다면 발생할 일이 없겠지만 혹시 몰라서 올린다.

 

https://developer.android.com/training/articles/security-gms-provider#java

 

보안 프로바이더를 업데이트하여 SSL 악용으로부터 기기 보호  |  Android 개발자  |  Android Develope

보안 프로바이더를 업데이트하여 SSL 악용으로부터 기기 보호 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android에서는 보안 네트워크 통신을 제공하기

developer.android.com

 

https://stackoverflow.com/questions/29916962/javax-net-ssl-sslhandshakeexception-javax-net-ssl-sslprotocolexception-ssl-han

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

Android Emulator closed because of an internal error:
gpu found. vendor id 8086 device id 0x3e92
checking for bad AMD vulkan driver version...
amdvlk64.dll not found. Checking for amdvlk32...
amdvlk32.dll not found. No bad AMD Vulkan driver versions found.
checking for bad vulkan-1.dll version...
vulkan-1.dll version: 1.1.114.0
Not known bad vulkan-1.dll version; continue.

 

이런 메시지를 띄우며 에뮬레이터가 여러번 강제종료 되었다.

 

C:\Users\<your_account>\.android 폴더에 advancedFeatures.ini 를 생성해준다.

advancedFeatures.ini 안에는 아래 내용을 입력한다.

Vulkan = off
GLDirectMen = on
블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

프로젝트가 간단하고 외부 라이브러리 사용도 없다면 간단할 수 있다.

하지만 프로젝트 크기도 크고 외부 라이브러리를 사용했다면 여러 곳에서 문제가 발생할 수 있다.

 

사용중인 안드로이드 스튜디오에서 새로 프로젝트를 만들어서 조금씩 옮겨오는 방법도 있을 것이고

사용중인 안드로이드 스튜디오에서 프로젝트를 최신으로 업데이트하는 방법도 있을 것이다.

그러기엔 시간이 많이 들거 같아서 편법(?)을 사용했다.

 

프로젝트가 잘 실행되던 때의 안드로이드 스튜디오를 설치하고

라이브러리 버전이 최신 개발버전이었는데 그 당시의 배포버전으로 맞춰주었다.

 

https://developer.android.com/studio/archive

 

Android 스튜디오 다운로드 자료실  |  Android 개발자  |  Android Developers

이 페이지에는 Android 스튜디오 출시 관련 다운로드 자료실이 포함되어 있습니다.

developer.android.com

이전 버전의 안드로이드 스튜디오를 받을 수 있는 링크다.

약관 동의 버튼을 눌러주고 프로젝트가 정상적으로 동작하던 때의 버전을 사용하자.

 

github에 공개된 라이브러리라면 github주소/releases 에 보면 버전별로 볼 수 있다.

assets을 눌러보면 언제 업로드되었는지 확인할 수 있다.

프로젝트가 정상적으로 동작하던 때의 라이브러리 버전을 사용하자.

 

2019년 9월까지 정상적으로 작동했던 프로젝트를 이렇게 하니 별 오류없이 금방 되었다.

 

안드로이드 스튜디오를 사용하기 전이라면 좀 더 어려울 수 있을 것 같다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,