如何为类启用multiDex,以便在DexPathList中包含或跟踪它们?
我正在使用graalvm(带有本机图像)和gluonfx nativePackage任务生成apk。
id 'com.gluonhq.gluonfx-gradle-plugin' version '1.0.3' //build.gradle
但是当我尝试访问SMS广播接收器时,我得到了DexPathList中找不到的类。。。
这是androidManifest设置。。
<application ... package="demo" ...>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<receiver android:name=".services.SmsListener"
android:enabled="true"
android:exported="true"
android:permission="android.permission.BROADCAST_SMS">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
</receiver>
</application>
当手机上的短信掉落时,我得到的错误如下...无法实例化接收器demo.services.SmsListener:java.lang.ClassNotFoundExc0019:没有找到类"demo.services.SmsListener"在路径: DexPathList[[[zip file"/data/app/.../base.apk"], nativeLibraryDirectory=[/data/app/...-g==/lib/arm64,/data/app/... g==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]]
那么我如何将MultiDexEnabled True传递给android任务呢?或者有没有一种方法可以通过java代码启动这个广播类?项目结构
最初的问题是在将项目打包到最终的APK之前,向Android源代码中添加Java代码。
由于gluonfx插件还没有自动程序,因此这是一个手动过程:
>
运行mvn-Pandroid gluonfx: build gluonfx: pack
一次,这将在Target/gluonfx/aarch 64-android/gvm/android_project
下创建Android项目。
添加Java /Android源到Target/gluonfx/aarch 64-android/gvm/android_project/app/src/main/java
手动构建APK:
cd target/gluonfx/aarch64-android/gvm/android_project/
export ANDROID_SDK_ROOT=~/.gluon/substrate/Android
./gradlew app:assembleDebug
继续此过程:mvn-Pandroid gluonfx:安装gluonfx:运行
虽然这允许修改Android部分,但主要的警告是,这一部分与Java/JavaFX/GraalVM部分之间缺乏通信,因此只有在Android端进行单独修改时,它才会起作用。
为了修改Android部分并访问Java/JavaFX端,最好的方法是创建一个附加服务。
为此,一个选项是克隆附件,添加新服务,并发布/分发此修改后的附件版本,但更好的是在附件之外创建一个自定义的附件服务。
这个实验性存储库包含一个新服务:LogService
,作为概念证明。
自述文件已包含如何开始使用此服务的说明。
总结如下:
./gradlew的清洁发布ToMavenlocal
.下有工件~/. m2/repository/org/jpereda/atti/log/4.0.12-SNAPSHOT
: log-4.0.12-SNAPSHOT-android.jar
log-4.0.12-SNAPSHOT-ios.jar
log-4.0.12-SNAPSHOT-desktop.jar
log-4.0.12-SNAPSHOT.jar
将依赖项添加到pom。请注意,官方附加依赖项保持不变,但需要4.0.12-SNAPSHOT。
<dependencies>
<dependency>
<groupId>com.gluonhq.attach</groupId>
<artifactId>storage</artifactId>
<version>4.0.12-SNAPSHOT</version>
</dependency>
...
<dependency>
<groupId>org.jpereda.attach</groupId>
<artifactId>log</artifactId>
<version>4.0.12-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</repository>
</repositories>
请注意,由于它不是官方附加服务,因此不能使用包名com。gluonhq。附加
,并且无法将其添加到附加列表
。因此,它被视为常规依赖项,您需要根据目标添加平台依赖项:
例如,对于Android:
<profile>
<id>android</id>
<properties>
<gluonfx.target>android</gluonfx.target>
</properties>
<dependencies>
<dependency>
<groupId>org.jpereda.attach</groupId>
<artifactId>log</artifactId>
<version>4.0.12-SNAPSHOT</version>
<classifier>android</classifier>
<scope>runtime</scope>
</dependency>
</dependencies>
</profile>
根据您的代码,像往常一样呼叫服务:
LogService.create().ifPresent(service -> service.log("This is a message"));
例如,在Android上:
mvn -Pandroid gluonfx:build gluonfx:package gluonfx:install gluonfx:nativerun
首先,阅读https://docs.gluonhq.com/#_device_interface以便更好地了解附加服务。
在LogService
项目之后,创建自己的服务应该或多或少是简单的。
更复杂的部分是Java(11)/JavaFX/GraalVM和Java(7)/Android之间的通信,其中需要JNI。Java端是AOT编译的,并进入lib${service}。a
,Android端转到Android项目,并作为${service}分发
我的布局如下,其中包含3个,它们分别对齐、和。 我现在面临的问题是,在android设备版本<6.0的情况下并不能很好地工作。我的意思是,对于版本的设备,会在达到最大宽度时中断文本,但是对于或版本的设备,可能也会更低, <罢工> 这个 故障发生后 文本和显示中的空格 ,它不会中断长文本。 下面是它在android版本中的样子,它小于: 考虑名称是FName LName 联系人:fname... 以
1.3.Android的版本 同任何软件一样,Android也在不断的改进之中,其间的变化就在版本号上得以呈现。但是容易使人迷惑的是,不同版本号之间又是什么关系?在表格里看会更直观些,如下: 表格 1.1. 截至Android 3.0的Android各版本 Android 版本号 API Level 代号 Android 1.0 1 Android 1.1 2 Android 1.5 3 Cupc
Android Support库 22.1 原文链接 : Android Support Library 22.1 原文作者 : Ian Lake 译文出自 : 开发技术前线 www.devtf.cn 译者 : Rocko 校对者: chaossss 状态 : 校对完成 你可能听过这么一句话 “最好的代码就是没有代码。” 然而我想对你说的是:你写下的每一行代码应该能为应用增加独特的价值,而不是为应
我对Android并不陌生,我很习惯于版本处理和如何调整它,但当我看到这一点时,我很困扰。。。 在Lollipop前的任何设备上,这一行都会导致应用程序崩溃,因为构建失败。版本代码。Lollipop字段不存在。。。那么,为什么在文档中推荐的解决方案中会出现这种情况呢? 我真的想知道我错过了什么?
一本介绍Android 开发的入门图书,它循序渐进地介绍了如何利用Android 基本构件来创建用户界面、存储数据和执行连接网络等操作。
问题内容: 如何发布项目的Jar包装? 我发现,位于下面,我想这是正确的Jar包(包含文件)。 有什么正式的方法可以将库发布为JAR而不是AAR? 编辑 我使用Gradle发行了Maven构件,并且我想连同AAR软件包一起发行JAR。因此具有签名,md5,清单… 的JAR 基于https://chris.banes.me/2013/08/27/pushing-aars-to-maven-centr