본문 바로가기

테마강좌/Android General

안드로이드폰 1% 배터리 만들기

안녕하세요.

오늘은 테마의 가장 기초라고 할수 있는 1%배터리 만들기를 써보겠습니다.

최대한 자세히 알기 쉽게 쓰겠지만 어려울수도 있습니다.ㅋ


자...그럼 다 같이 1%배터리를 만들어 봅시다.^^


준비물 : apk manager(apk 파일을 디컴파일해서 xml의 내용을 수정해야 합니다.)

         101개의 배터리 이미지.(1% 배터리니까 0~100까지 101개의 배터리 이미지가 필요합니다.)

         메모장 및 text 편집기(xml파일을 열어서 안의 내용을 수정해야 하므로 꼭 필요)

         SystemUI.apk 또는 framework-res.apk (폰 사용 os가 아샌이면 SystemUI.apk에 배터리가 들어있고 진저라면 framework-res.apk에 배터리 관련 소스가 들어있습니다.)


준비물이 다 준비되었으면 시작해 봅시다.

(apk manager 사용법은 자세히 적지 않겠습니다.)


1. apk manager로 SystemUI.apk 또는 framework-res.apk 파일을 디컴파일 합니다.

   이제부터 SystemUI.apk만 언급하겠습니다. 제가 쓰는 갤투는 아샌이니까요.^^

   그러나 xml 파일명과 내용은 진저도 똑같으니 저만 잘 따라하시면 됩니다.

   apk manager를 실행하면 아래 창이 나오는데 22번 눌러 디컴파일할 파일을 선택하고

   9번을 눌러 디컴파일 해주면 됩니다.





2. /res/drawable/stat_sys_battery.xml파일을 메모장 및 text 편집기로 열어 주세요.

   그럼 아래와 같은 내용이 적혀 있을겁니다.

   


   <?xml version="1.0" encoding="utf-8"?>

   <level-list

     xmlns:android="http://schemas.android.com/apk/res/android">

       <item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="4" />

       <item android:drawable="@drawable/stat_sys_battery_15" android:maxLevel="15" />

       <item android:drawable="@drawable/stat_sys_battery_28" android:maxLevel="35" />

       <item android:drawable="@drawable/stat_sys_battery_43" android:maxLevel="49" />

       <item android:drawable="@drawable/stat_sys_battery_57" android:maxLevel="60" />

       <item android:drawable="@drawable/stat_sys_battery_71" android:maxLevel="75" />

       <item android:drawable="@drawable/stat_sys_battery_85" android:maxLevel="90" />

       <item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />

   </level-list>



    위 내용을 살펴보면 배터리가 4%이하일때 stat_sys_battery_0 이라는 이미지를 나타내고

    배터리가 15%이하일때 stat_sys_battery_15 라는 이미지를 나타내라는 뜻입니다.


