엄범



Activity를 만들었다면 반드시 `` AndroidManifest.xml``에 등록해주어야 한다. 등록하지 않고 해당 Activity를 호출하면 갑자기 종료된다고 뜬다.


가끔 백신(아베스트)새기가 adb 실행이나 복사, 이동 등을 막는 경우가 있으니 주의. 막는데 지 때문에 막히는거라고 안알려줌. 나쁜새기


눌러도 그냥 흰색 화면만 보일 때.

#1 잘못된 onCreate를 사용한 경우.

```kt

override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?)

```

같은 ``kt onCreate()``라도, 사용 목적이 다르다. UI initialization에 사용되는건 ``kt persistentState``가 없는 것이므로, 이를 사용해야 제대로 호출되며 view를 초기화할 수 있다.

``kt onCreate(Bundle, PersistableBundle)``는 재부팅 등등의 상황에서 예전에 받은 인텐트를 재사용하기 위해 사용하는 함수라고 한다.


#2 layout 파일에 지정해야 하는 속성을 빼먹은 경우.

e.g.
```xml
<LinearLayout android:orientation="vertical"...
```

강제 종료될 때

#1 layout 파일에 오타가 있는 경우.

```xml

<android.suppoert.v7.widget.Toolbar ...

```


#2 잘못된 Intent로 startActivity하는 경우

```kt
startActivity(Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS...
```

#3 Gson 사용할 때.

원래 불러올 json 데이터에 없는 이름이 data class에 적혀 있을 때는 그냥 ``kt null/0/false``를 가져오게 되지만,
``kt @SerializedName`` 애너테이션과 함께 사용하는 경우 어플리케이션이 뻗어버린다.
=> 이를 방지하기 위해서 ``kt @Expose``애너테이션이 있다.
근데 release build를 할 때 minify가 작동하게 되면, 무조건 ``kt @SerializedName``이 있어야만 객체에 매핑이 된다. 이는 변수 이름이 json key 이름과 똑같은 경우에도 예외 없다. 무조건 애너
테이션이 붙어 있어야만 매핑이 된다.

그래서 결론은, ``kt @SerializedName @Expose`` 둘 다 사용하는게 좋다.

#4 잘못된 context를 넘길때.

Activity context를 넘겨야 하는데 Application context를 넘긴다거나...


#5 필요한 권한인데 uses-permission 안하고 그냥 함수 호출할 때


인덴트를 보냈는데 실행되어야 하는 서비스가 실행 안될 때

PERMISSION 안줬을 경우.


R을 찾을 수 없다는 에러 빼고 모든 에러를 고쳤는데 컴파일이 안될 때

`` :app:processDebugResources``에서 에러가 발생했을 텐데, XML resource, 주로 layout 파일에 문제가 있을 가능성이 큼. 그낭 Build하면 제대로 수정했다고 해도 에러가 발생하는 경우가 있기 때문에 Invalidate cache하고 Rebuild 해야 한다.
  • 현재 xml파일에서 `` @+id``가 중복되는 경우에는 intellij가 알려주는데, 다른 파일과 중복되는 경우는 알려주지 않음.
  • `` layout_marginBottom``을 `` layout_marginButton``으로 쓴다던가 하는 오타. 이것도 안알려주니까 주의해야 함. 굉장히 곤란하다.
  • import 구문에서 빠져있는 경우... auto import가 안먹는다. 직접 추가해줘야 함.