libGDX / RoboVM 프로젝트에서 MFMailComposeViewController의 빌드 오류

에비

기존 iOS libGDX 앱 (RoboVM 사용)에 기능을 추가하여 scene2d.ui 버튼을 누르면 앱의 라이브러리> 로컬에 저장된 미리 정의 된 CSV 파일 세트가 첨부 된 MFMailComposeViewController 팝업이 표시되도록하려고합니다. 폴더. 지금까지 내가 가지고있는 코드는 다음과 같습니다.

수입 및 회원 :

import org.robovm.apple.foundation.*;
import org.robovm.apple.messageui.MFMailComposeResult;
import org.robovm.apple.messageui.MFMailComposeViewController;
import org.robovm.apple.messageui.MFMailComposeViewControllerDelegate;
import org.robovm.apple.uikit.*;
import org.robovm.objc.ObjCObject;

private UIWindow mailWindow;
private UIViewController mailViewController;
private MFMailComposeViewController mailPicker;

행동 양식:

private void createMailWindow() 
{
    mailWindow = new UIWindow(UIScreen.getMainScreen().getBounds());
    mailViewController = new UIViewController();
    mailWindow.setRootViewController(mailViewController);
}

private void sendEmail(String fileName, String subject, String body) 
{
    mailPicker = new MFMailComposeViewController();
    mailPicker.addStrongRef(mailWindow);
    String path = NSBundle.getMainBundle().getResourcePath();

    if (fileName != null)
    {
        path = path.substring(0, path.lastIndexOf('/')) + "/Library/local/" + fileName;
    }

        MFMailComposeViewControllerDelegate delegate = new MFMailComposeViewControllerDelegate()
        {
            public void mailComposeControllerDidFinish(MFMailComposeViewController controller, MFMailComposeResult result, NSError error) 
            {
                controller.dismissViewController(true, null);
                mailPicker.removeFromParentViewController();
                mailPicker.removeStrongRef(mailWindow);
                mailWindow.setHidden(true);
                mailPicker = null;
            }

            @Override
            public void didFinish(MFMailComposeViewController controller, MFMailComposeResult result, NSError error) 
            {

            }
        };

        mailPicker.setMailComposeDelegate(delegate);
        mailPicker.addStrongRef((ObjCObject) delegate);

        if (fileName != null)
        {
                // attach CSVs here...
        }

        mailPicker.setSubject((subject != null ? subject : "Test Results"));
        mailPicker.setMessageBody((body != null ? body : "Please find attached the latest results data."), false);

        if (MFMailComposeViewController.canSendMail())
        {
            mailWindow.getRootViewController().presentViewController(mailPicker, true, null);
            mailWindow.makeKeyAndVisible();
        }
    }
}

이 코드가 제자리에 있고 Eclipse는 빌드를 시도 할 때까지 문제를 표시하지 않으므로 다음 오류가 발생합니다.

Exception in thread "main" java.lang.NoClassDefFoundError: org/robovm/rt/bro/NativeObject
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at com.mmu.cfa.DesktopMain.main(DesktopMain.java:26)
Caused by: java.lang.ClassNotFoundException: org.robovm.rt.bro.NativeObject
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 49 more

RoboVM Cocoa Touch Library와 RoboVM Runtime Library를 메인 프로젝트의 빌드 경로에 추가했습니다. 이 두 가지 방법을 제거하면 프로젝트가 오류없이 빌드됩니다. 이것을 실행하기 위해 설정해야 할 다른 것이 있습니까?

탄 메이 파틸

문제

Libgdx 응용 프로그램에서 기본 프로젝트는 지원되는 모든 플랫폼의 프로젝트에서 공유 됩니다.

따라서 메인 프로젝트는 플랫폼 독립적 인 코드를 포함해야합니다 .

RoboVM Cocoa Touch LibraryRoboVM Runtime Library 는 플랫폼에 따라 다르며 iOS에서만 작동하며 데스크톱, Android, html 등에서는 작동하지 않습니다.


