2014-11-30 2 views
4

내 Xamarin 응용 프로그램에서 Flurry를 사용하고 싶습니다. 이를 위해 Flurry Analytics를 .jar 파일 인 Android 용으로 사용해야합니다.Xmarin.Android 응용 프로그램에서 Flurry Analytics (.jar)를 사용하는 방법?

이렇게하려면 Bindings 라이브러리를 만들고 InputJar로 FlurryAnalytics-4.2.0.jar를 포함 시켰습니다. 하지만 buliding 후 나는이 에러를 얻는다 :

Com.Flurry.Sdk.Eg' already defines a member called 'A' with the same parameter types 

실제로 Binding Library는 동일한 매개 변수를 가지지 만 내부에는 다른 코드로 된 'A'라는 두 가지 메소드를 생성한다.

방법 중 하나를 삭제해도 작동하지 않습니다. Metadata.xml 파일에 특수 행을 추가하면 메서드의 이름이 바뀔 수 있지만 이러한 메서드 중 적어도 하나는 필요합니다 (어떤 메서드인지 모름).

누구든지이 문제를 어떻게 해결할 수 있는지 알고 있습니까?

+0

실제 바인딩을 보지 않고, 여기에 또 다른 질문에 대한 내 대답을 확인 http://stackoverflow.com/a/25407684/293609 – Kiliman

+0

내가 '

+1

본 적이 있습니까 : http://blog.martinlegris.com/2012/11/14/flurry-api-in-mono-for-android/ and this http://slodge.blogspot.co.uk/2012/ 11/updated-flurry-analytics-in-monodroid.html – Cheesebaron

답변

1

여기 준비가되었습니다. 환호!

class Flurry 
{ 
    public const string ApiKeyValue = "YOUR_API_KEY"; 

    private readonly IntPtr _flurryClass; 

    private readonly IntPtr _flurryOnStartSession; 
    private readonly IntPtr _flurryOnEndSession; 
    private readonly IntPtr _flurrySetContinueSessionMillis; 

    public Flurry() 
    { 
     _flurryClass = JNIEnv.FindClass("com/flurry/android/FlurryAgent"); 

     _flurryOnStartSession = JNIEnv.GetStaticMethodID(_flurryClass, "onStartSession", "(Landroid/content/Context;Ljava/lang/String;)V"); 
     _flurryOnEndSession = JNIEnv.GetStaticMethodID(_flurryClass, "onEndSession", "(Landroid/content/Context;)V"); 
     _flurrySetContinueSessionMillis = JNIEnv.GetStaticMethodID(_flurryClass, "setContinueSessionMillis", "(J)V"); 
    } 

    public void OnStartActivity(Activity activity) 
    { 
     try 
     { 
      JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnStartSession, new JValue(activity), new JValue(new Java.Lang.String(ApiKeyValue))); 
     } 
     catch (Exception) { } 
    } 

    public void OnStopActivity(Activity activity) 
    { 
     try 
     { 
      JNIEnv.CallStaticVoidMethod(_flurryClass, _flurryOnEndSession, new JValue(activity)); 
     } 
     catch (Exception) { } 
    } 

    public void setContinueSessionMillis(long millis) 
    { 
     try 
     { 
      JNIEnv.CallStaticVoidMethod(_flurryClass, _flurrySetContinueSessionMillis, new JValue(millis)); 
     } 
     catch (Exception) { } 
    } 

} 
+0

그걸 위해 모노 프로젝트에 원시 .jar를 어떻게 포함시키는 지 자세히 설명해 주시겠습니까? –

0

Flurry는 API를 모호하게 만들었으므로 모든 함수 이름은 A, B, C, AA 등입니다. Flurry는 내부 클래스를 자유롭게 사용합니다. C#에는 내부 클래스가 없습니다. Xamarin은 캡슐화를 해제하여 가짜로 만듭니다. 이로 인해 명명 충돌이 발생합니다.

Flurry의 라이브러리 대부분에 직접 액세스 할 필요가 없으므로 래퍼가 필요하지 않습니다. Transformations 폴더의 Metadata.xml에 다음 내용을 추가하여 내부를 제외 시키라고했습니다.

<metadata> 
    <remove-node path="/api/package[@name='com.flurry.sdk']" /> 
    <remove-node path="/api/package[@name='com.flurry.android.impl.ads']" /> 
</metadata> 

이렇게하면 래퍼 생성기에서 해당 네임 스페이스를 제외하도록 지시합니다.

관련 문제