본문 바로가기
개발/Java

AOS_ Python 연동

by JunsC 2025. 2. 28.
728x90

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 를 해보자 !!!

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."