해결책

  1. 제거 RoboVM 코코아 터치 도서관RoboVM 런타임 라이브러리 의 주요 프로젝트에서 종속성을.
  2. RoboVM 프로젝트에 이러한 종속성을 추가합니다. (아직없는 경우)
  3. 기본 프로젝트에서 필요한 기능을 나타내는 인터페이스를 만듭니다 .

    public interface EmailHandler {
        public void createMailWindow();
        public void sendEmail(String fileName, String subject, String body);
    }
    
  4. 이미 작성한 코드를 사용하여 robovm 프로젝트에 구현 클래스를 만듭니다 .

    public class RobovmEmailHandler implements EmailHandler {
    
        @Override
        public void createMailWindow() {
            // Your code goes here.
        }
    
        @Override
        public void sendEmail(String fileName, String subject, String body) {
            // Your code goes here.
        }
    }
    
  5. ( 메인 프로젝트 메인 게임 클래스) EmailHandler 생성자매개 변수를 추가합니다 .ApplicationListener

    public class MyAwesomeGame extends Game {
    
        private EmailHandler emailHandler; // Use it wherever you like.
    
        public MyAwesomeGame(EmailHandler emailHandler) {
            this.emailHandler = emailHandler;
            // Rest of constructor.
        }
    }
    
  6. 공급 구현 인수RobovmLauncher(robovm 프로젝트의 주요 클래스).

    public class RobovmLauncher extends IOSApplication.Delegate {
    
        @Override
        protected IOSApplication createApplication() {
            EmailHandler emailHandler = new RobovmEmailHandler();
            IOSApplicationConfiguration config = new IOSApplicationConfiguration();
            return new IOSApplication(new MyAwesomeGame(emailHandler), config);
        }
    }
    

참고 :
다른 플랫폼의 프로젝트는을 (를) 제공하라는 소리를 지르기 시작 EmailHandler합니다. 이것은 자연스럽고 예상됩니다. 타겟팅하려는 각 플랫폼에 대해 플랫폼 별 인터페이스 구현을 제공해야합니다.

도움이 되었기를 바랍니다.
행운을 빕니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Libgdx robovm 음악로드 오류

분류에서Dev

아키텍처 arm64에 대한 정의되지 않은 심볼 : 빌드 RoboVM / LibGDX 프로젝트에 실패

분류에서Dev

프로젝트 libgdx에서 RoboVM없이 ipa 생성

분류에서Dev

libgdx robovm이 호출 스택의 기본 프레임이 아닌 분리 스레드에서 충돌합니다.

분류에서Dev

Libgdx Android Gradle 빌드 오류

분류에서Dev

Gdx.net : RoboVM을 사용하는 libgdx 코드의 NPE

분류에서Dev

libGdx 및 Gradle 프로젝트를 업그레이드하면 빌드 오류가 발생합니다.

분류에서Dev

프로젝트를 빌드하는 동안 AEM의 아코디언 구성 요소에서 오류 발생

분류에서Dev

Kotlin + Java 프로젝트의 Eclipse에서 컴파일 오류가 발생하지만 프로젝트는 Maven으로 빌드됩니다.

분류에서Dev

Cordova에서 Android 프로젝트 빌드 오류

분류에서Dev

Hudson에서 프로젝트 빌드 오류

분류에서Dev

TFS 빌드 서버-공유 프로젝트 빌드 오류

분류에서Dev

libgdx의 Particleeffect에서 .p 파일로드 오류

분류에서Dev

libgdx의 Particleeffect에서 .p 파일로드 오류

분류에서Dev

RoboVM의 indexPath에서 행 가져 오기

분류에서Dev

C ++ 프로젝트 빌드시 오류

분류에서Dev

오류 : Telerik Web UI에서 오류를 통해 프로젝트 빌드

분류에서Dev

온-프레미스 Azure devops 빌드 에이전트에 403 오류가 발생 함-다른 프로젝트의 다른 빌드가 제대로 작동 함

분류에서Dev

온-프레미스 Azure devops 빌드 에이전트에 403 오류가 발생 함-다른 프로젝트의 다른 빌드가 제대로 작동 함

분류에서Dev

VSTS 호스팅 에이전트에서 SQLite 확장을 사용하여 UWP 프로젝트를 빌드 할 때 "경로의 잘못된 문자"오류

분류에서Dev

LibGDX 프로젝트 설정시 오류

분류에서Dev

초기 프로젝트 오류 libgdx 1.0

