다른 플러그인과의 호환 사용에 관련해서 문의드립니다
1. SDK Version: 4.1.0
2. Development Environment: (eg. Unity-Android, Unity-iOS, Native Android, Native iOS) Unity-Android
3. Tracker/Scanner: Tracker
4. License Type(Free / Pro-One Time Fee / Pro-Subscription / Enterprise): Free
5. Target Device(Optional): All Android device
안녕하세요
귀사의 sdk 를 활용해서 증강앱을 만들고있습니다
귀사의 MaxstAR.jar 파일과 제가 기존에 사용하던 자작 jar 파일간의 충돌이 생기는 것 같아서 문의드리게되었습니다
기존에 쓰던 자작 jar 파일인데 MaxstAR.jar을 추가하고부터는 주도권을 MaxstAR.jar 이 차지하는 것 같습니다
구동 시나리오 부터 알려드리겠습니다
예를 들어 화면캡쳐를 한다고할 때 퍼미션부터 확인합니다. 그리고 퍼미션 확인이 정상통과되면 화면캡쳐하고 내부 갤러리에 캡쳐본을 저장합니다
이때 퍼미션 확인하는 메소드가 없다고 로그캣에 뜹니다
그래서 아래 2)번 내용처럼 강제로 자작 jar 파일의 identifier 를 찾아서 수행하게끔 만들었습니다. 다행히 퍼미션 통과를 합니다.
하지만 내부 갤러리 저장 후 성공했다는 메세지를 UnitySendMessage 로 보낼 때 오류가 발생합니다. 아무래도 가야할 곳을 찾지못해서 그런거 같습니다
자작 jar 파일이 주도권을 잡은 상태로 진행하게하려면 어떠한 방법으로 해당 문제를 해결하면 좋을 지 조언을 주실 수 있으실까요?
-------------------------------------------------------------------------------------------------
1) 유니티 내에서 보통적으로 안드로이드 플러그인을 쓸 때
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
_androidJavaObject = jc.GetStatic<AndroidJavaObject>("currentActivity");
2) 강제 실행
private AndroidJavaObject _androidJavaObject;
_androidJavaObject =new AndroidJavaObject("com.TTT.DDD.MainActivity");
3) 매니페스트 내 구조
<activity
android:name="com.unity3d.player.UnityPlayerActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data
android:name="unityplayer.UnityActivity"
android:value="true"/> ...
안녕하세요. 맥스트 김승리입니다.
1. 저희 MaxstAR.jar는 구동 방식이 AndroidEngine.cs에서 UnityPlayer의 Activity를 얻어서 전달하여 실행되게 됩니다.
그렇기 때문에 주도권이 잡히는지의 여부는 정확히 모르겠습니다.
다만 저희 SDK를 import하시면서 매니페스트 파일이 변경 되는것으로 생각 되어집니다.
2. 퍼미션을 확인하는 메소드의 유무는 아마도 사용하시는 임의의 Acitivity가 UnityPlayerAcitivity를 정확하게 상속 받지 못해서 인것 같습니다. 해당 UnitySendMessage나 유니티에서 제공하는 안드로이드 관련 메소드를 실행 하기 위해서는 메니페스트에서
android:name="com.maxst.tempActivity"
이런식으로 만드신 Activity를 메인으로 지정하셔야 한다고 알고 있습니다.
참고 https://docs.unity3d.com/540/Documentation/Manual/PluginsForAndroid.html
저희는 매니페스트에서 "com.unity3d.player.UnityPlayerActivity"를 그대로 사용합니다. 만약 UnitySendMessage를 사용하시려면 사용하시는 jar파일 안의 Acivity를 "참고"에서 처럼 지정하셔야 합니다.
다만, 저희 엔진이 AndroidJavaClass javaUnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 이부분에서 제대로 작동할지 모르기 때문에, AndroidEngine.cs에서 사용하시고 계시는 액티비티를 저희 jar로 전달해 주시면 사용가능합니다.
도움을 주셔서 감사합니다
이전에 구성을 할 때 유니티쪽 매니페스트에는 android:name="com.unity3d.player.UnityPlayerActivity" 형태로 세팅해두었습니다 그래서 맥스트 sdk를 넣었을 시 충돌(?) 등 문제가 생겨서 의도한대로 메소드를 못불러온 것 같습니다
그래서 유니티 쪽 매니페스트에 명시적으로 무엇을 메인으로 불러와야하는 지 수정을 했습니다
android:name="com.TTT.DDD.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
이렇게 하니 자작 jar 내부 메소드도, 맥스트 메소드도 잘됩니다
감사합니다
도움이 되셨다니 다행이네요. 감사합니다.