JAVA2OP로 jar을 pas로 만들자, 그리고 class or interface expected 문제
얼마전 jar 파일을 pas 파일로 만들기 위해서 JAVA2OP를 이용한 적이 있다. 물론 이를 다시 hpp로 만들어서 사용하려고 하는것이 목적이었다. 이번에 문제가 된 것은 RAD STUDIO 초기에 JAVA2OP를 해 보았을 때는 별 문제가 없다가, 이번에 다시 하면서 안되어 다른 사람들에게 거짓말쟁이가 되어 버렸다는 것이다.
아무튼 JAVA2OP를 사용하기 위해선 JAVA2OP가 있는 폴더 상에 변환할 jar 파일이 있는 것이 편하다.(자세한 것은 링크 참조.) 그리고 다음과 같이 작성을 한다.
java2op -jar android.jar -unit android
물론 간단하게 java2op -jar android.jar 만 하여도 상관 없다. 저렇게 -unit XXX를 하면 원하는 이름으로 pas를 만들수 있다.(자세한 것은 링크 참조.)
본래대로면 정상적으로 완료를 했어야 했다. 그러나 이 녀석이 다음과 같은 에러를 내 뿜는다.
class or interface expected
그래서 인터넷을 검색해 보았다. 역시나 별 도움은 안된다. 저 애러는 일반적으로 class가 없을 때 나타나는 것이라고 하지만, 보통은 블록 { , } 가 완전하지 않을 때 발생하는 문제라고 한다.
하지만 내가 jar로 export 시킨 package는 컴파일 애러 없이 정상적으로 폰에서 돌아가고 있는 어플리케이션이었다. 결국 저 문제는 아니라는 이야기.
그래서 명령을 잘 못 친줄 알고 몇번을 반복해 보았는데, 그랬더니 가끔 변환이 되긴 한다. 하지만 그 결과는 실망스러웠다. 그냥 텅빈 파일이 생성된 것이었다.
{*******************************************************}
{ }
{ CodeGear Delphi Runtime Library }
{ Copyright(c) 2014 Embarcadero Technologies, Inc. }
{ }
{*******************************************************}
unit Androidapi.JNI.Interfaces;
interface
uses
Androidapi.JNIBridge;
type
// ===== Forward declarations =====
// ===== Interface declarations =====
implementation
procedure RegisterTypes;
begin
end;
initialization
RegisterTypes;
end.
그래서 권한 문제인 줄 알고 명령프롬프트창을 관리자 권한으로 열었는데도 동일해서, 무엇일까 한참을 고민을 했다.
그런데,
우연히 c:\~~~> 이 눈에 들어왔다. 거기서 눈에 띈것은 다름아님 한글주소... 펌웨어 짜던 시절 많이 당했던 함정 중 하나였던 한글 주소가 눈에 보였다. 그리고 혹시나 하는 마음에 해당 작업 디렉토리를 한글이 없는 곳으로 옮겼다.
그랬더니 그냥 아주 훌륭하게 pas 파일이 만들어 졌다. 아~ 내 아까운 시간... ㅠㅠ
결국 해당 애러는 작업 프로그램이 중간에 한글주소가 존재하여 발생하였던 문제였다.