Android Studio 에서 Python 코드를 사용하여 같이 연동할 수 있다는 걸 알았다. 파이썬에서 만든 기능을 AOS 에 넣어서 어떻게 작동되는지 알아보기 위해 궁금했었는데 검색해보니 내용이 있었다.
보통 Chart, 혹은 Data Analytics 등 분석이나 도표 등 활용할때 유용하게 사용할 수 있을 것 같아서 어떻게 연동하는지 검색해본 내용에 대해 상세히 설명해보겠다.
https://chaquo.com/chaquopy/doc/current/examples.html
Examples - Chaquopy 16.0
Previous Home
chaquo.com
이 부분은 내가 참조한 사이트 이다. 여기에서 한번 예시를 보면서 환경설정을 해보자
Bulild.gradle
buildscript {
repositories {
google()
mavenCentral()
maven { url "https://chaquo.com/maven" } //추가
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.0'
classpath "com.chaquo.python:gradle:10.0.1" //추가
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
그리고
App.gradle
plugins {
id 'com.android.application'
}
apply plugin: 'com.android.application' //추가
apply plugin: 'com.chaquo.python' //추가
android {
compileSdk 31
defaultConfig {
applicationId "com.example.chaquopy"
minSdk 16 #버전에 맞게 변경
targetSdk 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//여기부터 추가
ndk {
abiFilters "armeabi-v7a", "x86"
}
python {
pip{
install "numpy"
}
}
sourceSets {
main {
python.srcDir "src/main/python"
}
}
//여기까지 추가 종료
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.4.0'
.
.
.
.
}
위와 같이 설정을 해준다.
그리고 위와 같이 경로에 python 폴더를 만들고 그 안에 test.py 를 만들어서 한번 잘 작동하는지 테스트를 해본다.
if (! Python.isStarted()) {
Python.start(new AndroidPlatform(this));
Python py = Python.getInstance();
PyObject pyObject = py.getModule("파이썬파일 이름");
PyObject obj = pyObject.callAttr("함수 이름");
tv.setText(obj.toString());
}
위의 코드는 파이썬 코드로써 제대로 파이썬 코드가 읽혀지고 작동되는지 테스트 하는 코드이다.
실제로
위와 같이 생성하고 실행해본 결과 제대로 로그가 떴다.
또다른 예제들을 가져와 보았다.
예제
The following all assume py is a Python instance.
Modules, classes, attributes and methods:
# Python code // Java equivalent
import zipfile PyObject zipfile = py.getModule("zipfile")
zf = zipfile.ZipFile( PyObject zf = zipfile.callAttr("ZipFile",
"example.zip") "example.zip");
zf.debug = 2 zf.put("debug", 2);
zf.comment zf.get("comment");
zf.write( zf.callAttr("write",
"filename.txt", "filename.txt",
compress_type=zipfile.ZIP_STORED) new Kwarg("compress_type",
zipfile.get("ZIP_STORED")));
Primitive types:
# Python code // Java equivalent
import sys PyObject sys = py.getModule("sys");
sys.maxsize sys.get("maxsize").toLong();
sys.version sys.get("version").toString();
sys.is_finalizing() sys.callAttr("is_finalizing").toBoolean();
Container types:
# Python code // Java equivalent
import sys PyObject sys = py.getModule("sys");
sys.version_info[0] sys.get("version_info").asList().get(0).toInt();
import os PyObject os = py.getModule("os");
os.environ["HELLO"] os.get("environ").asMap().get("HELLO").toString();
os.environ["HELLO"] = "world" os.get("environ").asMap().put(
PyObject.fromJava("HELLO"),
PyObject.fromJava("world"));
위와 같이 예제들로써 한번 안드로이드 실행해보고 제대로 작동되는지 체크한번 해보자 !!!
아래는 해당 패키지에 관련한 내용이다. JavaDoc 에서 쉽게 확인할 수 있다.
이제 우리도 AOS & Python 과 같이 Cross-use 를 해보자 !!!

'개발 > Java' 카테고리의 다른 글
Java_ google social Login (1) | 2024.10.18 |
---|---|
Java_ buildType 활용하여 debug, release 구분하기 (0) | 2024.10.02 |
Java_ 지역변수 , 인스턴스 변수 차이 (0) | 2024.09.12 |
Java & Swift _ runOnUiThread , view.post , handler, DispatchQueue.... 의 차이 (0) | 2024.09.12 |
Java_ Rxjava blockingGet , subscribe ... (0) | 2024.08.25 |