2012-02-14 4 views
1

Monodroid에서 JNIEnv를 통해 사용자 정의 Java 클래스에 액세스하려고합니다. 기본 프로젝트에 클래스를 추가하면 기본 프로젝트와 라이브러리 프로젝트에서 액세스 할 수 있습니다.Monodroid JNIEnv.FindClass from library

예를 들어

는 : 는 jniTest.java는 다음 프로젝트 모두의 도서관 B.에서

IntPtr javaClass = JNIEnv.FindClass("com/company/application/jniTest"); 

작품은 내가 같은 파일을 수 있도록 변경하고 그러나 경우 프로젝트에 AndroidJavaSource 파일 인 경우 그때

IntPtr javaClass = JNIEnv.FindClass("com/company/application/jniText"); 

나는 내가 도서관 B로 파일을 이동하면 있기 때문에 프로젝트 (A)에 아니에요하도록 파일의 이름을 변경해야 할 말을하는 이유와 라이브러리 B에 액세스 할 수 없습니다 라이브러리 B에서 jniText에 클래스 이름을 변경 더 이상 FindClass를 호출하면 jniTest가 라이브러리에 있어도 찾아보십시오. 나는 그것이 여전히 원래 위치에서 발견된다고 믿는다. 이것은 내가 잘 작동했다는 것을 나의 라이브러리로 자바 파일을 옮겼을 때 나를 믿게했다. 네임 스페이스를 변경 한 후에 만 ​​프로젝트 A에 여전히 빌드 된 원본이 이제는 라이브러리 B에 있던 것과 동일하지 않기 때문에 작업이 중지되었습니다. NoClassDefFoundError.

방금 ​​프로젝트 속성 또는 JNIEnv 메소드가 누락되었지만이 작업을 수행하기 위해 설정할 항목을 찾을 수 없기를 바랍니다.

감사

답변

1

만 AndroidJavaSource, AndroidAsset, AndroidResource 등 최종 패키지로 만들 것 주요 프로젝트에 있는지. 이러한 것들은 도서관 프로젝트에서 지원되지 않습니다.

+0

기술적 인 이유가 있거나 팀에서 수행하지 못한 것을 알고 있습니까? –

+0

글쎄, 아직 기술적 인 이유가 없다. ASP.Net을위한 UI 라이브러리를 만드는 것 같아요. 라이브러리 컴파일의 최종 결과는 이미지 나 .css 같은 것을 포함하지 않는 .dll입니다. 라이브러리 컴파일이 끝나면 컴파일 된 .dll 만 있고 .java가 참조되었는지는 알 수 없습니다. .java를 라이브러리의 .net 리소스에 채우고 MFA 앱 프로젝트에서 그것을 꺼내 컴파일하면이 문제를 해결할 수 있습니다. 따라서 아직 완료되지 않은 약간의 작업 만 필요합니다. – jpobst

+0

이 기능은 MonoTouch 로드맵에 있습니까? 자바 소스를 C# 래퍼로 패키징하고 숨기는 것이 좋을 것처럼 불쌍한 점이 있습니다. – Aranda