Blog Article 08 05 - nolsigan/nolsigan.github.io GitHub Wiki
์๋ ํ์ธ์, ์ด์์์์ด์ค์์ ์๋๋ก์ด๋ ๊ฐ๋ฐ์ ๋งก๊ณ ์๋ ๊น๋ฒ์ค(์ค)์ ๋๋ค.
์ต๊ทผ ์๋๋ก์ด๋ HTTP Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ Volley์์ Retrofit2๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์์ ๊ฒช์๋ ProGuard ๊ด๋ จ ๋ฌธ์ ์ ํด๊ฒฐ๊ณผ์ ์ ๊ณต์ ํ๋ ค ํฉ๋๋ค.
์ ํฌ๊ฐ ๊ฒช์ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์๋ก์ด feature์ ์ฐ์ด๋ API ๋ชจ๋์ Retrofit2๋ฅผ ํตํด ๊ตฌํํ์์ต๋๋ค.
- QA ๊ณผ์ ์์ ์๋ฌด ๋ฌธ์ ๊ฐ ์์ด์ ๊ตฌ๊ธ ํ๋ ์ด์ ๋ฐฐํฌํ์์ต๋๋ค.
- ๊ตฌ๊ธ ํ๋ ์ด์์ ๋ค์ด๋ก๋ํ๋ ์๋ก ๋ง๋ API๊ฐ ์๋์ ์ ํ์ต๋๋ค ใ ใ
๋ฉ์ฉกํ๋ API๊ฐ ๋ฐฐํฌํ๋ ๊ฐ์๊ธฐ ์๋๋ค๋.. (๋ฉ๋ถ)
APK ํ์ผ์ ๋ค์ด๋ก๋ํ์ฌ ํ
์คํธํ์ง ์๊ณ Android Studio๋ฅผ ํตํ ๋น๋๋ก๋ง ํ
์คํธํ ๊ฒ์ด ๋ฌธ์ ์์ต๋๋ค.
ProGuard๊ฐ APK๋ฅผ ๋๋
ํํ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ ๊ฒ์ด์ฃ !
์ ํํ ์ด๋ค ๋ฌธ์ ์๋์ง ์ค๋ช ํ๊ธฐ์ ์์ ๋จผ์ ProGuard์ ์ ํฌ๊ฐ ์ฌ์ฉํ retrofit2 ์ค์ ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
ProGuard๋?
ProGuard๋ APK ๋น๋ ๊ณผ์ ์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๊ณ , ๋จ์ ์ฝ๋๋ฅผ ๋๋
ํ๋ฅผ ํตํด ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ์ด๋ ต๊ฒ ํฉ๋๋ค.
ProGuard์ ๊ฒฝ์ฐ์๋ class, method, field์ ์ด๋ฆ์ ์ค์ฌ ๋๋
ํ๋ฅผ ํ๊ฒ ๋๋๋ฐ, ์๋ฅผ ๋ค๋ฉด 'name' ์ด๋ผ๋ String ํ์
์ field๋ฅผ 'a'๋ผ๊ณ ์นํํฉ๋๋ค.
์ด ๋, ๋๋ ํ๊ฐ ์ฝ๋ ์๋์ ์ํฅ์ ์ค ์ ์๋ ๋ถ๋ถ๋ค์ '-keep class ~'์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋๋ ํ์์ ์ ์ธํด์ค๋๋ค.
retrofit2 + rxjava
์ ํฌ๊ฐ retrofit2์ ๋์ ํ๋ฉด์ ์ ํํ๊ฒ ๋ ๊ตฌ์กฐ๋ rxjava์ Observable class์ GsonConverter๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-- ์ฝ๋ -- //Retrofit ์ค์ mApi = new Retrofit.Builder() .baseUrl(SERVER_URL) .client(new OkHttpClient()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //Rxandroid .addConverterFactory(GsonConverterFactory.create()) //Json Parser ์ถ๊ฐ .build().create(Im8Service.Im8Api.class); //์ธํฐํ์ด์ค ์ฐ๊ฒฐ
-
๋ฐ๋ก - @POST("get_nation_ids_and_names") Observable<Im8Response.Nations> getNationIdsAndNames(@Query("access_token") String accessToken);
-
๋ชจ๋ธ ๋ฐ๋ก - -- ์ฝ๋ --
RxJava์ Observable๋ฅผ ํตํด ์ด๋ค class๋ก response๋ฅผ ๋ฐ์ ๊ฒ์ธ์ง ์ง์ ํด์ฃผ๋ฉด, GsonConverter๋ฅผ ํตํด response๋ฅผ JSON์ผ๋ก serializeํ์ฌ ์ง์ ํ class์ ๊ฐ ๋ฉค๋ฒ ๋ณ์์ ๋์
ํด์ค๋๋ค.
API ์ฝ์ ๋ถ๋ฅด๋ฉด callback์ ์ง์ ํ class์ ๊ฐ์ฒด๋ฅผ ๋๋ ค์ฃผ๋ ๊ทธ๋ฅ ๋ฐ๋ก class method๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. (์งฑ ํธํจ..)
retrofit2 + rxjava์ ์์ธํ ์ค์ ์ด ๊ถ๊ธํ์ ๋ถ์ https://medium.com/@ahmedrizwan/rxandroid-and-retrofit-2-0-66dc52725fff#.rn3g84oxv๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์~
๋ฌธ์ ๋ Model์ ๋๋ ํ์ ์์๋ค..
์์์ ์ธ๊ธํ ๊ฒ์ฒ๋ผ response๊ฐ ๋ค์ด์ค๊ฒ ๋๋ฉด GsonConverter๊ฐ JSON์ผ๋ก ํ์ฑํด์ฃผ๊ณ model class์ ๋ฉค๋ฒ ๋ณ์์ ๋์ ํด์ฃผ๋๋ฐ, ์ด ๋ ProGuard๊ฐ ์ด class์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๋๋ ํํ๋ฉด..! ๋์ ๋๋ ์ด๋ฆ์ ๋ฉค๋ฒ ๋ณ์๊ฐ ์์ผ๋ ์ค๋ฅ๊ฐ ์๊ธฐ๋ ๊ฒ์ด์ฃ .
์ค์ ๋ก ๋๋ ํ ๋ class๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-- ์ฌ์ง --
proguard configuration
default
retrofit ํํ์ด์ง๋ proguard๋ฅผ ์ฌ์ฉํ ์ ์ด๋ค ์ค์ ์ ์ ์ฉํด์ผ ํ๋์ง ์น์ ํ๊ฒ ์จ ๋์์ต๋๋ค.
- ์ฌ์ง -
์ด๊ฒ๋ง ๋ณด๊ณ ์ค์ ์ด ๋๋ฌ๋ค๊ณ ์๊ฐํด์ ๋ฌธ์ ๊ฐ ์๊ธด ๊ฒ์ด์ฃ ใ ใ
keep model
-- ์ฝ๋ --
๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ model class๋ฅผ ๋๋ ํ์์ ์ ์ธํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
-- ์ฌ์ง --
Inner class๋ฅผ ๊ฐ์ง๊ณ ์๋ model ์ผ ๋
Inner class๊ฐ ์๋ค๋ฉด ๋๋ ํ์์ ์ ์ธ๋ฅผ ํด์ฃผ๋๋ผ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ ์๋ ํด๋์ค๋ ๋๋ ํ๊ฐ ๋จ์ ํ์ธํ ์ ์์ต๋๋ค.
-- ์ฝ๋ -- ์์ ๊ฐ์ด ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ Inner class๋ ๋๋ ํ์์ ์ ์ธ๋๋๋ก ํด์ค๋๋ค.
-- ์ฌ์ง --
์ง !
ํ๊ธฐ
์ ์๊ฒ ์๋๋ก์ด๋ ๋ฐฐํฌ๊ฐ ์ด๋ฒ์ด ์ฒ์์ด์๋๋ฐ์, ์์์น ๋ชปํ ์ค๋ฅ๊ฐ ํฐ์ ธ์ ๊ณ ์์ ํ์ง๋ง ๊ทธ๋๋ ํด๊ฒฐํ๊ณ ๋๋ ๋ง์ด ๋ฐฐ์ด ๊ฒ ๊ฐ์ ๋ฟ๋ฏํ๋ค์ ใ