2010-11-18 6 views
6

안드로이드에서 JavaScript를 사용할 수 있습니까 ?? 그렇다면 어떻게? 몇 가지 예를 제공해주십시오.안드로이드에있는 JavaScript

감사합니다.

+2

Android 브라우저 엔진 WebKit은 JavaScript를 실행할 수 있습니다. 따라서 JS 또는 다른 참조 된 파일이 포함 된 HTML 파일을 만들어 사용하십시오. –

+0

자바 스크립트가 아닙니다. 자바 스크립트는 자바와 아무런 관련이없는 언어입니다. 사실 C++은 자바 스크립트보다 자바와 더 밀접한 관련이 있습니다. – slebetman

답변

7

나는 방법 늦게 여기에 파티에 생각은하지만 정확한이 있었다 필요한 것. iOS 7에는 JavaScriptCore 이 기본적으로 포함되어 있으므로 (제한된 문서에도 불구하고) 사용하기가 정말 쉽습니다. 문제는 Android에서도 비슷한 것을 사용할 수 없다면 사용하고 싶지 않다는 것입니다. 그래서 AndroidJSCore project을 만들었습니다. 그것은 당신이 부피가 큰 WebView 및 삽입을 요구하지 않고 안드로이드에서 네이티브 JavaScript 코드를 사용할 수 있습니다. Java와 Javascript간에 비동기식으로 호출을 원활하게 만들 수도 있습니다.

업데이트 27 3 월 17 일 : AndroidJSCore는 LiquidCore으로 대체되었습니다. LiquidCore는 JavascriptCore보다는 V8을 기반으로하지만 기본적으로 동일합니다. documentation on using LiquidCore as a raw Javascript engine을 참조하십시오. 문서에서

는 :

이 ... 시작하는, 당신은 자바 스크립트 JSContext을 작성해야합니다. JS 코드 의 실행은이 컨텍스트에서 발생하며 별도의 컨텍스트는 격리 된 가상 컴퓨터이며 은 서로 상호 작용하지 않습니다.

JSContext context = new JSContext(); 

이 컨텍스트 자체는 JavaScript 개체입니다. 따라서 속성을 가져오고 설정할 수 있습니다. 이것은 전역 JavaScript 객체이므로이 속성은 환경의 모든 후속 코드에 대한 최상위 수준 컨텍스트에 있습니다.

context.property("a", 5); 
JSValue aValue = context.property("a"); 
double a = aValue.toNumber(); 
DecimalFormat df = new DecimalFormat(".#"); 
System.out.println(df.format(a)); // 5.0 

또한 맥락에서 자바 스크립트 코드를 실행할 수 있습니다

context.evaluateScript("a = 10"); 
JSValue newAValue = context.property("a"); 
System.out.println(df.format(newAValue.toNumber())); // 10.0 
String script = 
    "function factorial(x) { var f = 1; for(; x > 1; x--) f *= x; return f; }\n" + 
    "var fact_a = factorial(a);\n"; 
context.evaluateScript(script); 
JSValue fact_a = context.property("fact_a"); 
System.out.println(df.format(fact_a.toNumber())); // 3628800.0 

또한 자바에있는 함수를 작성할 수 있지만, 자바 스크립트에 노출 :

JSFunction factorial = new JSFunction(context,"factorial") { 
    public Integer factorial(Integer x) { 
     int factorial = 1; 
     for (; x > 1; x--) { 
      factorial *= x; 
     } 
     return factorial; 
    } 
}; 

이것은 자바 스크립트 함수를 만듭니다 JavaScript에서 을 호출하면 Java 메소드 factorial이 호출됩니다.그런 다음 JavaScript VM에 전달할 수 있습니다.

context.property("factorial", factorial); 
context.evaluateScript("var f = factorial(10);") 
JSValue f = context.property("f"); 
System.out.println(df.format(f.toNumber())); // 3628800.0 
+0

방금 ​​AndroidJSCore에 시도해 봤는데 꽤 잘 작동하는 것 같습니다! 그러나 32 비트 컴퓨터에서만 실행된다는 것을 알았습니다. 64 비트 지원을 추가 할 계획입니까? 대부분의 새 휴대 전화가 64 비트이기 때문에, 그것은 꽤 많은 사람들을 놀라게합니다. – user2771609

+1

예. 2.1 릴리스에서는 64 비트 지원이 계획되어 있습니다. NDK 컴파일러는 GCC 4.9.2를 기반으로합니다. JavaScriptCore가 의존하는 atomics 관련 버그가 있습니다. 전 문제를 해결하는 GCC 4.9.3 빌드에서 일하고 있습니다. 일단 내가 일할 수있게되면, 나는 그것을 풀어 놓을 것이다. 곧 올거야. –

+0

오, 굉장해! 고마워, 나는 정말로 기대하고있다. – user2771609

1

Javascript를 사용하여 기본 앱을 만드는 것과 같은 것을 의미합니까? 웹 도구/언어를 사용하여 기본 앱을 만들 수있는 Titanium Mobile 같은 도구가 있다는 것을 알고 있습니다.

웹 앱을 만들 수도 있습니다. 거기에 많은 리소스와 튜토리얼이 있습니다. "Android Web App tutorial"또는 비슷한 것을 검색하면됩니다.

관련 문제