Codename One旧Android项目构建上传失败求助
问题:旧Codename One应用通过Eclipse提交Android构建失败,APK未出现在构建列表
我有一个超过2年的旧Android应用,需要重新提交到Play Store。使用Arch系统,通过Eclipse开发该应用。使用Initializr和VSCode上传新生成的应用一切正常,但通过Eclipse中的Codename One -> Send Android build功能上传旧应用时,终端显示构建成功,但APK并未出现在构建站点的构建列表中。
初始控制台输出
Buildfile: /home/user/eclipse-workspace/A1_Test/build.xml -cn1-compile-css: [java] Retina Scale: 1.0 [java] Using stateful mode. Use -help flag to see options for new stateless mode. [java] Updating merge file /home/rainer/eclipse-workspace/A1_Test/css/theme.css.merged [java] Compiling /home/rainer/eclipse-workspace/A1_Test/css/theme.css.merged to /home/rainer/eclipse-workspace/A1_Test/src/theme.res [java] File has not changed since last compile. [java] CSS file successfully compiled. /home/rainer/eclipse-workspace/A1_Test/src/theme.res jar: [echo] Compile is forcing compliance to the supported API's/features for maximum device compatibility. This allows smaller [echo] code size and wider device support [copy] Copying 14 files to /home/rainer/eclipse-workspace/A1_Test/build/tmp [javac] /home/rainer/eclipse-workspace/A1_Test/build.xml:105: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling 14 source files to /home/rainer/eclipse-workspace/A1_Test/build/tmp [javac] Note: Some input files use unchecked or unsafe operations. [javac] Note: Recompile with -Xlint:unchecked for details. [jar] Building jar: /home/rainer/eclipse-workspace/A1_Test/dist/A1_Test.jar [javac] /home/rainer/eclipse-workspace/A1_Test/build.xml:129: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds BUILD SUCCESSFUL Total time: 7 seconds
新增错误输出
CSS> [EDT] 0:0:0,162 - Exception: java.lang.UnsatisfiedLinkError - /home/rainer/.codenameone/cef/lib/linux64/libjcef.so: libjawt.so: cannot open shared object file: No such file or directory CSS> java.lang.UnsatisfiedLinkError: /home/rainer/.codenameone/cef/lib/linux64/libjcef.so: libjawt.so: cannot open shared object file: No such file or directory CSS> at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) CSS> at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388) CSS> at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232) CSS> at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174) CSS> at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2415) CSS> at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818) CSS> at java.base/java.lang.System.loadLibrary(System.java:1989) CSS> at org.cef.SystemBootstrap$1.loadLibrary(SystemBootstrap.java:24) CSS> at org.cef.SystemBootstrap.loadLibrary(SystemBootstrap.java:36) CSS> at org.cef.CefApp.startup(CefApp.java:536) CSS> at com.codename1.impl.javase.cef.CEFBrowserComponent.create(CEFBrowserComponent.java:207) CSS> at com.codename1.impl.javase.cef.CEFBrowserComponent.create(CEFBrowserComponent.java:199) CSS> at com.codename1.impl.javase.cef.CEFBrowserComponent.create(CEFBrowserComponent.java:196) CSS> at com.codename1.impl.javase.cef.JavaCEFSEPort.createCEFBrowserComponent(JavaCEFSEPort.java:139) CSS> at com.codename1.impl.javase.cef.JavaCEFSEPort$2.run(JavaCEFSEPort.java:121) CSS> at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:308) CSS> at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771) CSS> at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722) CSS> at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716) CSS> at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) CSS> at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) CSS> at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741) CSS> at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) CSS> at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) CSS> at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) CSS> at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) CSS> at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) CSS> at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) CSS> [EDT] 0:0:0,174 - Exception: java.lang.RuntimeException - Failed to create CEF browser CSS> java.lang.RuntimeException: Failed to create CEF browser CSS> at com.codename1.impl.javase.cef.JavaCEFSEPort.createCEFBrowserComponent(JavaCEFSEPort.java:133) CSS> at com.codename1.impl.javase.cef.JavaCEFSEPort.createBrowserComponent(JavaCEFSEPort.java:98) CSS> at com.codename1.ui.BrowserComponent$9.run(BrowserComponent.java:557) CSS> at com.codename1.ui.Display.processSerialCalls(Display.java:1338) CSS> at com.codename1.ui.Display.edtLoopImpl(Display.java:1280) CSS> at com.codename1.ui.Display.mainEDTLoop(Display.java:1162) CSS> at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120) CSS> at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176) CSS> Caused by: java.lang.UnsatisfiedLinkError: /home/rainer/.codenameone/cef/lib/linux64/libjcef.so: libjawt.so: cannot open shared object file: No such file or directory CSS> at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) CSS> at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388) CSS> at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232) CSS> at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174) CSS> at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2415) CSS> at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818) CSS> at java.base/java.lang.System.loadLibrary(System.java:1989) CSS> at org.cef.SystemBootstrap$1.loadLibrary(SystemBootstrap.java:24) CSS> at org.cef.SystemBootstrap.loadLibrary(SystemBootstrap.java:36) CSS> at org.cef.CefApp.startup(CefApp.java:536) CSS> at com.codename1.impl.javase.cef.CEFBrowserComponent.create(CEFBrowserComponent.java:207) CSS> at com.codename1.impl.javase.cef.CEFBrowserComponent.create(CEFBrowserComponent.java:199) CSS> at com.codename1.impl.javase.cef.CEFBrowserComponent.create(CEFBrowserComponent.java:196) CSS> at com.codename1.impl.javase.cef.JavaCEFSEPort.createCEFBrowserComponent(JavaCEFSEPort.java:139) CSS> at com.codename1.impl.javase.cef.JavaCEFSEPort$2.run(JavaCEFSEPort.java:121) CSS> at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:308) CSS> at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771) CSS> at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722) CSS> at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716) CSS> at java.base/java.security.AccessController.doPrivileged(AccessController.java:399) CSS> at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) CSS> at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741) CSS> at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) CSS> at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) CSS> at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) CSS> at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) CSS> at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) CSS> at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
解决方法
修复缺失的libjawt.so依赖
Arch系统中,libjawt.so属于完整JDK包的一部分,确保安装了jdk-openjdk而非仅JRE:sudo pacman -S jdk-openjdk找到libjawt.so的路径(通常在
/usr/lib/jvm/java-<version>-openjdk/lib/),设置环境变量让系统能找到它:export LD_LIBRARY_PATH=/usr/lib/jvm/java-<version>-openjdk/lib:$LD_LIBRARY_PATH或者将路径添加到
/etc/ld.so.conf.d/java.conf文件中,执行sudo ldconfig生效。清理Codename One CEF缓存
删除本地CEF组件缓存目录,让Codename One重新下载适配版本:rm -rf ~/.codenameone/cef重启Eclipse后重新尝试提交构建。
更新Codename One Eclipse插件
旧版本插件可能与Arch系统的JDK或CEF组件不兼容,在Eclipse中更新Codename One插件到最新版本,重启后再执行构建操作。使用命令行替代构建
绕过Eclipse插件的CEF浏览器问题,直接在项目根目录执行Ant命令提交构建:ant build-android
内容的提问来源于stack exchange,提问作者rainer
相关产品推荐
相关产品推荐

