안드로이드 개발 질문/답변
(글 수 40,700)
안녕하세요.
첨 뵙겠습니다.^^
새로운 widget을 만들어 라이브러리로 제공하려 합니다.
제가 만든 방법은 Android project를 생성해서 기존 Application을 만드는 방식대로 구현하고,
새로운 widget class(CompassView.java)를 추가하여 Activity에서 보여지는 것을 확인했습니다.
project를 export하여 .jar로 만들었는데요.
이 과정에서 AndroidManifest.xml, icon.png, main.xml 파일들이 duplicated error가 나서 삭제 하고 export하여 .jar로 만들었습니다.
다른 project에 추가하여 사용하고자 했는데요...
새로운 widget을 다음과 같이 넣었습니다.
library 명 : xxxandroid.jar
library 내의 package 명 : "xxx.android.widget.CompassView"
main.xml에서
<View class = "xxx.android.widget.CompassView"
android:id="@+id/compass"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
로 작성하고 Activity에서 불러와 보았지만 view에 나타나지 않습니다.
무엇이 문제인가요??
저렇게 .jar파일을 만들어도 되는건가요?
첨 뵙겠습니다.^^
새로운 widget을 만들어 라이브러리로 제공하려 합니다.
제가 만든 방법은 Android project를 생성해서 기존 Application을 만드는 방식대로 구현하고,
새로운 widget class(CompassView.java)를 추가하여 Activity에서 보여지는 것을 확인했습니다.
project를 export하여 .jar로 만들었는데요.
이 과정에서 AndroidManifest.xml, icon.png, main.xml 파일들이 duplicated error가 나서 삭제 하고 export하여 .jar로 만들었습니다.
다른 project에 추가하여 사용하고자 했는데요...
새로운 widget을 다음과 같이 넣었습니다.
library 명 : xxxandroid.jar
library 내의 package 명 : "xxx.android.widget.CompassView"
main.xml에서
<View class = "xxx.android.widget.CompassView"
android:id="@+id/compass"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
로 작성하고 Activity에서 불러와 보았지만 view에 나타나지 않습니다.
무엇이 문제인가요??
저렇게 .jar파일을 만들어도 되는건가요?
2009.03.13 16:46:47
jar파일을 만드는 것은 문제가 없는데. 문제는 리소스 처리 방식입니다. 자바 파일 만이라면 문제 없이 처리되겠지만, 만약 리소스들을 포함하고 있으면 정상적으로 처리가 안될거에요. 집작컨데 리스소를 포함하시고 라이브러리 내부적으로 R.xxx.xxx 와 같이 쓰고 있는게 있으실 겁니다. 그러면 에러가 발생할 거에요. 방법은 소스는 jar로 만들고 리소스는 따로 포함시키는 것입니다. 그렇게 하려면 라이브러리 코드 호출시에 항상 리소스 아이디를 같이 주도록 해주셔야 합니다.
회사에서 여러 명이서 같이 사용하려고 하시는거라면 물론 빌드시스템을 조금만 뜯어고치면 가능도 하겠습니다. 어차피 오픈소스니 ADT도 고치고 말이지요. 그러나 별도의 빌드 시스템 관리하는 것은 귀찮은 일이 아니겠습니까. 그냥 jar파일과 함께 res디렉토리를 같이 배포하는게 더 나을듯 싶습니다.
회사에서 여러 명이서 같이 사용하려고 하시는거라면 물론 빌드시스템을 조금만 뜯어고치면 가능도 하겠습니다. 어차피 오픈소스니 ADT도 고치고 말이지요. 그러나 별도의 빌드 시스템 관리하는 것은 귀찮은 일이 아니겠습니까. 그냥 jar파일과 함께 res디렉토리를 같이 배포하는게 더 나을듯 싶습니다.
2009.03.13 17:17:51
음 생각해보니 리소스들을 일일이 배포하기 보다는 따로 모아서 하나의 패키지로 만들어놓고, 배포한 라이브러리에서는 그 패키지에 있는 리소스들을 가져와서 사용하도록 하는 방법도 있겠네요. 마켓에서 배포할때는 사용자에게 무조건 두개를 다운로드 받게 해야한다는 불편함이 있지만 제조사에서는 이런 방법으로 접근하는 것도 좋겠네요.
2009.03.18 15:33:17
1. 첫번째 방법으로.. 리소스들이 id로 관리가 되고 리소스 파일들이 변환되서 apk로 들어가게 됩니다. 다른 APK에서 만들어놓은 id들은 그것을 가져와서 쓰는 프로젝트에서 쓰는 것들과 충돌이 날 수 밖에 없는데 그것을 라이브러리가 쓰는 공간을 생성된 어플리케이션에 충돌나지 않는 영역으로 미리 설정해놓고 충돌이 나지 않게 한후, xml이나 drawable도 naming을 통해 충돌이 나지 않게 만들어놓은후 aapt로 리소스를 생성시키기 전에 압축을 풀어넣는 방법으로 새로운 프로젝트의 리소스로 들어가게 하는 방법이 있을 듯 합니다만... 이론적으로 가능하다는 것일뿐이구요..현실적으로 사용해서는 안되는 방법같습니다.
2. 두번째 방법으로 말씀드린 별도의 apk에 리소스를 넣어놓는 방식은. Drawable이나 Layout 리소스 파일의 경우 PackageManager를 통해서 코드상에서 로드하는 방법이 있으니, 직접 R.id.xxxx와같이 접근하지 마시고 Package Manager를 통해서 접근해서 사용하시는게 좋을듯합니다. attr의 경우는 정확히 어떻게 동작해야할지 확실치 않은데 가급적 android에서 미리 정의해놓은 값들을 사용하는 것이 좋을듯 합니다.
2. 두번째 방법으로 말씀드린 별도의 apk에 리소스를 넣어놓는 방식은. Drawable이나 Layout 리소스 파일의 경우 PackageManager를 통해서 코드상에서 로드하는 방법이 있으니, 직접 R.id.xxxx와같이 접근하지 마시고 Package Manager를 통해서 접근해서 사용하시는게 좋을듯합니다. attr의 경우는 정확히 어떻게 동작해야할지 확실치 않은데 가급적 android에서 미리 정의해놓은 값들을 사용하는 것이 좋을듯 합니다.