3. 이제 이 내용을 1%씩 배터리가 표시되도록 바꿔봅시다.

   아래 처럼 쭉 적어주시면 됩니다.

   적기가 힘드시죠? 그럼 아래내용을 드래그 해서 붙여넣으셔도 됩니다.

   아...저희 블로그가 마우스 클릭 금지군요. 그래서 드래그가 안되겠군요. 

   밑에 파일을 첨부해 놨으니 다운받아 쓰시면 됩니다.

   수정을 다 하셨으면 저장을 하세요.^^

      


   <?xml version="1.0" encoding="utf-8"?>

   <level-list

     xmlns:android="http://schemas.android.com/apk/res/android">

       <item android:drawable="@drawable/stat_sys_battery_0" android:maxLevel="0" />

       <item android:drawable="@drawable/stat_sys_battery_1" android:maxLevel="1" />

       <item android:drawable="@drawable/stat_sys_battery_2" android:maxLevel="2" />

       <item android:drawable="@drawable/stat_sys_battery_3" android:maxLevel="3" />

       <item android:drawable="@drawable/stat_sys_battery_4" android:maxLevel="4" />

       <item android:drawable="@drawable/stat_sys_battery_5" android:maxLevel="5" />

       <item android:drawable="@drawable/stat_sys_battery_6" android:maxLevel="6" />

       <item android:drawable="@drawable/stat_sys_battery_7" android:maxLevel="7" />

       <item android:drawable="@drawable/stat_sys_battery_8" android:maxLevel="8" />

       <item android:drawable="@drawable/stat_sys_battery_9" android:maxLevel="9" />

       <item android:drawable="@drawable/stat_sys_battery_10" android:maxLevel="10" />

       <item android:drawable="@drawable/stat_sys_battery_11" android:maxLevel="11" />

       <item android:drawable="@drawable/stat_sys_battery_12" android:maxLevel="12" />

       <item android:drawable="@drawable/stat_sys_battery_13" android:maxLevel="13" />

       <item android:drawable="@drawable/stat_sys_battery_14" android:maxLevel="14" />

       <item android:drawable="@drawable/stat_sys_battery_15" android:maxLevel="15" />

       <item android:drawable="@drawable/stat_sys_battery_16" android:maxLevel="16" />

       <item android:drawable="@drawable/stat_sys_battery_17" android:maxLevel="17" />

       <item android:drawable="@drawable/stat_sys_battery_18" android:maxLevel="18" />

       <item android:drawable="@drawable/stat_sys_battery_19" android:maxLevel="19" />

       <item android:drawable="@drawable/stat_sys_battery_20" android:maxLevel="20" />

       <item android:drawable="@drawable/stat_sys_battery_21" android:maxLevel="21" />

       <item android:drawable="@drawable/stat_sys_battery_22" android:maxLevel="22" />

       <item android:drawable="@drawable/stat_sys_battery_23" android:maxLevel="23" />

       <item android:drawable="@drawable/stat_sys_battery_24" android:maxLevel="24" />

       <item android:drawable="@drawable/stat_sys_battery_25" android:maxLevel="25" />

       <item android:drawable="@drawable/stat_sys_battery_26" android:maxLevel="26" />

       <item android:drawable="@drawable/stat_sys_battery_27" android:maxLevel="27" />

       <item android:drawable="@drawable/stat_sys_battery_28" android:maxLevel="28" />

       <item android:drawable="@drawable/stat_sys_battery_29" android:maxLevel="29" />

       <item android:drawable="@drawable/stat_sys_battery_30" android:maxLevel="30" />

       <item android:drawable="@drawable/stat_sys_battery_31" android:maxLevel="31" />

       <item android:drawable="@drawable/stat_sys_battery_32" android:maxLevel="32" />

       <item android:drawable="@drawable/stat_sys_battery_33" android:maxLevel="33" />

       <item android:drawable="@drawable/stat_sys_battery_34" android:maxLevel="34" />

       <item android:drawable="@drawable/stat_sys_battery_35" android:maxLevel="35" />

       <item android:drawable="@drawable/stat_sys_battery_36" android:maxLevel="36" />

       <item android:drawable="@drawable/stat_sys_battery_37" android:maxLevel="37" />

       <item android:drawable="@drawable/stat_sys_battery_38" android:maxLevel="38" />

       <item android:drawable="@drawable/stat_sys_battery_39" android:maxLevel="39" />

       <item android:drawable="@drawable/stat_sys_battery_40" android:maxLevel="40" />

       <item android:drawable="@drawable/stat_sys_battery_41" android:maxLevel="41" />

       <item android:drawable="@drawable/stat_sys_battery_42" android:maxLevel="42" />

       <item android:drawable="@drawable/stat_sys_battery_43" android:maxLevel="43" />

       <item android:drawable="@drawable/stat_sys_battery_44" android:maxLevel="44" />

       <item android:drawable="@drawable/stat_sys_battery_45" android:maxLevel="45" />

       <item android:drawable="@drawable/stat_sys_battery_46" android:maxLevel="46" />

       <item android:drawable="@drawable/stat_sys_battery_47" android:maxLevel="47" />

       <item android:drawable="@drawable/stat_sys_battery_48" android:maxLevel="48" />

       <item android:drawable="@drawable/stat_sys_battery_49" android:maxLevel="49" />

       <item android:drawable="@drawable/stat_sys_battery_50" android:maxLevel="50" />

       <item android:drawable="@drawable/stat_sys_battery_51" android:maxLevel="51" />

       <item android:drawable="@drawable/stat_sys_battery_52" android:maxLevel="52" />

       <item android:drawable="@drawable/stat_sys_battery_53" android:maxLevel="53" />

       <item android:drawable="@drawable/stat_sys_battery_54" android:maxLevel="54" />

       <item android:drawable="@drawable/stat_sys_battery_55" android:maxLevel="55" />

       <item android:drawable="@drawable/stat_sys_battery_56" android:maxLevel="56" />

       <item android:drawable="@drawable/stat_sys_battery_57" android:maxLevel="57" />

       <item android:drawable="@drawable/stat_sys_battery_58" android:maxLevel="58" />

       <item android:drawable="@drawable/stat_sys_battery_59" android:maxLevel="59" />

       <item android:drawable="@drawable/stat_sys_battery_60" android:maxLevel="60" />

       <item android:drawable="@drawable/stat_sys_battery_61" android:maxLevel="61" />

       <item android:drawable="@drawable/stat_sys_battery_62" android:maxLevel="62" />

       <item android:drawable="@drawable/stat_sys_battery_63" android:maxLevel="63" />

       <item android:drawable="@drawable/stat_sys_battery_64" android:maxLevel="64" />

       <item android:drawable="@drawable/stat_sys_battery_65" android:maxLevel="65" />

       <item android:drawable="@drawable/stat_sys_battery_66" android:maxLevel="66" />

       <item android:drawable="@drawable/stat_sys_battery_67" android:maxLevel="67" />

       <item android:drawable="@drawable/stat_sys_battery_68" android:maxLevel="68" />

       <item android:drawable="@drawable/stat_sys_battery_69" android:maxLevel="69" />

       <item android:drawable="@drawable/stat_sys_battery_70" android:maxLevel="70" />

       <item android:drawable="@drawable/stat_sys_battery_71" android:maxLevel="71" />

       <item android:drawable="@drawable/stat_sys_battery_72" android:maxLevel="72" />

       <item android:drawable="@drawable/stat_sys_battery_73" android:maxLevel="73" />

       <item android:drawable="@drawable/stat_sys_battery_74" android:maxLevel="74" />

       <item android:drawable="@drawable/stat_sys_battery_75" android:maxLevel="75" />

       <item android:drawable="@drawable/stat_sys_battery_76" android:maxLevel="76" />

       <item android:drawable="@drawable/stat_sys_battery_77" android:maxLevel="77" />

       <item android:drawable="@drawable/stat_sys_battery_78" android:maxLevel="78" />

       <item android:drawable="@drawable/stat_sys_battery_79" android:maxLevel="79" />

       <item android:drawable="@drawable/stat_sys_battery_80" android:maxLevel="80" />

       <item android:drawable="@drawable/stat_sys_battery_81" android:maxLevel="81" />

       <item android:drawable="@drawable/stat_sys_battery_82" android:maxLevel="82" />

       <item android:drawable="@drawable/stat_sys_battery_83" android:maxLevel="83" />

       <item android:drawable="@drawable/stat_sys_battery_84" android:maxLevel="84" />

       <item android:drawable="@drawable/stat_sys_battery_85" android:maxLevel="85" />

       <item android:drawable="@drawable/stat_sys_battery_86" android:maxLevel="86" />

       <item android:drawable="@drawable/stat_sys_battery_87" android:maxLevel="87" />

       <item android:drawable="@drawable/stat_sys_battery_88" android:maxLevel="88" />

       <item android:drawable="@drawable/stat_sys_battery_89" android:maxLevel="89" />

       <item android:drawable="@drawable/stat_sys_battery_90" android:maxLevel="90" />

       <item android:drawable="@drawable/stat_sys_battery_91" android:maxLevel="91" />

       <item android:drawable="@drawable/stat_sys_battery_92" android:maxLevel="92" />

       <item android:drawable="@drawable/stat_sys_battery_93" android:maxLevel="93" />

       <item android:drawable="@drawable/stat_sys_battery_94" android:maxLevel="94" />

       <item android:drawable="@drawable/stat_sys_battery_95" android:maxLevel="95" />

       <item android:drawable="@drawable/stat_sys_battery_96" android:maxLevel="96" />

       <item android:drawable="@drawable/stat_sys_battery_97" android:maxLevel="97" />

       <item android:drawable="@drawable/stat_sys_battery_98" android:maxLevel="98" />

       <item android:drawable="@drawable/stat_sys_battery_99" android:maxLevel="99" />

       <item android:drawable="@drawable/stat_sys_battery_100" android:maxLevel="100" />

   </level-list>



   혹시나 붙여넣기도 귀찮다 하시는 분들을 위해서 파일을 첨부해 놓겠습니다.ㅋㅋ


  1% 배터리 xml 파일 다운로드  -> 

