블로그 이미지
Every unexpected event is a path to learning for you. blueasa

카테고리

분류 전체보기 (2861)
Unity3D (899)
Programming (479)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (192)
협업 (65)
3DS Max (3)
Game (12)
Utility (142)
Etc (99)
Link (34)
Portfolio (19)
Subject (90)
iOS,OSX (53)
Android (16)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (19)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday

Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536

 

안드로이드 빌드할 때 위와 같은 에러가 발생한다면?

 

minSdkVersion 이 21 이상인 경우

build.gradle 파일에서 multiDexEnable  true로 설정하면 됩니다.

android {
    defaultConfig
{
       
...
        minSdkVersion
21
        targetSdkVersion
26
       
multiDexEnabled true
   
}
   
...
}

 

minSdkVersion 이 20 이하인 경우

build.gradle 파일에서 multiDexEnable 을 true로 설정하고 multidex 지원 라이브러리를 추가해야 합니다. 

그리고 custom application을 사용하지 않는다면 MultiDexApplication을 추가해야 합니다.

android {
    defaultConfig
{
       
...
        minSdkVersion
15
        targetSdkVersion
26
       
multiDexEnabled true
   
}
   
...
}

dependencies
{
 
compile 'com.android.support:multidex:1.0.3'
}

<application
android:name="android.support.multidex.MultiDexApplication"
...>
...
</application>

 

 

 

왜 이런 에러가 발생하는가?

 

APK 파일에는 DEX(Dalvik Executable) 파일 형식의 실행 가능한 바이트코드 파일이 포함됩니다.

단일 DEX 파일 내에서 참조할 수 있는 메서드의 총 개수를 65,636으로 제한하며 이 DEX 파일에는 프레임워크 메서드, 라이브러리 메서드, 본인 앱에서 정의한 메서드가 모두 포함됩니다. 즉 앱 내의 모든 메서드가 65,536개를 넘어서 이러한 에러가 발생한 것입니다. 64 * 1024의 값과 동일하며 이 제한을 64K 참조 제한이라고 합니다.

 

안드로이드 L  (롤리팝, 5.0  API 21 ) 미만의 플랫폼 버전에서는 앱 코드 실행을 위해 Dalvik 런타임을 사용합니다. APK당 하나의 classes.dex 바이트코드 파일로 앱을 제한합니다. 이러한 제한을 해결하기 위해 multidex 지원 라이브러리를 사용할 수 있습니다. 

안드로이드 L (롤리팝 5.0 API 21) 이상에서는 Dalvik이 아닌 ART (Android Runtime)이라는 런타임을 사용합니다. 이 런타임은 APK 파일로부터 여러 개의 DEX 파일을 로드하는 것을 지원합니다. ART는 앱 설치 시에 사전 컴파일 수행하여 classesN.dex 파일들을 스캔하고, 안드로이드 기기가 실행할 수 있도록 .oat 파일로 컴파일 합니다.

그래서 minSdkVersion 21이상이라면 multidex 지원 라이브러리가 필요없습니다. build.gradle에 간단하게 multiDexEnabled true 만 추가하면 됩니다.

 

 

multidex 속도가 느린 이유?

각 DEX 파일들을 빌드할 때 빌드 툴(buildToolsVersion)은 주 DEX 파일에 어떤 클래스들을 포함할지 고르는 아주 복잡한 의사결정을 수행하게 됩니다. 이러한 과정이 없다면 앱 실행에 필요한 클래스들이 주 DEX에 포함되어있지않아 Crash가 나기때문입니다. 그래서 이러한 과정을 거치게되는데 시간이 상당히 오래걸립니다. 

 

 

네이티브 코드가 주 dex에 포함이 안되는 경우?

네이티브 코드를 사용하는 라이브러리를 포함한다고 생각해 봅시다.  그 라이브러리에서 네이티브(JNI) 코드를 사용하게되면 의사결정 과정에서 라이브러리가 구동되기위해 필요한 클래스들이 주 DEX 파일에 포함되지 않을 수 있습니다. 그럴 경우에는 multiDexKeepFile, multiDexKeepProguard 를 사용해서 주 DEX에 포함시키도록 해야합니다.

 

 

빌드 최적화

