Java 类 对于 pyjnius
Java classes for pyjnius
我创建了一个 Java class 在 python 中与 pyjnius 一起使用,但我不能使用它,因为 pyjnius 找不到它,pyjnius 文档说我必须将 Java classes 移动到 src/org 我已经做到了但没有成功,有人能告诉我如何使用我的 Java class请用 pyjnius。
确保告诉 buildozer 您打包的 java 源在哪里。
例如,如果您有 java/org/test/TestClass.java
,您可以这样做。
android.add_src = java/
确保您的 java 包与您希望从 jnius 导入的包匹配。
package org.test;
from jnius import autoclass
autoclass('org.test.TestClass')
一个完整的例子
app/main.py
"""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
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
[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
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 代码,请在 运行 python app/main.py
之前使用 ant all
和 export CLASSPATH=build/
构建它)
build.xml
<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
我创建了一个 Java class 在 python 中与 pyjnius 一起使用,但我不能使用它,因为 pyjnius 找不到它,pyjnius 文档说我必须将 Java classes 移动到 src/org 我已经做到了但没有成功,有人能告诉我如何使用我的 Java class请用 pyjnius。
确保告诉 buildozer 您打包的 java 源在哪里。
例如,如果您有 java/org/test/TestClass.java
,您可以这样做。
android.add_src = java/
确保您的 java 包与您希望从 jnius 导入的包匹配。
package org.test;
from jnius import autoclass
autoclass('org.test.TestClass')
一个完整的例子
app/main.py
"""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
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
[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
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 代码,请在 运行 python app/main.py
之前使用 ant all
和 export CLASSPATH=build/
构建它)
build.xml
<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