¿Por qué no puedo leer el archivo .ttf cuando ejecuto la configuración de Android?

9

Al ejecutar o depurar mi juego en un dispositivo Android, aparece este error en el logcat:

com.badlogic.gdx.utils.GdxRuntimeException: error al leer el archivo: data / fonts / myFont.ttf (interno)

El cual es creado por esta línea de código:

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

donde fontFilese define así:

FileHandle fontFile = Gdx.files.internal("data/fonts/myFont.ttf");

Esto no sucede cuando ejecuto la configuración de escritorio.

Sé que para la configuración de escritorio debe definir el directorio de trabajo de su proyecto, pero no veo esa opción en la configuración de Android y tampoco tiene sentido, así que no creo que sea un problema relacionado con el "directorio de trabajo". .

Obviamente, el archivo está en la ruta correcta.

También tenga en cuenta que todo funcionó bien en mi proyecto anterior. Creé este nuevo proyecto creando un nuevo prj en blanco usando libgdx-setup y luego copiando todas las clases y paquetes del proyecto anterior. Entonces, ¿tal vez es un problema relacionado con algún archivo Gradle?

Davide Cattani
fuente
1
vas a obtener un FileNotFoundException? El sistema de archivos de Android distingue entre mayúsculas y minúsculas, asegúrese de haberlo escrito correctamente "myFont.ttf" es diferente a "myFont.TTF"
Alex Sifuentes
Sí, no lo leí en el logcat, aquí está la otra parte del mensaje logcat: Causado por: java.io.FileNotFoundException: data / fonts / myFont.ttf en android.content.res.AssetManager.openAsset (Native Método) en android.content.res.AssetManager.open (AssetManager.java:359) en com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) Estoy seguro de que el archivo es correcto, está dentro assets / data / fonts / myFont.ttf Creo que, por alguna razón, Android no está buscando en la carpeta correcta ... Pero ejecutar la configuración de escritorio funciona bien
Davide Cattani
¿Quizás sea mejor contactar al soporte técnico de Android?
Wow_mentor

Respuestas:

1

Si su sistema de archivos de escritorio de prueba se ejecuta en Windows NTFS y el sistema de archivos del dispositivo Android es nativo de Android, la diferencia está en los controladores del sistema de archivos.

Los controladores del sistema de archivos de Windows no distinguen entre mayúsculas y minúsculas, pero Android usa Linux, que distingue entre mayúsculas y minúsculas.

Asegúrese de que su uso de mayúsculas sea correcto en el archivo.

Además, noté que estaba usando una ruta absoluta sin variable ambiental. Esto es dinámico para su directorio de trabajo actual en Android. Por lo tanto, si la aplicación se ejecuta desde un directorio diferente, buscará el archivo en un lugar diferente. Esto podría causar problemas entre varias revisiones del sistema. Siempre da caminos absolutos en Android. Esto significa comenzar con una variable ambiental o el directorio raíz (es decir, "/") En aras de poder mover la aplicación a una tarjeta SD, es mejor usar las variables ambientales.

Además, no debe usar el directorio de datos dinámicos para su fuente. Deberías incluirlo en el paquete de tu aplicación.

Robert Wm Ruedisueli
fuente
0

Creo que para Android debe tener una carpeta de activos con todos los activos cargados, esta carpeta de activos estaría en el proyecto de Android en lugar del proyecto principal. Las computadoras de escritorio, HTML, etc., usan los activos principales del proyecto para que funcionen bien, pero Android necesita su propia carpeta de activos. ¿tienes uno para eso?

Praefervidus
fuente
2
Desktop HTML y core utilizan la carpeta de activos de Android, que es la única carpeta de activos en el proyecto.
Davide Cattani
0

Las opciones son:

1) Pruebe la letra mayúscula TTF en lugar de ttf en todo su código, en caso de que su archivo original tenga sufijo TTF, porque Android distingue entre mayúsculas y minúsculas.

2) En el archivo build.gradle debajo de su módulo de Android, asegúrese de que:

assets.srcDirs = ['assets']

Y no:

assets.srcDirs = ['assetManager']

En otras palabras, asegúrese de que sea su carpeta de activos de Android. Este me funcionó. luego limpie el proyecto de compilación y desinstale la aplicación anterior del dispositivo Android.

Yan.F
fuente
[DMGregory] lo entendió, la respuesta fue editada.
Yan.F
-1

Intente copiar los archivos de fuentes directamente en la carpeta de activos.

jobr97
fuente
-1

Solo haga una cosa: puede cambiar el método que sigue ahora. puede usar la herramienta "hiero" para la creación de fuentes. Simplemente descargue el archivo jar "hiero" del siguiente enlace

https://libgdx.badlogicgames.com/tools.html

Al utilizar hiero, podrá acceder a casi todas las fuentes. después de crear las fuentes, guárdelo en la carpeta "activo" de sus archivos de proyecto de Android y agregue el siguiente código.

     private BitmapFont font;
     font = new BitmapFont(Gdx.files.internal("myNewFontCreatedByHiero.fnt"));

solo prueba este método. funcionará.

Gokul Sreenivasan
fuente
Lo siento, tengo que denunciar esto. Usando el le FreeTypeFontGeneratorpermite importar cualquier fuente y escribir con ella en cualquier tamaño. Donde Hiero requiere que generes mapas de bits para cada fuente y tamaño. Estoy de acuerdo en que hiero es una gran herramienta, pero esto no responde a la pregunta.
Madmenyo
@Madmenyo Hola, solo doy una forma alternativa de resolver su problema. El concepto anterior no está mal. Cuál es la solución alternativa a su problema. No sé cuál es la razón exacta del voto negativo.
Gokul Sreenivasan
¿Cómo lo sabes? Tal vez necesita una gran cantidad de texto generado dinámicamente, hiero no ayuda con eso.
Madmenyo
@Madmenyo Hola, puedes leer su pregunta primero. He dado una solución alternativa.
Gokul Sreenivasan
Él quiere cargar ttf sugieres crear una fuente de mapa de bits.
Madmenyo
-1

Asegúrese de que los archivos estén dentro de / android / assets.

kwantuM
fuente