위에도 써놨듯이 multidex는 복잡한 의사결정을 수행하면서 빌드 시간이 상당히 커질 수 밖에 없습니다. 빌드 시간을 줄이기 위해서 빌드 사이에 multidex를 재사용하는 pre-dexing을 사용할 수도 있습니다. 하지만 Android 5.0 롤리팝 이상인 ART 환경에서만 가능합니다.

Android Studio 2.3 이상인 경우는 IDE에서 자동으로 pre-dexing을 사용하기 때문에 별도로 작성할 것은 없습니다. android studio gradle plugin은 최신버전으로 업데이트하면 빌드 속도를 최적화하는 기능들이 추가적으로 들어있기 때문에 항상 최신버전으로 유지하는 것이 좋습니다.

 

 

multidex의 알려진 문제들.

- 단말기에 DEX 파일들을 설치할 때, 두번째 DEX 파일이 클 경우에 ANR(Android Not Responding)이 발생할 수 있습니다. 이를 막기 위해서 ProGuard 에서 코드 축소(Code Shrinking)을 해야 합니다.

- Android 5.0 롤리팝 미만에서 실행할 경우 linearalloc limit (issue 78035) 이슈를 완전히 막을 수 없습니다.



출처: https://duzi077.tistory.com/198 [개발하는 두더지]

 

Android Cannot fit requested classes in a single dex file. 해결 방법 - 190124 업데이트

Error:Cannot fit requested classes in a single dex file.Try supplying a main-dex list. # methods: 72477 > 65536 안드로이드 빌드할 때 위와 같은 에러가 발생한다면? minSdkVersion 이 21 이상인 경우 buil..

duzi077.tistory.com

 

반응형
Posted by blueasa
, |

[에러메시지]

DllNotFoundException: FirebaseCppApp-6_9_0
Firebase.AppUtilPINVOKE+SWIGExceptionHelper..cctor () (at Z:/tmp/tmp.G7nHbBPBcF/firebase/app/client/unity/proxy/AppUtilPINVOKE.cs:117)

....(하략)....

 

 

유니티에서 플러그인을 어느 플랫폼에 사용할 지 셋팅하는 인스펙터 창에 보이는 'Any Platform'이 신뢰하기 힘든 동작을 하는 것 같다.

이 번에 한바탕 한 플러그인은 FirebaseCppApp-6_9_0이다.

아래와 같이 'Any Platform'을 체크하고, 내 자리에서 제대로 동작하는 걸 확인하고 Commit을 했는데 다른 자리에서 제대로 인식을 하지 못한다.

 

Any Platform 체크

 

그래서 'Any Platform'을 해제하고 개별적으로 모두 체크하니 제대로 동작한다.

개별적으로 Platform 모두 체크

 

'Any Platform' 체크를 사용하지 말아야겠다.

반응형
Posted by blueasa
, |

[에러메시지]

Resolution failed

Failed to fetch the following dependencies:
com.google.firebase:firebase-analytics:17.2.1
com.google.firebase:firebase-analytics-unity:6.9.0
com.google.firebase:firebase-common:19.3.0
com.google.firebase:firebase-app-unity:6.9.0
com.crashlytics.sdk.android:crashlytics:2.9.9
com.google.firebase:firebase-crashlytics-unity:6.9.0
com.google.android.gms:play-services-appinvite:18.0.0
com.google.firebase:firebase-dynamic-links-unity:6.9.0
com.google.firebase:firebase-messaging:20.1.0
com.google.firebase:firebase-messaging-unity:6.9.0
com.google.firebase:firebase-config:19.0.4
com.google.firebase:firebase-config-unity:6.9.0
com.google.android.gms:play-services-ads:18.3.0

 

[해결방법]

환경변수에 JAVA_HOME이 설정.

(새 컴퓨터 셋팅하면서 OpenJDK는 넣었는데 JAVA_HOME 설정을 안해서 생긴 문제)

 

 

 

[해결책 출처]

wagner32 commented on 28 Jan 2019

@srcsameer @MDReptile @GiorgioTurro i know the solusion just make "JAVA_HOME"
like this

https://user-images.githubusercontent.com/47056856/51804757-5f8d1b80-2297-11e9-90b8-e09ace2c17af.png

 

 

 

 