stat_sys_battery.xml



4. 이제 준비된 배터리 이미지 101개를 /res/drawable-hdpi 폴더에 넣으세요.

   덮어 쓸거냐 물으면 그냥 "예" 하시면 됩니다.


   이미지가 없으시다구요? 

   포토샵으로 직접 만드셔도 되고 카페나 맛클같은 사이트에서 무료로 구할수도 있습니다.

   그리고 그냥 제가 만들었던 숫자로된 배터리 이미지 첨부해 놓을테니 그냥 쓰셔도 됩니다.ㅋㅋ

   아...너무 친절하게 강좌를 쓰고 있는거 같은....


   1% 배터리 이미지 다운로드 ->

battery.zip


   첨부파일은 아래와 같은 이미지입니다.

   



5. 자 이제 다시 apk manager로 넘어와서 컴파일을 합니다.

   컴파일을 하면 뭔가 물어볼것입니다. 영어 몰라도 그냥 n누르세요.

   시스템파일이냐고 묻는것인데 그냥 n누르시면 됩니다.ㅋㅋ

   그럼 이제 unsignedSystemUI.apk 파일이 만들어져 있을겁니다.

   

   






6. 이제 부터가 중요합니다.

   주의해서 잘 따라해 주시기 바랍니다.

   unsignedSystemUI.apk 파일을 알집이나 7zip으로 여시고 resources.arsc 파일을 드래그해서 임의의 폴더로 끄집어 냅니다.

   그리고 /res/drawable/ 폴더에서 stat_sys_battery.xml파일을 드래그해서 임의의 폴더로 끄집어 놓습니다.

   




   위 두개의 파일을 잘 끄집어 내셨나요?

   아래처럼 잘 꺼내졌다면 이제 unsignedSystemUI.apk 파일을 닫습니다.


