2014-12-31 4 views
1

처음으로 Android 플러그인을 확장하여 만듭니다. UnityPlayerNativeActivity. 패키지 이름은 com.inno.myPlugin이며 그 이름은 가/안드로이드 폴더 플러그인에 Manifest.xml 등록 상표입니다.Unity Android Plugin 패키지 이름을 변경하는 방법

"com.inno.myPlugin"를 확장한다는 클래스는 "MyClass에"입니다.

플러그인은 의 .jar 파일로 컴파일이 호에 유니티 측에서 기능을 "AndroidJavaClass"와 "AndroidJavaObject"를 사용하고 가/안드로이드 폴더플러그인에을 배치입니다.

내 안드로이드 장치에, 내 예를 컴파일 할 때마다, 응용 프로그램 패키지 이름는 항상 "com.inno.myPlugin"입니다. 내가 유니티 설정에서 패키지 이름을 변경할 경우에도 기본 패키지 이름은 여전히 ​​"com.inno.myPlugin"입니다 항아리 플러그인에서 패키지 이름입니다.이 패키지 이름은 내가 유니티 에셋 스토어하지만 난에 플러그인게시 하려는 소스 코드 jar 파일에서 ...

개명 저를 괴롭히는 질문이 있습니다. "com.inno.myPlugin"패키지 이름이 이미 안드로이드 스토어에을 사용하는 경우

이이 플러그인 자신의 응용 프로그램을 업로드에서 내 플러그인의 사용자를 방지 할 수 있습니다?

어떻게 의이 문제를 해결할 수 있습니까?

답변

1

이것은 Unity Android 플러그인의 더 큰 문제 중 하나입니다.

여기에는 몇 가지 가능성이 있습니다. 아래에서 올바른 대답을 찾으십시오.

a) 플러그인에서 주 활동 (즉, 실행기 활동)을 "com.inno.myPlugin.MyClass"로 설정해야합니까?

b) OnActivityResult를 MyClass으로 대체합니까?C) 나도 당신이 에 '예'로 대답 한 경우 위의

(A) 후 약간의 가능성은 누구나하지만 자신에게없는 것을 다른 사람에 이르기까지 다양한 이유로,이 플러그인을 사용할 수있다 충돌하는 패키지에 대한 코드를 수정하십시오. ANOTHER 플러그인뿐만 아니라

당신이 응답 한 경우에 그 권한을 필요로하는 경우

당신이 (b)에에 '예'로 대답 한 경우는 다음 다른 사람이, 하지만 그들은 그것을 사용할 수 없습니다 사용할 수있는 괜찮은 가능성있다 yes to (c) 당신은 잘되어야합니다.

가장 쉬운 방법은 새 프로젝트에서 다른 패키지 이름으로 플러그인을 사용하고 작동하는지 확인하는 것입니다.

또한 UnityPlayerNativeActivity를 확장하지 말고 조언을 구합니다. UnityPlayerNativeActivity을 확장하는 유일한 이유는

  1. 당신이 사용하는 반사를 모두 얻을 수 unitySendMessage

를 사용하려면 currentActivity (즉 UnityPlayer.currentActivity)을 얻으려면입니다. currentActivity는 필드이고 unitySendMessage는 메소드입니다. 귀하의 질문과 직접적으로 관련이 없으므로 여기서 자세히 설명하지는 않겠지 만, 자세한 내용이 필요하면 핑하십시오. 영업 여기

의 요청에 대한 몇 가지 예제 코드를 추가


편집 내가 UnityPlayerActivity 또는 UnityPlayerNativeActivity을 확장없이 샘플 플러그인입니다. 여기에 바로 입력 했으므로 코드에 오류가있을 수 있습니다. 내가 확실히 아는 것은 네이티브 코드 시도-catch 블록이 필요하지만, 당신이 코드를 붙여 넣을 때 어떤 IDE 오류를 표시해야한다는 것입니다.

네이티브 안드로이드 코드

package com.myCompany.myProduct; 

public class MyClass { 
    private Class<?> unityPlayerClass; 
    private Field unityCurrentActivity; 
    private Method unitySendMessage; 

    public void init() { 

     //Get the UnityPlayer class using Reflection 
     unityPlayerClass = Class.forName("com.unity3d.player.UnityPlayer"); 
     //Get the currentActivity field 
     unityCurrentActivity= unityPlayerClass.getField("currentActivity"); 
     //Get the UnitySendMessage method 
     unitySendMessage = unityPlayerClass.getMethod("UnitySendMessage", new Class [] { String.class, String.class, String.class }); 
    } 

    //Use this method to get UnityPlayer.currentActivity 
    public Activity currentActivity() { 

     Activity activity = (Activity) unityCurrentActivity.get(unityPlayerClass); 
     return activity;    
    } 


    public void unitySendMessageInvoke (String gameObject, String methodName, String param) { 
     //Invoke the UnitySendMessage Method 
     unitySendMessage.invoke(null, new Object[] { gameObject, methodName, param}); 
    } 

    public void makeToast (final String toastText, final int duration) { 
     currentActivity().runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(getActivity(), toastText, duration).show(); 
      } 
     }); 
    } 
} 



유니티 C# 코드

AndroidJavaObject myClass = null; 

public void Init() { 
    if(myClass == null) 
     myClass = new AndroidJavaObject("com.myCompany.myProduct.MyClass"); 

    if(myClass != null) 
     myClass.Call("init", new object[0]); 
} 


public void MakeToast (string toastText, int duration) { 
    if(myClass != null) 
     myClass.Call("makeToast", new object[] { toastText, duration }); 
} 


,617,

매니페스트의 경우 패키지 이름을 호출하려는 이름으로 변경하십시오. 이 플러그인 패키지와 일치해야합니다. 예를 들어 플러그인 이름이 "com.myCompany.myProduct"이면 패키지 이름을 "com.someOtherCompany"와 같이 사용할 수 있습니다.someNewProduct는 "


방법이 플러그인을 테스트합니다.
1. 위의 네이티브 코드를 추가합니다"MyClass.java ", 그리고 항아리를 만들 수 있습니다.
2. 복사를 자산으로이 항아리/Plugins/Android 폴더
3. 패키지 이름이 Unity의 기본 패키지 이름이 아닌지 확인하십시오.
4. Unity C# 코드를 새 스크립트로 복사하십시오.
5. OnGUI 코드를 입력하십시오 전화를 걸다. "Init"& C#의 "MakeToast"메소드

출처 - Unity에 대한 필자의 전문 지식.

+0

답해 주셔서 감사합니다. 당신의 대답에 대해 몇 가지 질문이 있습니다. 내 클래스 이름은 UnityPlayerNativeActivity를 확장하는 MyClass입니다. UnityPlayerNativeActivity를 확장하지 않으면 C# 측에서 AndroidJavaObject.Call을 사용하여 Java 함수를 호출 할 수 있습니까? UnityPlayer.UnitySendMessage (arg0, arg1, arg2)를 사용하여 C# 측에서 함수를 호출 할 수 있습니까? Manifest 파일은 어떻게 생겼을 까? 현재 매니페스트의 주요 클래스는 MyClass입니다. 그것을 제거해야합니까? – Programmer

+0

대답 할 질문이 많습니다. 내가 코멘트에 답할 수 있을지 의심 스럽기 때문에 내 대답을 편집 할 것입니다. 나는 곧 여기에 뭔가를 넣을 것이다. –

관련 문제