Android 구성을 실행할 때 .ttf 파일을 읽을 수없는 이유는 무엇입니까?


9

Android 기기에서 게임을 실행하거나 디버깅 할 때 logcat에이 오류가 발생합니다.

com.badlogic.gdx.utils.GdxRuntimeException : 파일 읽기 오류 : data / fonts / myFont.ttf (내부)

이 코드 라인에 의해 생성됩니다 :

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

여기서 fontFile다음과 같이 정의된다 :

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

데스크톱 구성을 실행할 때 발생하지 않습니다.

데스크탑 구성의 경우 프로젝트의 작업 디렉토리를 정의해야하지만 Android 구성에 이러한 옵션이 표시되지 않으며 의미가 없으므로 "작업 디렉토리"관련 문제라고 생각하지 않습니다. .

분명히 파일이 올바른 경로에 있습니다.

또한 이전 프로젝트에서 모든 것이 잘 작동했습니다. libgdx-setup을 사용하여 새 빈 prj를 만든 다음 이전 프로젝트의 모든 클래스와 패키지를 복사하여이 새 프로젝트를 만들었습니다. 어쩌면 일부 Gradle 파일과 관련된 문제입니까?


1
당신은 받고 FileNotFoundException있습니까? Android 파일 시스템은 대소 문자를 구분하므로 올바르게 작성했는지 확인하십시오. "myFont.ttf"가 "myFont.TTF"와 다른지
Alex Sifuentes

예, logcat에서 읽지 않았습니다. 로그 캣 메시지의 다른 부분은 다음과 같습니다. 원인 : java.io.FileNotFoundException : android.content.res.AssetManager.openAsset (Native의 data / fonts / myFont.ttf 메소드) android.content.res.AssetManager.open (AssetManager.java:359) com.badlogic.gdx.backends.android.AndroidFileHandle.read (AndroidFileHandle.java:75) 파일이 올바른지 확인하십시오. assets / data / fonts / myFont.ttf 어떤 이유로 안드로이드가 올바른 폴더를 찾지 못하고 있다고 생각합니다 ... 그러나 데스크톱 구성을 실행하면 제대로 작동합니다
Davide Cattani

아마도 Android 기술 지원에 문의하는 것이 좋습니다?
Wow_mentor

답변:


1

테스트 데스크탑 파일 시스템이 Windows NTFS에서 실행되고 Android 장치 파일 시스템이 Android 기본에있는 경우 파일 시스템 드라이버의 차이점이 있습니다.

Windows 파일 시스템 드라이버는 대소 문자를 구분하지 않지만 Android는 대소 문자를 구분하는 Linux를 사용합니다.

파일에서 대문자가 올바른지 확인하십시오.

또한 환경 변수가없는 절대 경로를 사용하고 있음을 알았습니다. 이것은 Android의 현재 작업 디렉토리에 동적입니다. 따라서 앱이 다른 디렉토리에서 실행되면 파일의 다른 위치에서 찾습니다. 이로 인해 다양한 시스템 개정판간에 문제가 발생할 수 있습니다. Android에서는 항상 절대 경로를 제공하십시오. 이는 환경 변수 또는 루트 디렉토리 (예 : "/")로 시작하는 것을 의미합니다. 앱을 SD 카드로 이동할 수 있으려면 환경 변수를 사용하는 것이 좋습니다.

또한 글꼴에 동적 데이터 디렉토리를 사용하지 않아야합니다. 앱 패키지에 번들로 묶어야합니다.


0

안드로이드에는 모든 자산이로드 된 자산 폴더가 있어야한다고 생각합니다.이 자산 폴더는 핵심 프로젝트가 아닌 안드로이드 프로젝트에 있습니다. 데스크톱, HTML 등은 모두 핵심 프로젝트 자산을 사용하므로 제대로 작동하지만 Android에는 자체 자산 폴더가 필요합니다. 당신은 그것을 위해 하나 있습니까?


2
데스크톱 HTML 및 코어는 프로젝트의 유일한 자산 폴더 인 Android 자산 폴더를 사용합니다.
Davide Cattani

0

옵션은 다음과 같습니다.

1) 모든 코드에서 ttf 대신 TTF 대문자를 사용해보십시오-안드로이드는 대소 문자를 구분하므로 원본 파일에 TTF 접미사가있는 경우.

2) android 모듈의 build.gradle 파일에서 다음을 확인하십시오.

assets.srcDirs = ['assets']

그리고 아닙니다 :

assets.srcDirs = ['assetManager']

다시 말해서 안드로이드 자산 폴더를 확인하십시오. 이것은 나를 위해 일했다. 그런 다음 빌드 프로젝트를 정리하고 안드로이드 장치에서 오래된 앱을 제거하십시오.


[DMGregory]가 답변을 수정했습니다.
Yan.F

-1

글꼴 파일을 자산 폴더로 직접 복사 해보십시오.


-1

다음과 같은 방법을 변경할 수있는 한 가지만하십시오. 글꼴 생성을 위해 "hiero"도구를 사용할 수 있습니다. 다음 링크에서 "hiero"jar 파일을 다운로드하십시오.

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

hiero를 사용하면 거의 모든 글꼴에 액세스 할 수 있습니다. 글꼴을 만든 후 안드로이드 프로젝트 파일 "자산"폴더에 저장하고 다음 코드를 추가하십시오.

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

이 방법을 사용해보십시오. 작동합니다.


죄송합니다, 이것을 하향 투표해야합니다. 를 사용하여 FreeTypeFontGenerator모든 글꼴을 가져 와서 어떤 크기로든 작성하십시오. Hiero에서는 각 글꼴 및 크기에 대한 비트 맵을 생성해야합니다. 나는 hiero가 훌륭한 도구라는 데 동의하지만 이것은 대답하지 않습니다.
Madmenyo

@ Madmenyo 안녕하세요, 나는 그의 문제를 해결할 다른 방법을 제공합니다. 위의 개념은 잘못이 아닙니다. 그의 문제에 대한 대안은 무엇입니까? 다운 투표의 정확한 이유가 무엇인지 모르겠습니다.
Gokul Sreenivasan

당신은 어떻게 알 수 있습니까? 어쩌면 그는 동적으로 생성 된 텍스트가 많이 필요할 수도 있지만 hiero는 그에 도움이되지 않습니다.
Madmenyo

@Madmenyo 안녕하세요, 당신은 그의 질문을 먼저 읽을 수 있습니다. 대체 솔루션을 제공했습니다.
Gokul Sreenivasan

그는 비트 맵 글꼴을 생성하도록 제안하는 ttf를로드하려고합니다.
Madmenyo

-1

파일이 / android / assets 안에 있는지 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.