7. 처음에 디컴파일했던 SystemUI.apk 파일을 알집이나 7zip으로 열어야 합니다.

   파일이 열렸으면 resources.arsc파일을 똑같은 파일이 있는 위치로 집어 넣습니다.


   ※ 7zip은 그냥 드래그로 넣으시면 될거고 알집을 이용하시는 분들은 파일추가-압축안함으로 집어 넣어주시면 됩니다.






   resources.arsc파일을 넣었으면 이제 /res/drawable/ 폴더로 이동해서 stat_sys_battery.xml 파일도 넣어줍니다.

   

  아까 넣어던 배터리 이미지 101개/res/drawable-hdpi 폴더에 같은 방법으로 넣어줍니다.   


  ※ 여기서 잠깐!!

      resources.arsc 파일을 넣어주는 이유는 이미지를 추가하면 컴파일시 /res/value/ids.xml파일에 

      배터리 이미지하나당 고유한 id값을 각기 갖기 때문에 resources.arsc파일을 안넣어주면 

      배터리는 ? 표시를 나타내게 됩니다.


      그리고 xml 수정시 수정한 xml을 unsigned~.apk 파일에서 꺼내서 원본 파일에 넣으면 xml 수정한 내용이 

      적용되는데 /res/value/ 폴더처럼 컴파일을 하게 되면 보이지 않는 폴더들은 어떻게 할까요?

      네, resources.arsc파일만 옮겨주면 수정한 값이 적용됩니다.


8. 자...이제 컴퓨터로 하는 작업은 끝났습니다.

   좀 전에 작업했던 SystemUI.apk 파일을 폰에 넣고 퍼미션 644주고 재부팅 하시면 됩니다.

   이걸 잘 모르시겠다면 아래 링크 글을 참조하세요.^^


   http://themeroy.tistory.com/entry/%EB%A3%A8%ED%8A%B8%EC%9D%B5%EC%8A%A4%ED%94%8C%EB%A1%9C%EC%96%B4%EB%A5%BC-%ED%86%B5%ED%95%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-%ED%85%8C%EB%A7%88-%EC%A0%81%EC%9A%A9%EB%B2%95


   어때요? 재부팅이 잘 되었나요?

   배터리가 1%단위로 잘 나오는지 확인해보세요.





   많이 힘드셨나요?

   이게 테마의 가장 기초가 되는 1% 배터리 강좌입니다.

   테마사 분들은 이런 힘든작업을 아무 보상없이 하고 계시는 겁니다.

   그런데 테마 만드는 이유는 여러분들의 추천, 댓글을 보는 재미로 테마를 하시는 거죠.

   그러니 꼭 테마 받으실땐 추천(view on) 꾹 눌러주시고 댓글을 달아 주세요.


   다음엔 어떤 강좌를 언제 쓸지 모르겠지만 틈날때 마다 필요한 강좌를 천천히 쓰도록 하겠습니다.^^