Java에서 오류를 시도할 때 Tips:Java Api Examples#일흑9

"Kotlin에서 스마트폰 크로스플랫폼 개발 시행착오 (인주) 기록노트"
'사흑'시리즈의 9라고 약칭한다.

1) "이 API, 어떻게 불러야 좋을까요?"등의 시행착오


부차적인 설치 사건, 예를 들어 RoboVM에서 Android/iOS 두 가지 대응하는 크로스플랫폼 개발(심지어 언어는 Kotlin)을 하고 인터넷의 정보에 의존한다.원하는 정보는 일반적인 것이 아니라 구체적인 실시 예이다.
한 마디로 하면 비틀거리면서 전진하는 과정에서 프로그램creek 사이트의 아래에 도착했다.
=> 링크
# 2008년부터 꽤 오래된 주식이니 아시는 분들은 아시겠죠.자기는 몰라, 기억이 안 나.
참고로 Python 버전 등(내용 미검증)도 있습니다.
=> 링크
한 마디로 하면 자바 API로 공개된 설치례 키워드는 색인 사이트처럼 검색된다.설치 사례의 수량에 따라 순위를 매기고, 상위 10000건은 아래부터 트레이스하기 시작한다
자신이 원하는 robovm의 API 설치 예는 3520 시리즈(괄호 안에 설치 예가 있는 수)로 분류됩니다.
3521. com.vividsolutions.jts.geom.Coordinate    (143) 
3522. java.io.FilterWriter  (143) 
3523. org.apache.http.NoHttpResponseException   (143) 
3524. com.badlogic.gdx.backends.iosrobovm.IOSApplication    (143) 
3525. org.springframework.beans.factory.support.BeanDefinitionRegistry  (143) 
3526. com.badlogic.gdx.backends.iosrobovm.IOSApplicationConfiguration   (143) 
3527. org.eclipse.debug.core.ILaunchConfigurationType   (143) 
3528. javax.lang.model.type.TypeKind    (143) 
3529. net.minecraft.entity.projectile.EntityArrow   (143) 
3530. android.text.style.UnderlineSpan  (143) 
일이 많은 거 알지?
Java가 바로 지금입니다. 시행착오 중인 분들은 참고하시기 바랍니다.
다음은 Android 개발에 자신 있는 사람이 크로스플랫폼 개발 환경인 RoboVM에서 iOS 개발에 참여한 추가 기록입니다.

2) (주석) Java Api Examples에 도달하기 전에


2-1 먼저 사람이 쓰러져도 RoboVM을 기둥으로 삼는다.