Aadd 'JAVA_HOME'

 

[출처]

https://github.com/playgameservices/play-games-plugin-for-unity/issues/2116

 

Resolution Failed!!! Please help. · Issue #2116 · playgameservices/play-games-plugin-for-unity

Hi! guys in my project i already have AdMob plugin installed and i am trying to add play-games-plugin-for-unity when i clicked to import GooglePlayGamesPlugin-0.9.50 it started to import in unity. ...

github.com

 

반응형
Posted by blueasa
, |

Google play console에 처음 apk를 등록하는 분들이라면 한번씩 겪게되는 상황이 있습니다. 바로 keystore 생성을 하지않아 apk 업로드 실패하는 상황이죠....

 

유니티 개발자들은 별 어려움 없이 몇가지 작업으로 keystore를 생성할 수 있습니다.

 

1. File -> BuildSettings -> PlayerSetting ->Publishing setting 으로 이동하면 다음과 같은 화면을 볼 수 있습니다.

 

 

 

우리는 새 키스토어를 생성하려는 것이기 때문에

2. Create a new keystore를 눌러줍니다.

 

3. Keystore password

비밀번호를 입력하고 밑에같에 확인란 까지 같이 입력해줍니다.

 

4. Browse Keystore를 눌러줍니다. 

 

네... 몇몇분들도 저랑 같은 생각을 하시지 않을까합니다. 새로 생성한는데 '왜 키스토어파일을 찾냐..?'

 

직접해본결과 create a new keystore를 체크한 상태에서는 파일을 찾는게아니라.. 새로생성될 keystore 파일의 저장 경로와 저장될 파일명을 세팅하는 것이었습니다. 

(헤깔리게 하지마 ㅜㅜㅜㅜㅜ)

 

 

 

5.Key Alias 생성

위에서 keystore 비밀번호 입력 까지 정삭적으로 끝냈다면 Alias를 새로 생성할 수 있습니다.
Unsignes를 눌러 Create new key를 눌러줍니다.

 

6. 정보 입력

 

Alias - 아무 이름 지어서 적어 넣습니다.

password - 비밀번호 안까먹을 만한걸로 적어줍니다.

confirm - 비밀번호 재확인

validity( years) - 50년은 충분한 시간이라고 생각됩니다. 그냥 내비둡니다.

 

나머지 밑에는 건너뛰고 
 country code 만 Ko로 적고  create Key를 눌러 생성을 하였습니다.

 

이제 새로생성한 keystore와 key를 세팅해주고 비밀번호를 정상적으로 입력해줍니다.

 

7. apk 생성

네 이제 끝까지 왔습니다. 

 

 

8. apk 업로드 

 

위의 과정을 잘 따라 하셨다면 정상적으로 업로드된 화면을 볼 수 있으셨을 것 입니다. 



출처: https://enjoylifeforme.tistory.com/entry/Unity-Keystore-생성 [즐거운하룽]

 

[Unity] Keystore 생성

[Unity] Keystore 생성 Google play console에 처음 apk를 등록하는 분들이라면 한번씩 겪게되는 상황이 있습니다. 바로 keystore 생성을 하지않아 apk 업로드 실패하는 상황이죠.... 유니티 개발자들은 별 어려움..

enjoylifeforme.tistory.com

 

 

반응형
Posted by blueasa
, |

Windows7 64bit

Unity 2018.4.13f1

Firebase 6.9.0

 

Firebase 6.9.0 넣고 나온 또 다른 빌드 에러..


CommandInvokationFailure: Gradle build failed. 

...

