首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于pyjnius的Java类

用于pyjnius的Java类
EN

Stack Overflow用户
提问于 2020-12-29 14:20:25
回答 1查看 886关注 0票数 1

我已经创建了一个Java类,可以用pyjnius在pyjnius中使用,但是我不能使用它,因为pyjnius找不到它,pyjnius文档说我必须将Java类移到src/org,而且我已经完成了,但是没有成功,有人能告诉我如何在pyjnius中使用我的Java类吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-01 20:32:58

一定要告诉buildozer您打包的java源代码在哪里。

例如,如果您有java/org/test/TestClass.java,您可以这样做。

代码语言:javascript
复制
android.add_src = java/

确保您的java包与您期望从jnius导入的内容相匹配。

代码语言:javascript
复制
package org.test;
代码语言:javascript
复制
from jnius import autoclass
autoclass('org.test.TestClass')

完整的例子

app/main.py

代码语言:javascript
复制
"""Demonstrate loading custom java code using jnius
"""
from kivy.app import App
from jnius import autoclass


class Application(App):
    """see module documentation
    """

    def test_jnius(self, name):
        """Lookup our test class, instanciate and call its method
        """
        cls = autoclass("org.test.TestClass")
        result = cls(name).get_result()
        self.root.ids.result_box.text = result


if __name__ == "__main__":
    Application().run()

app/application.kv

代码语言:javascript
复制
FloatLayout:
    BoxLayout:
        orientation: 'vertical'
        size_hint: .5, .5
        pos_hint: {'center': (.5, .5)}
        spacing: '20dp'

        Label:
            text: 'Please enter your name'

        TextInput:
            id: ti
            multiline: False
            size_hint_y: None
            height: self.minimum_height

        Button:
            text: 'hit me!'
            on_release: app.test_jnius(ti.text)
            size_hint_y: None
            height: '38dp'

        Label:
            id: result_box

buildozer.spec

代码语言:javascript
复制
[app]
title = Kivy With Java App
package.name = kivyjavaapp
package.domain = org.test
source.dir = app/
source.include_exts = py,png,jpg,kv,atlas
version = 0.1
requirements = python3,kivy
orientation = portrait
fullscreen = 0
android.add_src = java/
android.arch = armeabi-v7a
android.allow_backup = True
ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master
ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.10.0
ios.codesign.allowed = false

[buildozer]
log_level = 2
warn_on_root = 1

java/org/test/TestClass.java

代码语言:javascript
复制
package org.test;
import java.lang.String;

public class TestClass {
    private String _name;

    public TestClass(String name) {
        _name = name;
    }

    public String get_result() {
        return "Hello " + _name;
    }
}

(可选,如果您想在桌面上测试java代码,在运行ant all之前使用export CLASSPATH=build/python app/main.py构建它)

build.xml

代码语言:javascript
复制
<project>
    <property name="ant.build.javac.source" value="1.7" />
    <property name="ant.build.javac.target" value="1.7" />

    <target name="clean">
      <delete dir="build"/>
    </target>

    <target name="test-compile">
        <mkdir dir="build"/>
        <javac srcdir="java/" destdir="build"
               includeantruntime='false'
               encoding="UTF-8"/>
    </target>

    <target name="jar" depends="test-compile">
        <jar destfile="build/org.test.jar" basedir="build/">
        </jar>
    </target>

    <target name="all" depends="jar,test-compile"/>
</project>

您可以在这个存储库https://github.com/tshirtman/android_jnius_custom_java中找到这个完整的示例

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65493632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档