분류에서Dev

IntelliJ IDEA의 빌드 경로 / 모듈에서 다른 프로젝트를 가져 오나요?

분류에서Dev

Eclipse에서 OpenCV를 사용하는 C ++ 프로젝트의 빌드 오류 :`SelectObject @ 8 '에 대한 정의되지 않은 참조 + 기타

분류에서Dev

스크립트에 오류가 있습니다. Heroku에 배포 할 앵귤러 프로젝트를 빌드 할 때 앵귤러를 빌드 할 때 Terser의 xxxjs

분류에서Dev

명령 줄에서 Qt 프로젝트를 빌드 할 때만 오류 발생

분류에서Dev

새 프로젝트에 대한 Android Studio 빌드 오류

분류에서Dev

RoboVM 오류-dyld : 라이브러리가로드되지 않았습니다.

분류에서Dev

Android 스튜디오의 오류로 인해 프로젝트를 빌드 할 수 없습니다.

Related 관련 기사

  1. 1

    Libgdx robovm 음악로드 오류

  2. 2

    아키텍처 arm64에 대한 정의되지 않은 심볼 : 빌드 RoboVM / LibGDX 프로젝트에 실패

  3. 3

    프로젝트 libgdx에서 RoboVM없이 ipa 생성

  4. 4

    libgdx robovm이 호출 스택의 기본 프레임이 아닌 분리 스레드에서 충돌합니다.

  5. 5

    Libgdx Android Gradle 빌드 오류

  6. 6

    Gdx.net : RoboVM을 사용하는 libgdx 코드의 NPE

  7. 7

    libGdx 및 Gradle 프로젝트를 업그레이드하면 빌드 오류가 발생합니다.

  8. 8

    프로젝트를 빌드하는 동안 AEM의 아코디언 구성 요소에서 오류 발생

  9. 9

    Kotlin + Java 프로젝트의 Eclipse에서 컴파일 오류가 발생하지만 프로젝트는 Maven으로 빌드됩니다.

  10. 10

    Cordova에서 Android 프로젝트 빌드 오류

  11. 11

    Hudson에서 프로젝트 빌드 오류

  12. 12

    TFS 빌드 서버-공유 프로젝트 빌드 오류

  13. 13

    libgdx의 Particleeffect에서 .p 파일로드 오류

  14. 14

    libgdx의 Particleeffect에서 .p 파일로드 오류

  15. 15

    RoboVM의 indexPath에서 행 가져 오기

  16. 16

    C ++ 프로젝트 빌드시 오류

  17. 17

    오류 : Telerik Web UI에서 오류를 통해 프로젝트 빌드

  18. 18

    온-프레미스 Azure devops 빌드 에이전트에 403 오류가 발생 함-다른 프로젝트의 다른 빌드가 제대로 작동 함

  19. 19

    온-프레미스 Azure devops 빌드 에이전트에 403 오류가 발생 함-다른 프로젝트의 다른 빌드가 제대로 작동 함

  20. 20

    VSTS 호스팅 에이전트에서 SQLite 확장을 사용하여 UWP 프로젝트를 빌드 할 때 "경로의 잘못된 문자"오류

  21. 21

    LibGDX 프로젝트 설정시 오류

  22. 22

    초기 프로젝트 오류 libgdx 1.0

  23. 23

    IntelliJ IDEA의 빌드 경로 / 모듈에서 다른 프로젝트를 가져 오나요?

  24. 24

    Eclipse에서 OpenCV를 사용하는 C ++ 프로젝트의 빌드 오류 :`SelectObject @ 8 '에 대한 정의되지 않은 참조 + 기타

  25. 25

    스크립트에 오류가 있습니다. Heroku에 배포 할 앵귤러 프로젝트를 빌드 할 때 앵귤러를 빌드 할 때 Terser의 xxxjs

  26. 26

    명령 줄에서 Qt 프로젝트를 빌드 할 때만 오류 발생

  27. 27

    새 프로젝트에 대한 Android Studio 빌드 오류

  28. 28

    RoboVM 오류-dyld : 라이브러리가로드되지 않았습니다.

  29. 29

    Android 스튜디오의 오류로 인해 프로젝트를 빌드 할 수 없습니다.

뜨겁다태그

보관