RoboVM 같은 새로 오신 분들도 기둥으로 삼으신 분이 계십니다.그때 사람 기둥의 결과가 꼭 확실한 것은 아니다(혹은 피곤하고 고생스럽다는 메시지가 많다).
예를 들어 만화 제목의: 결국 RoboVM 사용이 중지되었습니다.
그럼에도 불구하고 RoboVM 사용
  • RoboVM은 Android 개발자에게 친숙한 AndroidStudio 기반입니다.
  • 현재의 RoboVM은 iOS를 위한 UI 디자인을 XCode에 의뢰하는 방침@IBOutlet 등에 대한 주석을 달았다.
  • 적어도 입문 단계에서는 코드로 UI 디자인을 쓰는 것이 좋다고 생각합니다. (즉, RoboVM만 사용하고 iOS 개발을 배웁니다.)
  • 생산성을 진정으로 높이기 위해 크로스 플랫폼을 위한 디자인 지원 도구를 개발하고자 하는 곳(HTML에 대한slim,jade 같은 것)
  • , 크로스플랫폼 개발을 위한 디자인 지원 도구, DI 등의 겸비를 감안하면 의외로 어렵다.
  • 아니아니아니아니아니아니아니아니아니아니아니아니아니아니아니아니아니아니아니...고혁아...
  • (시끌벅적하면 나중에 실망이 많으니까 여기서 멈추고 코드로 돌아가자)
    # 다음은 Kotlin 코드이지만 Java에서도 공통된 내용입니다.Java에서 다음과 같은 코드는 RoboVM 요약 등에 있습니다.RoboVM 요약은 몇 달 전 RoboVM의 상황을 기록하기 때문에 RoboVM을 인간 기둥으로 삼고 싶은 자바와 Kotlin을 참고할 수 있습니다.

    2-2 RoboVM에서 자동으로 생성된 코드를 확인합니다.


    자동으로 생성된 코드는 일목요연하여 어렵지 않다.
    MyViewController.kt
    package com.mycompany.myapp
    
    import org.robovm.apple.uikit.UILabel
    import org.robovm.apple.uikit.UIViewController
    import org.robovm.objc.annotation.CustomClass
    import org.robovm.objc.annotation.IBAction
    import org.robovm.objc.annotation.IBOutlet
    
    @CustomClass("MyViewController")
    class MyViewController : UIViewController() {
    
        private val counterStore = CounterStore()
    
        @IBOutlet
        private val label: UILabel? = null
    
        @IBAction
        private fun clicked() {
            counterStore.add(1)
            label!!.text = "Click Nr. " + counterStore.get()
        }
    }
    
    @CustomClass 등의 주석은 이름 공간 org입니다.robovm.objc.annotation과 관련이 있음을 알 수 있다.말 그대로 이것은 Objective-C 대상에 속하고plist(XML 파일)를 통해 XCode가 제어한다.물론 여기서 출발해도 되지만 iOS 개발 미숙자로서 전체적인 상황을 똑똑히 볼 수 없다는 예감이 든다.그래서 모두 코드로 쓰세요.
    또한 CounterStore는 다음 폴더 구조와 같이 Android 옆에 있는 공통 모듈의 Core 산하에 있습니다.
    [참조] 폴더 구성:

    코드에 2-3UI 요소 추가 시작(같은 roboscala 참조)


    유감스럽게도github 등은 현재 버전의 RoboVM에서 실행되고 있는 Kotlin의 코드가 없기 때문에 roboscala의 코드를 참고할 수 있도록 허락해 주십시오.여기는 Pure Scala RoboVM 개발을 열심히 추진하고 있는 프로젝트입니다. (gradle이 아니라 sbt 기반입니다.)
    https://github.com/roboscala
    yViewController 수정 1.kt
    package com.myapp
    
    import org.robovm.apple.uikit.* // UILabel,UIViewController etc.
    import org.robovm.apple.foundation.* // NSSet etc.
    import org.robovm.objc.annotation.* // CustomClass,IBAction,IBOutlet
    import org.robovm.apple.coregraphics.CGRect
    
    
    @CustomClass("MyViewController")
    class MyViewController : UIViewController() {
        private val counterStore = CounterStore()
    
        // Code Only.
        val textField = UITextField(CGRect(20.0, 190.0, 280.0, 48.0))
        override fun viewDidLoad() {
            textField.setContentVerticalAlignment(
                      UIControlContentVerticalAlignment.Center)
            textField.setBorderStyle(UITextBorderStyle.RoundedRect)
            textField.setClearsOnBeginEditing(true)
            textField.text = "ここに文字列を入力"
            getView().addSubview(textField)
        }
    
        // XCode Storyboard based code
        @IBOutlet
        private val label: UILabel? = null
    
        @IBAction
        private fun clicked() {
            counterStore.add(1)
            var name = textField?.getText() ?: "未設定"
            label!!.text =  "${counterStore.get()}回目:${name} です。"
        }
    }
    
    
    "코드만"아래에 TextField 요소를 추가했습니다.원래 Scala 코드와 다른 점은 CGRect의 매개변수가 정수(20)인지 실수(20.0)인지 여부입니다.
    에뮬레이터에서 수행된 예:

    2-4 그러면 모두 Kotlin 코드입니다.디도 오세요...부드럽다


    단추를 눌렀을 때의 이벤트 처리가 없는pure scala 코드입니다.그래서 저는 자바의 실시 사례를
    보아하니, 변환(RoboVM을 포함하는 IntelliJ 계열의 도구에서 자바->Kotlin을 자동으로 변환할 수 있음)을 진행하여 이동하는 코드가 된다.
            btn1.addOnTouchUpInsideListener(object:OnTouchUpInsideListener {
                override fun onTouchUpInside(c:UIControl, e:UIEvent) { onClicked() }
            })
    
    ...Object 같은 건데 왠지 멋있지 않네...부드럽다
    그럼 디는 선인들에게 배운 후에 이런 느낌을 받았어요.
        //DIによる初期化
        private val context = getApplicationContext()
    
        instantiateInjector(con)
    
        fun instantiateInjector(context :android.content.Context) {
            val appModule = AppModuleImpl(context)
            val dataModule = DataModuleImpl(appModule)
            ...
            Inject.instance = InjectorImpl(appModule, domainModule...)
        }
    
    드디어 해결됐어.하지만 이것은 Android 환경을 위한 DI 설치입니다.iOS를 지원하는 DI 구현 방법...부드럽다

    2-5 ...Java Api Examples와 함께 질퍽거리는 벽을 넘을 수 있을까요?


    사람 기둥 설치, 그거랑 이거랑 다 그렇구나...고혁아...내가 말하기 시작했어...부드럽다이것은 흔히 있는 일이다.
    이때,robovm.apple.uikit.Uibutton(uikit의 roboVM 회사의 자바 랩)으로 닦으면 자바 Api Examples에 도착합니다.
    Java Code Examples for org.robovm.apple.uikit.UIButton
    아, 이런 부차적인 이야기의 설치 예가 10개나 나오다니 정말 대단하다.
    ......간단하게 투덜거리는 시간을 절약할 뿐이지만 자바 & JVM 언어로 시행착오를 동반한다.

    좋은 웹페이지 즐겨찾기