Ubuntu에서 deb 설치

 


      # sudo dpkg -i *.deb


명령들처럼 쉬우면서도 까먹는 명령어 하나입니다.
Ubuntu
에서는 Windows 시리즈처럼 특정 폴더에 프로그램을 설치하지 않아도 됩니다. 물론 Windows C:\Program Files 폴더를 고집하지 않아도 설치가 가능은 합니다만, 그렇게 사용해보니 가끔 헷갈리기도 하고 시스템도 그다지 안정적이지 못하다는 느낌을 갖게 됩니다.

리눅스에서는 대부분의 어플리케이션이 Free Software 배포되고, 리눅스의 종류에 따라 서로 다른 명령어를 사용하지만 설치 또한 자동 설치를 지원합니다. 외의 프로그램들은 각자 다운받아서 스스로 설치를 하게끔 되어 있습니다.
확장자가 deb 파일은 원래 Debian 리눅스에서의 설치파일입니다. (Ubuntu 원래 Debian 리눅스에서 파생되었기 때문에, 많은 부분에서 서로 닮아있습니다. 따라서 별다른 변환 절차 없이 바로 설치가 가능합니다.) 이런 deb 설치 파일의 대표적 종류에는 Opera 브라우저가 있습니다. Opera 브라우저의 설치는 관련 게시물 참조하세요.


sudo dpkg -i *deb


위의 명령어를 실행하면 프로그램 내에서 설정된 디렉토리를 생성하고 스스로 설치를 시작하게 됩니다.

이와 유사한 설치 파일의 종류에는 rpm 파일이 있습니다. 이는 Redhat 리눅스에서 사용되는 형식입니다. Ubuntu에서는 이를 변환시켜서 deb 파일로 만든 후에 위의 방식을 적용하여 설치할 있습니다. 자세한 내용은 다음에 설명드리겠습니다.

