[파이썬] `Kivy`와 `Pyjnius`를 사용하여 Android Java 코드 호출하기

안드로이드 애플리케이션을 개발하다보면 때때로 Java 코드를 호출해야 할 때가 있습니다. 하지만 Python으로 작성된 Kivy 앱에서 Java 코드를 직접 호출하는 것은 쉬운 일이 아닙니다. 이 문제를 해결하기 위해 Kivy에서는 Pyjnius 라이브러리를 제공합니다. 이 라이브러리를 사용하면 Kivy 앱에서 안드로이드 Java 코드를 호출할 수 있습니다.

이 블로그 포스트에서는 KivyPyjnius를 사용하여 Android Java 코드를 호출하는 방법을 알아보겠습니다. 아래는 간단한 예제입니다.

1. Pyjnius 설치하기

먼저, Pyjnius를 설치해야 합니다. 다음 명령을 사용하여 Pyjnius를 설치합니다.

pip install pyjnius

2. Kivy 앱에서 Java 코드 호출하기

다음은 Kivy 앱에서 Java 코드를 호출하는 예제입니다.

from jnius import autoclass

# Java 클래스 가져오기
JavaClass = autoclass('com.example.MyClass')

# Java 클래스 인스턴스 생성
java_instance = JavaClass()

# Java 메서드 호출
result = java_instance.myMethod()

위 코드에서 com.example.MyClass는 Java 클래스의 패키지와 이름을 나타냅니다. myMethod()는 호출하려는 Java 메서드의 이름입니다. 참고로, 이 예제에서는 Java 클래스의 생성자를 호출하지 않고 바로 인스턴스를 생성했습니다.

3. Kivy 앱에서 Java 클래스의 필드 사용하기

Java 클래스의 필드를 사용하려면 다음과 같이 작성합니다.

from jnius import autoclass

# Java 클래스 가져오기
JavaClass = autoclass('com.example.MyClass')

# Java 클래스 인스턴스 생성
java_instance = JavaClass()

# Java 필드 사용하기
field_value = java_instance.myField

위 코드에서 myField는 접근하려는 Java 클래스의 필드의 이름입니다.

4. Android 앱에서 Python 함수 호출하기

Kivy 앱에서 Java 코드를 호출하는 것과 반대로, Java 앱에서 Python 함수를 호출하는 것도 가능합니다. 이를 위해 특정 Python 함수를 Java에서 호출 가능한 형태로 만들어야 합니다. 이를 위해 Pyjniusjnius.cast 함수를 사용합니다. 다음은 Java에서 Python 함수를 호출하는 예제입니다.

from jnius import autoclass, cast

# Python 함수 정의
def my_python_function(arg1, arg2):
    # 함수 구현
    return arg1 + arg2

# Java에서 Python 함수 호출 가능하도록 변환
py_func = cast('org.kivy.android.PythonActivity').singleton.my_python_function

# Java에서 Python 함수 호출
result = py_func(2, 3)

위 코드에서 my_python_function은 Java에서 호출하려는 Python 함수입니다. cast() 함수를 사용하여 Java에서 호출 가능한 형태로 변환한 후, py_func 변수에 저장합니다. 이제 py_func를 호출하여 Python 함수를 실행할 수 있습니다.

마무리

이제 KivyPyjnius를 사용하여 Android Java 코드를 호출하는 방법을 알게 되었습니다. 이를 통해 Kivy 앱에서 안드로이드에서 제공하는 다양한 기능을 사용할 수 있고, 필요한 경우 Java와 Python 간의 상호작용이 가능해집니다. 자세한 내용은 KivyPyjnius의 공식 문서를 참조하시기 바랍니다.

References: