2011-01-11 6 views
2

여러 Android 앱을 개발했으며 둘 이상의 앱에서 자주 사용하는 클래스의 코드 기반을 만들었습니다. 이 코드는 모두 Subversion (svn) 저장소에 있으며 각 저장소는 자체 저장소에 있습니다. 각 앱에는 필요한 패키지 (예 : com.company.android.views)에 대한 svn : externals 참조가 있습니다. R 클래스를 사용자 정의 속성에 대해 가져와야하는 경우를 제외하면 위와 같은 결과가 좋습니다. 이 같은 코드를 가질 수 있도록Android 앱에서 사용되는 사용자 정의보기 및 속성

import com.company.apps.myapp.R 

:

사용자 정의보기는 다음과 같이 가져 오기를 가지고

attributes.getBoolean(R.styleable.WebImageView_autoload, autoload) 

사용자 정의 속성이 고해상도/값/attrs.xml이에 정의되어 있는지 :

<declare-styleable name="WebImageView"> 
    <attr name="autoload" format="boolean" /> 
    ...others 
</declare-styleable> 

완벽하게 작동하지만이 동일한보기를 사용하는 두 번째 앱이있는 경우 문제가 발생합니다. 이제 import com.company.apps.anotherapp.R으로 가져 오기를 업데이트하여 "anotherapp"와 함께 작동하고 "myapp"로 중단합니다. 한 번에 여러 앱에서 작업 할 때 문제가됩니다.

임시 해결책은 해당 클래스의 업데이트를 확인한 다음 svn : externals를 해당 특정 버전으로 잠그는 것입니다. 각 앱은 다른 리비전에 고정되어 지저분 해지기는하지만 다양한 클래스를 앱의 레포에 직접 복사하는 것보다 더 좋습니다.

내가 반사, 같은 것을 사용하여 생각했습니다 유일한 다른 솔루션 : 클래스 전반에 걸쳐 사용되는 변수에 내가 아끼는 사람들을 할당 필드를 통해

Class class = Class.forName(context.getPackageName() + ".R"); 
Field[] fields = class.getDeclaredFields(); 

그리고 루프를. 이것은, 특히 우리가 이것을 할 필요가있는 여러 클래스에 대해 이야기 할 수있을 때, 다소 무거워 보인다.

이 문제를 어떻게 해결할 수 있습니까? 동적으로 com.company.apps. *. R을 가져 오거나 특정 앱에 의존하지 않는 다른 R 클래스를 생성하는 방법이 있습니까? 아니면 제가 놓친 부분이 있습니까?

답변

0

잠시만,하지만 좋은 대답을 발견했습니다 : Library Projects.

구조적으로 라이브러리 프로젝트는 표준 Android 애플리케이션 프로젝트와 유사합니다. 예를 들어, src /, res/및 유사한 디렉토리뿐만 아니라 프로젝트 루트에 매니페스트 파일을 포함합니다. 프로젝트는 동일한 방식으로 저장되는 표준 Android 프로젝트와 동일한 유형의 소스 코드 및 리소스를 포함 할 수 있습니다. 예를 들어, 라이브러리 프로젝트의 소스 코드는 R 클래스를 통해 자체 리소스에 액세스 할 수 있습니다.

+0

안녕하세요, 도서관 프로젝트에서 맞춤 속성을 사용하기 위해 특별한 작업을 수행 했습니까? 라이브러리와 최종 앱이 동일한 네임 스페이스를 사용하는 경우에만 시도하면 컴파일이 완료됩니다. 2 개의 앱에서 동일한 라이브러리 (예 : 무료 및 유료 버전)를 사용하려면이 방법이 효과가 없습니다. – Gromix