우분투 64비트에서 안드로이드 AVD가 돌아가지 않을때.

  에러명: Failed to get the adb version: Cannot run program "/home/hskim/devtools/android/android-sdk-linux_x86-1.6_r1/tools/adb": java.io.IOException: error=2, No such file or directory

  문제: 안드로이드 SDK는 32비트라서 64비트 윈도우에서는 그 라이브러리를 찾을 수 없어서 발생
  해결:
   다음 링크에서 getlibs라는 프로그램을 받는다.
    http://frozenfox.freehostia.com/cappy/getlibs-all.deb
   받은 파일을 설치한다.
   터미널을 열고,
   android-sdk-linux_x86/platform-tools로 이동
   다음 명령을 수행한다.
    $ getlibs aapt

   설치 프로그램: ia32-libs lib32asound2 lib32gcc1 lib32ncurses5 lib32stdc++6 lib32z1 libc6-i386
   업그레이드 프로그램 : libc6 libc6-dev

  eclipse를 다시 실행하면 된다,
  (원문: http://blog.jayway.com/2009/10/21/getting-android-sdk-working-on-ubuntu-64/)

 해당 로그

01-01 02:41:44.054  1188  1188 D installd: DexInv: --- END '/system/app/AngryBirds_samsungMID.apk' (success) ---

01-01 02:41:44.054  1292  1306 D PackageManager: scanPackage : /system/app/test.apk

01-01 02:41:44.062  1292  1306 W ResourceType: Failure getting entry for 0x7f070000 (t=6 e=0) in package 0 (error -75)

01-01 02:41:44.062  1292  1306 W ResourceType: Failure getting entry for 0x7f020005 (t=1 e=5) in package 0 (error -75)

01-01 02:41:44.062  1292  1306 W ResourceType: Failure getting entry for 0x7f070000 (t=6 e=0) in package 0 (error -75)

01-01 02:41:44.062  1292  1306 I PackageManager: /system/app/test.apk changed; collecting certs

01-01 02:41:44.124  1188  1188 D installd: DexInv: --- BEGIN '/system/app/test.apk' ---

01-01 02:41:44.140  1504  1504 D dalvikvm: creating instr width table

01-01 02:41:44.156  1504  1504 D dalvikvm: DexOpt: load 4ms, verify+opt 2ms

01-01 02:41:44.218  1188  1188 D installd: DexInv: --- END '/system/app/test.apk' (success) ---

01-01 02:41:44.218  1292  1306 D PackageManager: scanPackage : /system/app/test2.apk

01-01 02:41:44.242  1292  1306 W ResourceType: Failure getting entry for 0x7f020002 (t=1 e=2) in package 0 (error -75)

01-01 02:41:44.249  1292  1306 W ResourceType: Failure getting entry for 0x7f020097 (t=1 e=151) in package 0 (error -75)

01-01 02:41:44.249  1292  1306 I PackageManager: /system/app/test2.apk changed; collecting certs

01-01 02:41:44.398  1292  1294 D dalvikvm: GC_CONCURRENT freed 777K, 53% free 6511K/13767K, external 1596K/2108K, paused 2ms+14ms

01-01 02:41:44.679  1292  1294 D dalvikvm: GC_CONCURRENT freed 1831K, 57% free 6027K/13767K, external 1596K/2108K, paused 2ms+5ms

01-01 02:41:44.749  1188  1188 D installd: DexInv: --- BEGIN '/system/app/test2.apk' ---

01-01 02:41:44.789  1505  1505 D dalvikvm: creating instr width table

 

위의 빨간색 부분을 보면 Resource Type을 불러올 때 Error가 발생하는 것을 확인할 수 있습니다.

해당 문제에서 발생하는 원인은 Resource Type을 불러올 때, 해당 리소스가 존재하지 않아서 발생되는 문제입니다.

위의 로그를 분석해 보면 다음과 같습니다.

01-01 02:41:44.242  1292  1306 W ResourceType: Failure getting entry for 0x7f020002 (t=1 e=2) in package 0 (error -75)

0x7f020002 Resource Index를 뜻합니다. 여기서 보면 0x7f는 무시하시고 020002가 보이는데 이것은 리소스의 ID값입니다.

ID값을 확인하기 위해서는 다음의 폴더로 이동하여 파일을 열어보면, 위에서 호출한 ID값이 어떤 Resource인지 알 수 있습니다.


 

Android\out\target\common\obj\APPS\test2_intermediates\public_resources.xml

<!-- Declared at res/drawable-small-ldpi/test2_trayicon.png:0 -->

<!-- Declared at res/drawable-small-land-ldpi/test2_trayicon.png:0 -->

<!-- Declared at res/drawable-normal-mdpi/test2_trayicon.png:0 -->

<!-- Declared at res/drawable-hdpi/test2_trayicon.png:0 -->

<!-- Declared at res/drawable-normal-hdpi/test2_trayicon.png:0 -->

<!-- Declared at res/drawable-large-xhdpi/test2_trayicon.png:0 -->

<public type="drawable" name="test2_trayicon" id="0x7f020002" />

 

이 파일이 생성되는 순서는 Resource 파일의 일정 규칙에 의해서 ID값이 생성이 됩니다.

따라서 새로운 리소스 파일이 추가되지 않는 이상은 해당 ID값은 변동되지 않습니다.

 

위의 파일을 열어보면 해당 Resource ID값을 확인할 수 있습니다.

 

그러면 왜 ResourceType에서 해당 파일이 존재하는데도 왜 못찾을까요. 그 문제에 대한 답은 다음과 같습니다.

 

처음에 Package정보를 불러올 때,  Manifest File에서 불러오게 됩니다.

이때, Menifest File에서 정의되어 있는 String이라던가 Drable의 이미지 파일들 같은 리소스가 존재할 경우, 해당 해상도 폴더에 존재하지 않게 되면, 위와 같은 현상이 발생되는 것입니다.

예를 들면, ABC라는 Project에서 res 폴더에 다음과 같이 정의 되어 있을 경우, 위와 같은 에러가 발생되는 것입니다.

Res

res/drawable-small-ldpi/test2_trayicon.png

res/drawable-small-land-ldpi/ test2_trayicon.png

res/drawable-normal-mdpi/ test2_trayicon.png

res/drawable-normal-hdpi/ test2_trayicon.png

res/drawable-large-xhdpi/ test2_trayicon.png

res/values/strings.xml:4

res/values-normal-hdpi/strings.xml:4

res/values-normal-land-hdpi/strings.xml:4

 

위의 문제를 해결하기 위해서는 다음과 같이 사용하는 해상도와 관련된 폴더를 생성하여, Manifest에서 사용하는 파일들을 추가해 주시면 됩니다.

res/drawable-hdpi/ test2_trayicon.png

res/values-hdpi/strings.xml:4

위의 해당 파일을 추가.

 

그러면 다시 컴파일하고 확인하시면 아시겠지만, 해당 로그가 사라지는 것을 확인 할 수 있습니다.

이는 해당 리소스를 불러왔기 때문에, 로그가 찍히지 않는 것입니다.

+ Recent posts