stderr[

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':packageRelease'.
> 1 exception was raised by workers:
  java.io.UncheckedIOException: java.io.IOException: Failed to obtain compression information for entry

 


해결책은 아래와 같다.

Minify-Release/Debug가 기본 None인데, 업데이트 되면서 값을 넣어야 되나보다.

Proguard 이야기도 있긴한데, 우선 아래 보이는대로 Gradle (Experimental) 로 바꾸니 빌드가 잘 된다.

 


 

Someone in the thread from unity forum finally posted a working solution. I'm gonna share it here as well so hopefully everyone who lands on the question with this issue will not have to spend 30 hours blindfolded, resolving dex merging conflicts like I did.

Turns out that with new new version there is a few more options in the publish settings that needs to be set!

quoting RealPpTheBest s' answer

Go to player settings > Project Settings > Minify, in there, there will be an option of Release, set it to Gradle .

For some reason when choosing gradle build these two are not automatically toggled, and maybe in some cases they don't have to be. But setting minify to Grable (experimental) completely resolved all the build errors I was getting after updating unity.

EDIT: september-2019 - Solution above should still work, but:

I have lately been experimenting with choosing Proguard instead of the experimental Gradle minifier (can be selected in the dorpdown as well). When configured correctly proguard will also resolve your DEX limitation errors, and get rid of unused code and even compress your build size even more.

This post has a quite throughly detailed guide on how to enable and configure it. Keep in mind though, that the configuration will be unique to which dependencies you are using, so you will have to read up and do some custom configuration here most likely.

shareedit

edited Sep 26 '19 at 7:39

 

answered Jun 24 '19 at 15:46

Rasmus Puls

8996 silver badges19 bronze badges

 

[출처]

https://stackoverflow.com/questions/56623107/unity-gradle-build-error-while-merging-dex-archives/58012656#58012656

 

Unity gradle build - Error while merging dex archives

I'm trying to compile my project using "Build App Bundle (Google Play)" for the first time. However I am getting an error while merging dex archives. I believe it is due to some of my plugins are u...

stackoverflow.com

 

[참조]

https://forum.unity.com/threads/gradle-shenanagains.602599/

 

Gradle Shenanagains?

Honestly, I have no idea what's going wrong here. CommandInvokationFailure: Gradle build failed. C:\Program...

forum.unity.com

 

 
반응형
Posted by blueasa
, |

[복사용 명령어]

keytool -exportcert -alias androiddebugkey -keystore C:\Users\{계정이름}\.android\myKeyStore | C:\Users\{계정이름}\openssl-0.9.8e_X64\bin\openssl sha1 -binary | C:\Users\{계정이름}\openssl-0.9.8e_X64\bin\openssl base64

 

 

[링크1] https://stickyny.tistory.com/62

 

[SO] 페이스북 연동을 위한 Hash Key 등록

3번째? 4번째 등록인 것 같다. 할 때마다 복잡하고 어렵다. APK를 배포하는 PC에 이 작업이 되어 있어야 한다. 1. 개발자 페이스북에 앱 추가하기 https://developers.facebook.com/apps/ URL에 접속해서 새 앱을..

stickyny.tistory.com

[링크2] https://mytalkhome.tistory.com/658

 

[Android] FaceBook Key Hash생성하기( 디버그 / 배표용 사인키 )

Facebook SDK를 사용하기 위해서는 Key Hash가 필요합니다 Android는 개발시 키를 2개를 사용하는데요, 개발시 사용되는 디버그키 , 실제 배포에 사용되는 키 입니다. 어차피 둘다 쓰는거니까 둘다 생성해서 등록..

mytalkhome.tistory.com

[링크3]

https://velog.io/@apocaris/Facebook-API-%EB%93%B1%EB%A1%9D%EC%9D%84-%EC%9C%84%ED%95%9C-Hash-Key-%EC%83%9D%EC%84%B1-72jvvt8bwd

 

Facebook API 등록을 위한 Hash Key 생성

java 설치 2. openssl 설치 링크로 이동하여 (다운로드) 윈도우 버전에 맞게 설치 프로그램을 받는다. 받고 압축을 풀고 임의의 위치에 옮긴다. ( 작성자는 C:\Users\계정 위치에 옮겼음 ) 3. cmd 를 열고 Java 가 설치된 경로로 이동. ( C:\Program Files\Java\jdk1.8.0211\bin ) 4. 다음의...

velog.io

 

반응형

'Unity3D > Facebook SDK' 카테고리의 다른 글

[AOS] android-simple-facebook  (0) 2014.07.14
Posted by blueasa
, |

OS : Windows7 64bit

Unity : 2018.4.13f1

Firebase : 6.9.0


Generation of the Firebase Android resource file google-services.xml from Assets/Firebase/google-services.json failed.
If you have not included a valid Firebase Android resources in your app it will fail to initialize.
"C:\Project\git\ProjectName\Assets\Firebase\Editor\generate_xml_from_google_services_json.exe" -i "Assets/Firebase/google-services.json" -l

Traceback (most recent call last):
  File "", line 446, in 
  File "", line 289, in main
  File "", line 228, in argv_as_unicode_win32
AttributeError: 'module' object has no attribute 'wintypes'
generate_xml_from_google_services_json returned -1


Firebase 6.9.0을 유니티에 Import하고 위와 같은 에러를 보게 됐다.

결론적으로 wintypes attribute가 없다는 말인데 저게 뭔지 몰라서 한참 찾아 헤메다가

아래 링크에서 답을 찾았다.

 

[해결방법] 원본 (https://github.com/firebase/quickstart-unity/issues/540)

[해결방법] Detail (https://github.com/firebase/quickstart-unity/issues/540)

 

결론적으로 Firebase 6.9.0이 Windows7을 제대로 지원하지 않는 것 같다.

그래서 generate_xml_from_google_services_json.exe 파일을 다시 컴파일하는 작업을 위해서 설명하고 있다.

Python 2.7이 필요한데, Python 2.7.9 이상을 설치해야 pip가 Python에 기본적으로 들어 있다.

나는 아래 링크의 2.7.17을 깔았다.

 

[Python 2.7.17 다운로드] https://www.python.org/downloads/release/python-2717/

 

해결방법 Detail 설명대로 다하고나니 이제 에러가 뜨지 않는다.

 

 

P.s. Windows7 지원 종료가 되면서 여기저기 다른 곳에서도 지원을 종료하면서 개발에 피해가 오고 있는 걸 체감하고 있다.

    현재 피해 당하고 있는 건 SourceTree와 Firebase..-_-

 

 
반응형
Posted by blueasa
, |

최근에 안드로이드 프로젝트 컴파일 시 오류가 발생했습니다.

구글링으로 이것 저것 같아 보았는데, compileSdkVersion 와 com.android.support:appcompat-v7을 28로 올리면 해결된다는 글이 많았습니다. 

그래서 원인을 찾아보고 해결 방법을 찾았습니다.

 

[오류]

error: resource android:attr/fontVariationSettings not found.

Message{kind=ERROR, text=error: resource android:attr/fontVariationSettings not found., 

sources=[C:\*****\*****\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\4fbc79d932923de1fd1d9a6e9b479d50\res\values\values.xml:246:5-69], original message=, tool name=Optional.of(AAPT)}

 

error: resource android:attr/ttcIndex not found.

Message{kind=ERROR, text=error: resource android:attr/ttcIndex not found., 

sources=[C:\*****\*****\.gradle\caches\transforms-1\files-1.1\appcompat-v7-26.1.0.aar\4fbc79d932923de1fd1d9a6e9b479d50\res\values\values.xml:246:5-69], original message=, tool name=Optional.of(AAPT)} 

 

[원인]

 애드몹의 SDK 최신 버전이 18로 이번주에 배포 되어 있는데, 이 SDK의 경우 Android API 28(안드로이드 9) 에서 최적화 된듯 합니다.

gradle의 dependencies에서 최신의 애드몹 SDK를 참조하고 있고, Andorid API가 27 이하인 경우에 발생합니다.

 

[해결]

 모듈 gradle에서 참조하고 있는 애드몹의 SDK의 버전을 17로 설정하면 컴파일 오류가 해결됩니다.

 

(변경전) 

implementation 'com.google.android.gms:play-services-ads:+'

(변경후)

implementation 'com.google.android.gms:play-services-ads:17+'

 



출처: https://docko.tistory.com/entry/안드로이드-오류-error-resource-androidattrfontVariationSettings-ttcIndex-not-found [장똘]

 

안드로이드 오류 - error: resource android:attr/fontVariationSettings & ttcIndex not found.

최근에 안드로이드 프로젝트 컴파일 시 오류가 발생했습니다. 구글링으로 이것 저것 같아 보았는데, compileSdkVersion 와 com.android.support:appcompat-v7을 28로 올리면 해결된다는 글이 많았습니다. 그래서..

docko.tistory.com

 

반응형
Posted by blueasa
, |

 

[링크] https://github.com/Over17/UnityAndroidNotchSupport

 

Over17/UnityAndroidNotchSupport

Support for Android Notch (Cutout) in Unity 2017.4 and earlier - Over17/UnityAndroidNotchSupport

github.com

UnityAndroidNotchSupport

Android devices with a notch (display cutout) have recently become quite common. However, if you make a Unity application and deploy it to such device, by default Android OS will letter-box your app so that it the notch doesn't interfere with your UI.

If you want to make use of the whole display surface area and render in the area "behind" the notch, you need to add code to your application. Fortunately, since Unity 2018.3 there is a special option in the Player settings called "Render outside safe area" which does exactly this. If you want to have the same option in earlier versions of Unity - this plugin was made for you!

One advantage of this plugin over the built-in Unity solution is that it allows changing the setting in runtime if needed, by calling public void SetRenderBehindNotch(bool enabled) in RenderBehindNotchSupport.

If you are planning to make use of "rendering behind the notch" feature, you'll also need another feature which returns you the area of the screen which is outside of the notch area (and is safe to render to). The API is equivalent to what Screen.safeArea API does in newer Unity versions, and returns a Rect.

This plugin is targeted towards Unity 2017.4, however I see no reasons why it shouldn't work with earlier versions too.

System Requirements

  • Tested on Unity 2017.4.28f1. Should work on any Unity version out there, but make sure your target API is set to 28 or higher. There is no point in using this plugin in Unity 2018.3 or later because these versions have notch support out of the box.
  • An Android device with Android 9 Pie or later. Some devices with earlier Android versions have notch/cutout, but Google has added a corresponding API only in Android 9. Feel free to add other vendor-specific bits of code to add support on earlier Androids at your own risk.

Usage

  1. Copy the contents of Assets directory to your project
  2. Attach the Assets/Scripts/RenderBehindNotchSupport.cs script to a game object of your choice in your first scene to make sure the plugin is loaded as early as possible
  3. The script has a public boolean property so that you can tick/untick the checkbox to enable or disable rendering behind the notch with a single click
  4. If you want to change the setting in runtime, call public void SetRenderBehindNotch(bool enabled) in RenderBehindNotchSupport class.
  5. Attach the Assets/Scripts/AndroidSafeArea.cs script to a game object of your choice if you need the safe area API. The property AndroidSafeArea.safeArea is returning a Rect, use it to layout your UI.
  6. Enjoy

Alternative solution

Instead of using the script (or if you want to apply the "render behind the notch" flag as early as possible), you could modify the theme used by Unity. To do so, please create a file at the path Assets/Plugins/Android/res/values-v28/styles.xml with the following contents:

Unity 2017.4 or newer

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="BaseUnityTheme" parent="android:Theme.Material.Light.NoActionBar.Fullscreen"> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> </style> </resources>

Before 2017.4 (ie. 5.6)

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="UnityThemeSelector" parent="android:Theme.Material.Light.NoActionBar.Fullscreen"> <item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item> </style> </resources>

There is no need to add the script to your project in this case. You may also need to tweak the snippet above if you are using a custom theme.

I recommend using the default approach with the script unless you have good reasons to do otherwise.

Useful Links

License

Licensed under MIT license.

반응형
Posted by blueasa
, |

[수정] 2021-06-10

Height 값 참조 오류 수정(참조 값 manualHeight -> activeHeight로 변경)

 

[스크립트 파일]

UISafeAreaOffsetController.cs
0.00MB

 

아래 위치와 같이 Anchor의 하위에 GameObject를 하나 만들고,

인스펙터와 같이 Top/Bottom에 따라 만들어진 GameObeject를 Drag&Drop 해서 Link 한다.

 

 

위와 같이 셋팅해 주면 Fan이 Top쪽 Safe Area가 있으면 그에 맞게 좀 더 내려온다

(Bottom은 같은 형태로 List Offset List_Bottom에 Link 해주면 된다.)

 

대충 만들어서 넣어놔서 정리좀 하고 싶지만 다음 기회로..

필요하신 분은 받아서 써보시고 개량해서 공유 좀 해주세요~

 

 

[참조] https://blueasa.tistory.com/2272

반응형
Posted by blueasa
, |