ajax, js

* 자바스크립트, 크로스 도메인 이슈 대응중 하나인 JSONP 방식 예제입니다.

* JSONP방식은 GET통신만 지원합니다.






예제


1) 자바스크립트, request

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
document.write("<script src='https://code.jquery.com/jquery-1.11.2.min.js'><"+"/script>"); 
var g_url = "https://domain_B";
var sendObject = {
       param1: "thisIsJsonp",
       param2: "withGet"
    };
    
jQuery.ajax({
    dataType: "jsonp",
    url : g_url,
    type: "GET",
    data: sendObject,
    
    jsonp: "jsonpCallBack",
    success: function (msg)
    {
        console.log(msg);
        alert("성공!");
    },
    error : function (msg, status, err)
    {
        console.log("status=" + status);
        console.log("msg=" + msg);
        alert('실패!');
    }
 });
cs



2) 자바, 서블릿

-> 리스폰스를 넣을때 리퀘스트에 있던 콜백함수명으로 입력치 않으면 'JSONP response is not defined'쪽 문제가 발생합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
... ... ...
 
public class AdvenceReservation extends HttpServlet
{
    @Override
    protected void doGet(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws ServletException, IOException
    {
        String param1 = servletRequest.getParameter("param1");
        String param2 = servletRequest.getParameter("param2");
        ... ... ...
        String callBack = servletRequest.getParameter("jsonpCallBack");
        
        PrintWriter writer = servletResponse.getWriter();
        writer.write(callBack +"( {\"result\":\"ok\"} )");
        writer.flush();
        writer.close();
    }
}
cs






참조자료.


[Ajax] JSONP를 이용하여 Cross Domain 해결 :: 개발은 전투다

javascript - AJAX with JSONP returns error Callback is Undefined - Stack Overflow






기타. 변경이력


일자

변경이력

2019-10-27

 초안

'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

JS ajax: jsonp  (0) 2019.10.27
루아: 기초정리(2)  (0) 2019.06.06
루아: 기초정리(1)  (0) 2019.05.26
HTML5: cocos2d-js 기초 (1)  (0) 2018.05.23
파이썬3: 기초정리(2)  (0) 2018.05.18
파이썬3: 기초정리(1)  (0) 2018.05.14

* 윈도우10(64bit), Lua 5.3.5.기반입니다.

루아: 기초정리(1)

루아: 기초정리(2)

루아: 기초정리(3)

 

 

 

 

 

1. 자료형과 변수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
--scope가 global로 지정된 변수
gContext = nil;     --루아식 null
gVal = -1;
gTblList1, gTblList2 = {}, nil--루아에 있는 득특한 자료형. 리스트와 테이블을 오감.
 
--scope가 local로 지정된 변수
local lContext = nil;
local lVal = -1;
local lTblList1, lTblList2 = {}, nil;
 
 
gContext = 'ANALOG-GREEN' .. ' ' .. 'this blog is doodle';
print('1) gContext=' .. gContext);  --[..] String basic append
print('2) gContext=', gContext);
gContext = '2019';
gVal = tonumber(gContext)+6;
print('tonumber(gContext)+6=' .. gVal);
 
print('(before)gTblList1=' .. #gTblList1);
--print('(before)gTblList2=' .. #gTblList2);    --null error
gTblList1[1= 'Hello';
gTblList1[2= ', ';
gTblList1[3= 'World!';
gTblList2 = {'Saluton''~''Mondo!'};
print('(after)gTblList1=' .. #gTblList1 .. ', [idx.0]='..gTblList1[1]);
print('(after)gTblList2=' .. #gTblList2 .. ', [idx.0]='..gTblList2[1]);
cs
--실행결과.
1) gContext=ANALOG-GREEN this blog is doodle
2) gContext=    ANALOG-GREEN this blog is doodle
tonumber(gContext)+6=2025
(before)gTblList1=0
(after)gTblList1=3, [idx.0]=Hello
(after)gTblList2=3, [idx.0]=Saluton

 

 

 

 

 

2. 기본 제어

1) 연산자, 산술

1
2
3
4
5
6
7
8
9
10
11
12
gVal1, gVal2 = 20196;
 
print('gVal1+gVal2=' .. gVal1+gVal2);
print('gVal1-gVal2=' .. gVal1-gVal2);
print('gVal1*gVal2=' .. gVal1*gVal2);
print('gVal1/gVal2=' .. gVal1/gVal2);
print('gVal1/0='     .. gVal1/0);
print('gVal1%gVal2=' .. gVal1%gVal2);
--print('gVal1%0='     .. gVal1%0); --ERROR
print('0%gVal2='     .. 0%gVal2);
print('gVal1^gVal2=' .. gVal1^gVal2);
print('-gVal1='      .. -gVal1);    -- newVal == prevVal*-1
cs
--실행결과. 
gVal1+gVal2=2025 
gVal1-gVal2=2013 
gVal1*gVal2=12114 
gVal1/gVal2=336.5 
gVal1/0=inf 
gVal1%gVal2=3 
0%gVal2=0 
gVal1^gVal2=6.773574528902e+019 
-gVal1=-2019

 

 

2) 연산자

> 주의사항. ++나 --같은 축약연산자가 없습니다.

다른 언어에서 [A!=B]인 비교연산자 루아에서는 [A~=B]이고,

||     -> or

&& -> and
!     -> not인것만 주의하면 다른 언어의 연산자와 비슷합니다.

 

만약, 루아로 프로그래밍 언어자체를 처음 시도하시는거면 아래의 페이지 정독 추천드립니다.
Lua Operators

 

 

3) 루프문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
local looEndIdx = 5;
local addVal = 0;
 
local loopResult1 = 0;
--basic loop type
for idx = 0, looEndIdx do   --loop start~end
    loopResult1 = loopResult1+idx;
end
print'loopResult1=' .. loopResult1 );
 
 
local loopResult2 = 0;
addVal = 0;
--repeat loop type
repeat
    addVal = addVal+1;
    loopResult2 = loopResult2+addVal;
until( addVal >= looEndIdx )    --loop end condition
print'loopResult2=' .. loopResult2 );
 
 
local loopResult3 = 0;
addVal = 0;
--while loop type
while( addVal < looEndIdx )     --loop run condition
do
    addVal = addVal+1;
    loopResult3 = loopResult3+addVal;
end
print'loopResult3=' .. loopResult3 );
cs
--실행결과
loopResult1=15
loopResult2=15
loopResult3=15

 

4) 조건문&제어문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
local msg = nil;
local loopLeng = 10;
 
for idx=0, loopLeng do
    if idx==0 then
        print('idx==0');
    elseif idx==1 then
        msg = 'ANALOG-GREEN';
        print('idx==1  msg=' .. msg);
    elseif (idx==2) then
        print('(idx==2)');
    elseif idx==3 then
        msg = 'loop exit';
        print('idx==3  msg=' .. msg);
        break;
    elseif idx==4 then
        msg = 'never reach';
        print('idx==4  msg=' .. msg);
    end
end
cs
--실행결과
idx==0
idx==1  msg=ANALOG-GREEN
(idx==2)
idx==3  msg=loop exit

 

 

 

 

 

3. 함수와 모듈

1) 함수 반환값

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function DoPrint(argFuncName, argContext)
    --return 이 없는 함수형태
    print('['..argFuncName..'] ' .. argContext);
end
 
function GetAdd(arg1, arg2)
    --return 이 있는 함수형태
    result = arg1+arg2;
    DoPrint('GetAdd', result);
 
    return result;
end
 
 
local valByFuncReturn = GetAdd(20196);
cs
--실행결과
[GetAdd] 2025

 

2) 함수인자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
function FormA()            --basic function form 1
    print('called FormA');
end
 
function FormB(arg1, arg2)  --basic function form 1
    local result = arg1+arg2;
    print('called FormB, result=' .. result);
end
 
gFormC = function(arg1, arg2)
    --익명함수(Anonymous function)와 유사.
    --함수를 변수처럼 사용하는 방식이기도.
    print('called FormC(alike Anonymous func.), arg1='..arg1 .. ', arg2='..arg2);
end
 
function FormD(arg1, arg2, argFunc)   --unusual function form in LUA (2)
    local result = arg1+arg2;
 
    print('called FormD');
    print('-------------');
    FormA();
    argFunc(arg1, arg2);
    print('-------------');
end
 
function FormE(...)
    --가변 함수 인자
    local arg = {...};
    local result = #arg;
    print('called FormE, result=' .. result);
end
 
 
 
FormD(20196, gFormC);
FormE();
FormE(201966);
FormE("A""B""C""E");
cs
called FormD
-------------
called FormA
called FormC(alike Anonymous func.), arg1=2019, arg2=6
-------------
called FormE, result=0
called FormE, result=3
called FormE, result=4

 

 

4. 에러처리

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
function Something()
    local param1 = 2019;
    local param2 = 6;
 
    return param1 * param2;
end
 
function SomethingError()
    local param1 = 2019;
    local param2 = "SalutonMondo!";
 
    return param1 * param2;
end
 
function ErrorManager(argErr)
    print('argErr: ' .. argErr);
end
 
 
 
if pcall(Something) then
    print("[pcall] Something, ERROR X"); 
else
    print("[pcall] Something, ERROR O");
end
 
--error check form 1
if pcall(SomethingError) then
    print("[pcall] SomethingError, ERROR X"); 
else
    print("[pcall] SomethingError, ERROR O");
end
 
--error check form 2
local response = nil;
response = xpcall( Something, ErrorManager );
print('[xpcall] Something, response:', response);
response = xpcall( SomethingError, ErrorManager );
print('[xpcall] SomethingError, response:', response);
cs
--실행결과
[pcall] Something, ERROR X
[pcall] SomethingError, ERROR O
[xpcall] Something, response:   true
argErr: d:\Projects-vsCode\testLua\ErrManager.lua:12: attempt to perform arithmetic on a string value (local 'param2')
[xpcall] SomethingError, response:      false

 

 

 

 

 

기타. 참조자료

 

Lua Tutorial

 

 

 

 

 

기타. 변경이력

 

일자

변경이력

2019-06-06

초안.

'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

JS ajax: jsonp  (0) 2019.10.27
루아: 기초정리(2)  (0) 2019.06.06
루아: 기초정리(1)  (0) 2019.05.26
HTML5: cocos2d-js 기초 (1)  (0) 2018.05.23
파이썬3: 기초정리(2)  (0) 2018.05.18
파이썬3: 기초정리(1)  (0) 2018.05.14

* 윈도우10(64bit), Lua 5.3.5.기반입니다.

루아: 기초정리(1)

루아: 기초정리(2)

루아: 기초정리(3)

 

 

 

 

 

0. 필요한 파일

 

파일명

예시 경로

VS Code   [#]

(기본경로)

Code runner [#]

//선택사항. 다용도로 해당 확장프로그램으로 선택한겁니다.

lua-5.3.5
lua-5.3.5 Win bin.zip

[#]  [#sourceforge/Tools Excutables]

D:\dev_lib\lua53
// 폴더내 lua53파일명을 lua로 변경

* 'Visual Studio Extension for Lua'는 VS 2015용

 

 

 

 

1. 환경설정

개발용 환경변수 설정(Path 설정) 참조

 

Microsoft Windows [Version 10.0.17763.503]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\Users\MTG>lua -v
Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio

 

 

 

 

 

기타. 참조

 

이것저것 :: Lua 스크립트 Visual Studio 개발 환경 구성

woogi :: Lua - 프로그램 실행

 

[Lua] 1강 - Visual Studio .. : 네이버블로그

 

 

 

 

기타. 변경이력

 

일자

변경이력

2019-05-26

초안 작성.

'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

JS ajax: jsonp  (0) 2019.10.27
루아: 기초정리(2)  (0) 2019.06.06
루아: 기초정리(1)  (0) 2019.05.26
HTML5: cocos2d-js 기초 (1)  (0) 2018.05.23
파이썬3: 기초정리(2)  (0) 2018.05.18
파이썬3: 기초정리(1)  (0) 2018.05.14






0. 필요한 파일


파일명

예시 경로

 cocos2d-x-3.16.zip

 [#]

 D:\dev_lib\cocos2d_3

 Python 2.7.15

 [#]

 C:\Python\Python27
> 환경병수 추가 필요
 apache-ant-1.10.3-bin
 [#]

 D:\dev_lib\apache-ant

 Android SDK
 [#]

 D:\dev_lib\android-sdk-windows

 android-ndk-r17-windows-x86_64.zip
 [#]
 D:\dev_lib\android_ndk






1. 환경설정


1
PS D:\dev_lib\cocos2d_3> ./setup.py
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Setting up cocos2d-x...
->Check environment variable COCOS_CONSOLE_ROOT
  ->Search for environment variable COCOS_CONSOLE_ROOT...
    ->COCOS_CONSOLE_ROOT not found
 
  ->Add directory "D:\dev_lib\cocos2d_3\tools\cocos2d-console\bin" into PATH succeed!
 
... ... ...
... ... ...
 
->Check environment variable NDK_ROOT
  ->Search for environment variable NDK_ROOT...
    ->NDK_ROOT not found
 
  ->Search for command ndk-build in system...
    ->Command ndk-build not found
 
  ->Please enter the path of NDK_ROOT (or press Enter to skip):D:\dev_lib\android_ndk
  -> Add NDK_ROOT environment variable...
    ->Added NDK_ROOT=D:\dev_lib\android_ndk
 
->Check environment variable ANDROID_SDK_ROOT
  ->Search for environment variable ANDROID_SDK_ROOT...
    ->ANDROID_SDK_ROOT not found
 
  ->Search for command android in system...
    ->Command android not found
 
  ->Please enter the path of ANDROID_SDK_ROOT (or press Enter to skip):D:\dev_lib\android-sdk-windows
  -> Add ANDROID_SDK_ROOT environment variable...
    ->Added ANDROID_SDK_ROOT=D:\dev_lib\android-sdk-windows
 
->Check environment variable ANT_ROOT
  ->Search for environment variable ANT_ROOT...
    ->ANT_ROOT not found
 
  ->Search for command ant in system...
    ->Command ant not found
 
  ->Please enter the path of ANT_ROOT (or press Enter to skip):D:\dev_lib\apache-ant\bin
cs






2. 샘플프로젝트


1
2
3
4
5
6
7
8
9
10
11
12
13
14
PS D:\workspace_html5> cocos new Tester.full -l js
Cocos collects data when the command-line tools are used for development. This data is examined in the aggregate only and is used to continually innovate and improve Cocos products. This data is anonymous and includes, but is not limited to, a unique hardware identifier, version number our software and information on which tools and/or services in Cocos products are being used and how they are being used. We take your privacy seriously and we do not share or sell any of this data. You can opt-out from sharing this data with us, but by sharing you help contribute to growth of Cocos.
 
Do you agree to sent the data? [Y]es, [N]o
n
> Copy template into D:\workspace_html5\Tester
> Copying directory from cocos root directory...
> Copying files from template directory...
> Copying Cocos2d-x files...
> Rename project name from 'HelloJavascript' to 'Tester'
> Replace the project name from 'HelloJavascript' to 'Tester'
> Replace the project package name from 'org.cocos2dx.hellojavascript' to 'org.cocos2dx.Tester'
> Replace the Mac bundle id from 'org.cocos2dx.hellojavascript' to 'org.cocos2dx.Tester'
> Replace the iOS bundle id from 'org.cocos2dx.hellojavascript' to 'org.cocos2dx.Tester'
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
PS D:\workspace_html5\Tester.full> cocos compile -p web -m release --advanced
Building mode: release
running: 'D:\dev_lib\apache-ant\bin\ant -f D:\workspace_html5\Tester.full\publish\html5\build.xml'
 
Unable to locate tools.jar. Expected to find it in C:\Java\jre1.8.0_121\lib\tools.jar
Buildfile: D:\workspace_html5\Tester.full\publish\html5\build.xml
 
compile:
   [jscomp] Compiling 157 file(s) with 42 extern(s)
   [jscomp] 0 error(s), 0 warning(s)
 
BUILD SUCCESSFUL
Total time: 9 seconds
cs






기타. 참조자료


HTML5 - 위키백과, 우리 모두의 백과사전


궁극의 잡 블로그 :: [cocos2d-x 3.0 rc0] 새로운 시작

How to compile Cocos2d-JS project into 1 minified file and publish to multi platform? - cocos2d-x / JavaScript - Cocos2d-x Forums







기타. 변경이력


일자

변경이력

2018-05-23

 초안.


'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

루아: 기초정리(2)  (0) 2019.06.06
루아: 기초정리(1)  (0) 2019.05.26
HTML5: cocos2d-js 기초 (1)  (0) 2018.05.23
파이썬3: 기초정리(2)  (0) 2018.05.18
파이썬3: 기초정리(1)  (0) 2018.05.14
PHP: 기초정리(1)  (0) 2015.04.06

* 윈도우10(64bit), 3.6.x기반입니다.


파이썬3: 기초정리(1)

파이썬3: 기초정리(2)

파이썬3: 기초정리(3)

파이썬3: 기초정리(4)






1. 자료형


* 파이썬에서 세미콜론은 생략이 가능하지만, 기존에 다른언어에서 쓰던 습관대로 사용했을뿐입니다.


1) 기본 자료형

① 숫자

1
2
3
4
>>> print(2+2);
4
>>> print(2+2.0);
4.0
cs


② 문자열

> 선언을 문자열로 했어도. var[2]처럼 인덱싱이 가능.

1
2
3
4
5
6
7
8
>>> abc = "123456 ";
>>> print(abc);
123456 
>>> defg = 'qwerty';
>>> print(defg);
qwerty
>>> print(abc+defg);
123456 qwerty
cs


③ bool

1
2
3
4
5
6
>>> 1 == 1
True
>>> 1 == 1.0
True
>>> 1 != 1.0
False
cs



2) 길이가 있는 자료형

① 리스트

> 중복값 가능, 순서보장O.

> 유용한 함수

: append(), sort(), reverse(), index(), insert(), remove((), pop(), count(), extend()

> enumerate로 리스트 원소를 하나씩 뽑아서 사용도 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
>>> datas = [];
>>> numbers = [2,0,1,8,5,15];
>>> datas.append("start");
>>> print(datas);
['start']
>>> datas.append(2018);
>>> print(datas);
['start'2018]
>>> datas.append(numbers);
>>> print(datas);
['start'2018, [2018515]]    #리스트 구성원에 자료형 통일필요X
>>> print(datas[0]);
start
>>> print(datas[1]);
2018
>>> print(datas[2]);
[2018515]
>>> print(datas[1:2]);
[2018]
>>> print(datas[0:2]);    #[idx:idx부터 몇번째 슬롯까지]
['start'2018]
>>> datas.clear();
>>> print(datas);
[]
cs


② 튜플(Tuple)

> 리스트를 상수처럼 사용하는 방식

> 중복값 허용, 순서보장O

> 인덱싱, 슬라이싱, 병합, 반복 가능.

> 유용한 함수

: union(), difference(), add(), update(), remove()

1
2
3
4
5
6
7
8
9
10
11
>>> data1 = ();
>>> data2 = ('new ',);    #오타가 아니고, 길이가 1인 경우 내부에서 콤마로 끝난다.
>>> data3 = ('normal''rare''SR''SSR');
>>> print(data2);
('new ',)
>>> print(data3);
('normal''rare''SR''SSR')
>>> print( data2[0]+data3[2] );
new SR
>>> print( data2+data3 );
('new ''normal''rare''SR''SSR')
cs


③ 집합

> 중복값 불가, 순서보장X. (순서가 무작위)

> 파이썬 2.3부터 지원되기 시작

1
2
3
4
5
6
7
8
9
10
11
12
>>> dataSet = set([]);        #CASE. 잘못된 집합선언
>>> dataSet;
set()
>>> dataSet = set([2,0,1,8,0,5,0,5]);        #CASE. 리스트(숫자)로 집합 선언
>>> dataSet;
{01258}
>>> dataSet2 = set("Hello world! & Saluton mondo!");    #CASE. 문자열로 집합 선언
>>> dataSet2;
{'e''H''!''a''w''t''o''n''r''d''l'' ''u''S''m''&'}
>>> dataSet2 = set(["Hello world! & Saluton mondo!"]);    #CASE. 리스트(문자)로 집합 선언
>>> dataSet2;
{'Hello world! & Saluton mondo!'}
cs


④ 딕셔너리

> key-value로 입출력

> key 중복불가, 순서보장X. (순서가 무작위)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> dataDic = {}   #빈 딕셔너리
>>> dataDic;
{}
>>> dataDic['abc'= 'QWERTYU'
>>> dataDic['ABC'= 'zxcvbnm'
>>> dataDic['abc'];
'QWERTYU'
>>> dataDic['ABC'];
'zxcvbnm'
>>> dataDic;
{'QWERTYU''zxcvbnm'}
>>> dataDic = {'word1':'word1 is something''world2':'it is not word1'}   #한번에 선언하는 방법
>>> dataDic = {'hair':'black''eyes':'brown''blood':'A'}
>>> dataDic.keys();
['hair''eyes''blood']
>>> dataDic.values();
['black''brown''A']
cs






2. 연산자


1) 연산자

 나누기(소수점)

/

예.

>>> print(7/2);

3.5

>>> print(8/2);

4.0

 나누기(정수)

//

예.

>>> print(7//2);

3

>>> print(8//2);

4

 제곱

**

 8 == 2 ^ 3 (C/C++ 및 JAVA등등)

   == 2 ** 3 (파이썬 스타일)

 그외.


 축약연산자 및 사칙연산자는 다른 언어와 동일.



2) 기타

 출력문 정렬

예시.

 %10s //문자열 10칸에서 우측정렬

 %-10s //문자열 10칸에서 좌측정렬

 %0.4f //소수점 4자리까지






3. 제어문


* 파이썬에는 switch-case문이 없습니다.


1) 조건문

> if-elfi문에는 조건문이 아닌 조건문 내용과 같은 깊이의 들여쓰기이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> idx = 2018;
>>> if idx == 2017:
...     print('정유年');
... elif idx == 2018:
...     print('무술年');
... else:
...     print('범위외');
... 
무술年
>>> idx2 = "this_is_string";
>>> if idx2 is 'this_is_string':
...     print('따옴표 조건문 블록');
... elif idx2 is "this_is_string":
...     print('쌍따옴표 조건문 블록');
... else:
...     print('범위외');
... 
따옴표 조건문 블록
cs



2) 순환문

① while문

1
2
3
4
5
6
7
8
9
10
11
12
>>> idx = 0;
>>> LIMIT = 5;
>>> while idx < LIMIT:
...     print(idx);
...     idx+=1;
...     pass;   #end, while idx < LIMIT:
... 
0
1
2
3
4
cs


② for문

> pass문?

: C/JAVA와 달리 {...}가 없는 형태라 블록이 끝나는 위치를 명시하는 용도로도 가능.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
>>> idx = 0;
>>> datas = [2,0,1,8,5,30];
>>> loopRange = range(1100);
>>> for idx in loopRange:
...     if (idx in datas) == False:
...         idx+=1;
...         #sample for continue
...         continue;
... 
...     print("----------");
... 
...     if idx in datas:
...         print(idx);
...         idx+=1;
...         pass;
...     print("==========");
...     pass;   #end, for idx in loopRange:
... 
----------
1
==========
----------
2
==========
----------
5
==========
----------
8
==========
----------
30
==========
cs



3) 에러처리

1
2
3
4
try
    # do-something
except ZeroDivisionError as err: 
    print(err);
cs






4. 함수와 클래스


1) 함수

> 함수끝에 pass가 아닌 [return resultVal;]을 쓰면 함수내에서 처리한 결과값을 호출한곳으로 사용가능.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> def SimpleLog():
...     print("This is simple print");
...     pass;
... 
>>> def ParameterLog(msg):
...     print("This is simple print [%d]" % msg);  #문자열이면 %s
...     pass;
... 
>>> def ComplicateLog(msg1, msg2):
...     print("This is %s print [%s]" % (msg1, msg2));
...     pass;
... 
>>> SimpleLog();
This is simple print
>>> ParameterLog(2018);
This is simple print [2018]
>>> ComplicateLog("Mess@ge"10);   #내부상, 자료형 변환이 자유로운편이라 가능.
This is Mess@ge print [10]
cs



2) 클래스

① 기본적인 사용: 선언, 메모리 삭제, 멤버함수 호출

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#   ===============================================================
#   클래스 정의
#   ===============================================================
class DevTool:
    def __init__(self):
        #생성자
        print("DevTool, called __init__()");
        pass;
    def __del__(self):
        #소멸자
        print("DevTool, called __del__()");
        pass;
 
    def SimpleLog(self):
        print("DevTool, This is simple print");
        pass;
 
    def SingleParameterLog(self, msg):
        print("DevTool, This is simple print [%d]" % msg);  #문자열이면 %s
        pass;
 
    def MultipleParameterLog(self, msg1, msg2):
        print("DevTool, __%s__   __%s__" % (msg1, msg2));
        pass;
    pass;   #end, class LogTool:
 
class DebugTool(DevTool):
    # LogTool클래스를 상속받은 자식클래스.
    def SimpleLog(self):
        #OOP. 오버라이드된 함수.
        #super().SimpleLog();   #기존함수 기능도 포함이 필요할 경우.
        print("DebugTool, This is simple print");
        pass;
    pass;
#   ===============================================================
 
 
_log = DevTool();   #자바 or C++식으로 하면 UsrObect usr_object = new UsrObect();
print("------------------------------");
_log.SimpleLog();
_log.SingleParameterLog(2018);
_log.MultipleParameterLog("saluton""mondo");
print("------------------------------\n");
del(_log);
cs

> 결과

1
2
3
4
5
6
7
8
9
DevTool, called __init__()
------------------------------
DevTool, This is simple print
DevTool, This is simple print [2018]
DevTool, __saluton__   __mondo__
------------------------------
 
DevTool, called __del__()
계속하려면 아무 키나 누르십시오 . . .
cs


② 객체지향

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#   ===============================================================
#   클래스 정의
#   ===============================================================
class DevTool:
    def __init__(self):
        #생성자
        print("DevTool, called __init__()");
        pass;
    def __del__(self):
        #소멸자
        print("DevTool, called __del__()");
        pass;
 
    def SimpleLog(self):
        print("DevTool, This is simple print");
        pass;
 
    def SingleParameterLog(self, msg):
        print("DevTool, This is simple print [%d]" % msg);  #문자열이면 %s
        pass;
 
    def MultipleParameterLog(self, msg1, msg2):
        print("DevTool, __%s__   __%s__" % (msg1, msg2));
        pass;
    pass;   #end, class LogTool:
 
class DebugTool(DevTool):
    # DevTool클래스를 상속받은 자식클래스.
    def __init__(self):
        #생성자
        print("DebugTool, called __init__()");
        pass;
 
    def SimpleLog(self):
        #OOP. 오버라이드된 함수.
        #super().SimpleLog();   #기존함수 기능도 포함이 필요할 경우.
        print("DebugTool, This is simple print");
        pass;
    pass;
#   ===============================================================
 
 
_log = DevTool();   #자바 or C++식으로 하면 UsrObect usr_object = new UsrObect();
print("------------------------------");
_log.SimpleLog();
_log.SingleParameterLog(2018);
_log.MultipleParameterLog("saluton""mondo");
print("------------------------------\n");
#del(_log);
 
_debug = DebugTool();
print("------------------------------");
_debug.SimpleLog();
_debug.SingleParameterLog(2018);
print("------------------------------\n");
cs

> 결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
DevTool, called __init__()
------------------------------
DevTool, This is simple print
DevTool, This is simple print [2018]
DevTool, __saluton__   __mondo__
------------------------------
 
DebugTool, called __init__()
------------------------------
DebugTool, This is simple print
DevTool, This is simple print [2018]
------------------------------
 
DevTool, called __del__()
DevTool, called __del__()
계속하려면 아무 키나 누르십시오 . . .
cs


③ 기타

> self

: JAVA의 this처럼 특정함수, 클래스내 변수를 명시하는 예약어(혹은 키워드)격.

: 클래스내 모든 함수의 첫번째 인자는 무조건 self이되, 인자가 있는 함수를 호출시 입력치 않음.

python self 설명 | grayfugitive



3) 가변인자 *args, **kwargs

> 함수를 정의해두면 콘센트처럼 정해준 규격으로 입력을 해야 하는데, 인자의 갯수가 고정이 되어 있기때문에 필요에 따라 인자만 다른 함수가 필요해질수도 있습니다. 이런 상황을 대응케 하는게 가변인자입니다.

> 간단히 정리하면, Asterisk(*)를 1개만 쓰면 튜플형태로, 2개를 쓰면 딕셔너리 형태로

> *args, **kwargs의 경우, 관용적으로 쓰이는 변수명이라고 함.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> def doSum(*args):
...     result = 0;
...     print(args);
... 
...     for i in args:
...         result += i;
... 
...     print(result);
... 
>>> pass;
>>> doSum(20);
(20,)        #함수에 가변인자를 넣으면 튜플로 처리되는걸 확인 가능.
20
>>> doSum(20,1,8);
(2018)
29
>>> doSum(20,1,8,6,5);
(201865)
40
cs


1
2
3
4
5
6
7
8
9
10
11
12
>>> tmp1, tmp2, *args = range(10);
>>> print(tmp1);
0
>>> print(tmp2);
1
>>> print(args);
[23456789]
>>> *args, tmp3 = range(10);    #가변변수에 나머지 값들이 다 들어간다.
>>> print(args);
[012345678]
>>> print(tmp3);
9
cs






5. 모듈과 패키지


1) 모듈

> 변수, 함수, 클래스가 정의되어 있는 소스코드 파일. 모듈로 파일을 분할하면 소스코드를 좀더 간결하게 하는데도 유용.

> 참조

뭉치 가져오기

여러가지 뭉치

# Utility.py

... ... ...

def SimpleLog(self):

print("This is simple print");

pass;

... ... ...

# Main.py

import Utility;   #모듈을 연동.

... ... ...

... ... ...

Utility.SimpleLog();   #연동된 모듈을 사용.

... ... ...



2) 패키지

> 모듈을 디렉토리 구조로 구성케함.

> 디렉토리별로 존재하는 __init__.py는 디렉토리가 패키지에 포함되게 처리한다. 단, 파이썬 3.3부터는 필수X

1
2
3
4
5
6
7
8
9
10
# 패키지 구성 예시.
src/data/__init__.py
   /data/ScoreTable.py
   /data/RandomRule.py
   ... ... ...
   /sprite/__init__.py
   /sprite/Stage.py
   /sprite/Character.py
   /sprite/Effect.py
   ... ... ...
cs

위와같은 패키지 구성일때, 코드에서 사용하려면 3가지 방식이 가능.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 패키지 사용법 1.
import src.data.ScoreTable
... ... ...
src.data.ScoreTable.XxxXxx();
 
 
# 패키지 사용법 2.
from src.data import ScoreTable
... ... ...
ScoreTable.XxxXxx();
 
 
# 패키지 사용법 3.
from src.data.ScoreTable import XxxXxx()
... ... ...
XxxXxx();
cs



3) 파일 입출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import os;
 
print">>  readline함수 활용." );
#txtFile = open('C:\Python\Python36\LICENSE.txt');
txtFile = open('C:\Python\Python36\LICENSE.txt''r');
print( txtFile.readline() );
print( txtFile.readline() );
print">>  ------------------------------------------------------------------" );
 
print">>  readlines함수 활용." );
txtFile = open('C:\Python\Python36\LICENSE.txt''r');
txtLines = txtFile.readlines();
idx = 0;
for line in txtLines:
    print(line);
    idx += 1;
    if idx==5:
        break;
        pass;
    pass;
txtFile.close();#readlines()후 반드시 close로 마무리.
print">>  ------------------------------------------------------------------" );
 
print">>  read함수 활용." );
txtFile = open('C:\Python\Python36\LICENSE.txt''r');
txtRead = txtFile.read();#파일 전체를 출력.
print(txtRead);
txtFile.close();#read()후 반드시 close로 마무리.
print">>  ------------------------------------------------------------------" );
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
>>  readline함수 활용.
A. HISTORY OF THE SOFTWARE
 
==========================
 
>>  ------------------------------------------------------------------
>>  readlines함수 활용.
A. HISTORY OF THE SOFTWARE
 
==========================
 
 
 
Python was created in the early 1990s by Guido van Rossum at Stichting
 
Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
 
>>  ------------------------------------------------------------------
>>  read함수 활용.
A. HISTORY OF THE SOFTWARE
==========================
 
Python was created in the early 1990s by Guido van Rossum at Stichting
Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands
as a successor of a language called ABC.  Guido remains Python's
principal author, although it includes many contributions from others.
... ... ...
... ... ...
cs






기타. 참조자료


프로그래머가 아닌 이들을 위한 파이썬 3 자습서/Hello, World - 위키책

점프 투 파이썬 - WikiDocs


파이썬: 기초정리 (2)


파이썬의 Asterisk(*) 이해하기 · mingrammer's note

전문가를 위한 파이썬 - 1 – WinterJ Blog






기타. 변경이력


일자

변경이력

2018-05-18

 초안

2018-06-05

 4. 3) 가변인자 *args, **kwargs  추가

'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

루아: 기초정리(1)  (0) 2019.05.26
HTML5: cocos2d-js 기초 (1)  (0) 2018.05.23
파이썬3: 기초정리(2)  (0) 2018.05.18
파이썬3: 기초정리(1)  (0) 2018.05.14
PHP: 기초정리(1)  (0) 2015.04.06
리눅스: catalina.out 백업 스크립트  (0) 2015.01.22

* 윈도우10(64bit), 3.6.x기반입니다.


파이썬3: 기초정리(1)

파이썬3: 기초정리(2)

파이썬3: 기초정리(3)

파이썬3: 기초정리(4)






0. 필요한 파일 & 예시경로


설치 및 예시경로

 Visual Studio Community 2017
 [#]
 (기본경로)

 PTVS[각주:1]

 (해당사항 없음)

 Python 3.x
 [#]

C:\Python\Python36
Python 3.6.5
개발용 환경변수 설정(Path 설정) 참조.


* 파이썬&이클립스 환경으로 하실경우, 아래의 링크를 참조하시면 됩니다. 참고로 JDK 1.7미만 버전에서는 PyDev가 정상적으로 잡히지 않습니다

Eclipse + PyDev 개발환경 구성 (Hello World!)






1. 프로젝트 생성



솔루션 하위구성입니다.

프로젝트 하위에 있는 폴더는 임의로 만든거라서 새로 생성한 프로젝트에는 없습니다.






기타. 읽을거리


파이썬 2.7 vs 파이썬 3 - 점프 투 파이썬

Python 3.5 미리보기: 무엇이 바뀌었고 무엇이 추가되었나?

Python의 미래, Python 3로 넘어가기

Automated Python 2 to 3 code translation

기타. 참고자료


Visual Studio에서 Python 작업 | Microsoft Docs

User’s Guide » Installation on Windows

[파이썬 기초] kivy 설치 : 네이버 블로그

Python Kivy / Designer 설치 (Windows cmd.exe)






기타. 변경이력


일자

변경이력

2018-05-14

 초안


  1. Python Tools for Visual Studio [본문으로]

'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

HTML5: cocos2d-js 기초 (1)  (0) 2018.05.23
파이썬3: 기초정리(2)  (0) 2018.05.18
파이썬3: 기초정리(1)  (0) 2018.05.14
PHP: 기초정리(1)  (0) 2015.04.06
리눅스: catalina.out 백업 스크립트  (0) 2015.01.22
파이썬: 무료 IDE  (1) 2014.12.09

 






0. 필요한 파일


파일명

예시 경로

 아파치

 httpd-2.2.22-win32-x86-openssl-0.9.8t.msi

 [#아카이브]

 C:\Apache

 php-5.4.25-Win32-VC9-x86.zip

 [#아카이브]

 C:\SDK_archive\php-Win32

 이클립스 EE [#]

 C:\eclipse_PHP

 PHP Development Tools(플러그인)

 (해당사항없음.)


이클립스+PDT 버전별 호환은 다음의 링크를 참조할수 있습니다.

PDT/Installation - Eclipsepedia




1. 환경설정


1) php.ini

php-Win32\php.ini-development 파일을

php-Win32\php.ini로 변경.


2) httpd.conf

C:\Apache\conf\httpd.conf내 맨 아랫줄등에서 아래와 같은 설정을 추가합니다.

1
2
3
4
5
6
7
#======================================================================
ScriptAlias /php/ "C:\SDK_archive\php-Win32\"
Action application/x-httpd-php "C:\SDK_archive\php-Win32\php-cgi.exe"
PHPIniDir "C:\SDK_archive\php-Win32\"
LoadModule php5_module "C:\php-Win32\php5apache2_2.dll"
AddType application/x-httpd-php .php5 .php4 .php .html .htm .inc .php3 .phtml .phps
#======================================================================


3) 이클립스

012


4) 테스트

http://localhost/로 아파치 실행을 확인후

1
2
3
4
<?php
    echo "1234";
    phpInfo();
?>
cs

위의 코드로 php파일을 C:\Apache\htdocs에 저장하고

http://localhost/test.php등으로 PHP 작동도 마저 확인합니다.




기타. 참조자료


PHP 1인 개발 환경 만들기 : 이클립스, PDT, Formatter, XDebug, RSE | RUNean

막무가내 Lab. :: PHP - 이클립스를 이용한 PHP 개발환경(PDT) 구축






기타. 변경이력


일자

변경이력

2015-05-04

 초안


'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

파이썬3: 기초정리(2)  (0) 2018.05.18
파이썬3: 기초정리(1)  (0) 2018.05.14
PHP: 기초정리(1)  (0) 2015.04.06
리눅스: catalina.out 백업 스크립트  (0) 2015.01.22
파이썬: 무료 IDE  (1) 2014.12.09
ANE: 안드로이드용 AIR 개발설정  (0) 2013.11.28

[#출처: Free Image on Pixabay]


* 레드햇7에서 작업했습니다.






1. 스크립트 작성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/sh
 
echo shell start `date +%Y-%m-%d`
echo catalina.out backup start
 
TOMCAT_LOG=/usr/local/apache-tomcat-7.0.56/logs
BACK_DIR=/data/tomcat
DATE=`date +%Y_%m_%d`
 
#백업경로 확인 및 생성
if [ ! -d $BACK_DIR/catalina.out ]
then
mkdir $BACK_DIR/catalina.out
fi
 
#파일 복사 및 catalina.out 초기화
cp $TOMCAT_LOG/catalina.out $BACK_DIR/catalina.out.$DATE
cat /dev/null > $TOMCAT_LOG/catalina.out
 
echo catalina.out backup end
echo shell end `date +%Y-%m-%d`

backup_tomcat.sh

./backup_tomcat.sh 혹은 sh backup_tomcat.sh등으로 작동을 확인해둡니다.






2. 적용


1
2
3
[root]# chmod 777 backup_tomcat.sh
[root]# mv backup_tomcat.sh /etc/cron.daily/backup_tomcat.sh
            (or) /etc/cron.monthly






참조.


Tomcat Server Log (catalina.out) 를 shell 프로그램으로 백업하자





기타. 변경이력


일자

변경이력

2015-01-22

 초안 작성.

'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

파이썬3: 기초정리(1)  (0) 2018.05.14
PHP: 기초정리(1)  (0) 2015.04.06
리눅스: catalina.out 백업 스크립트  (0) 2015.01.22
파이썬: 무료 IDE  (1) 2014.12.09
ANE: 안드로이드용 AIR 개발설정  (0) 2013.11.28
파이썬: 기초정리 (4)  (0) 2013.05.26






IDE별 주요 특징


 Emacs

 GPLv3

 EmacsEditor - Python Wiki [#링크]

 Eric (Eric Python IDE)

 GPLv3

 The Eric Python IDE - Screenshots [#링크]
 아이콘 에디터 기능도 있다고 한다.
 설치법을 보면, CMD에서 별도로 명령어 입력해야 하는것 같다.

 IDLE

 (PSF license?)

 매뉴얼(영문) [#링크]

 Komodo IDE

 Proprietary

 라이센스별 구성 [#링크]

 상업적 이용(Commercial Use)시, Enterprise나 Personal 라이센스 필요

 파생버전격인 Komodo Edit는 통합 디버거 기능만 빠져 있다고 한다.

 NetBeans

 GPLv2

 플러그인 설치 및 다운로드 [#링크]

 PyCharm

 Apache 2.0

 라이센스별 구성표 [#링크]

 Open Source license의 경우 비상업적 용도 및 오픈 소스 프로젝트에 가능.

 Community Edition이 무료버전

 PyDev (Eclipse plugin)

 EPL

 공식 홈페이지에도 명시됐지만, 사용하는 PC에 JDK 1.7이상이 있어야 한다.

 PyScripter MIT 라이센스

 윈도우용만 있다.

 automatically installed by Python 2.6 and Python 3.x

 설치없이 압축파일만 해제해서 쓰는 버전도 있다.(86비트)






기타.참고자료.


What IDE to use for Python? - Stack Overflow

PythonEditors - Python Wiki

10 Free Python IDE for Windows

Comparison of Python IDEs for Development | Python Central

Choosing the Best Python IDE - Pedro Kroger


라이선스 비교표 - OLIS

MIT 허가서 - 위키백과, 우리 모두의 백과사전






기타. 변경이력


일자

변경이력

2014-12-09

 초안


'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

PHP: 기초정리(1)  (0) 2015.04.06
리눅스: catalina.out 백업 스크립트  (0) 2015.01.22
파이썬: 무료 IDE  (1) 2014.12.09
ANE: 안드로이드용 AIR 개발설정  (0) 2013.11.28
파이썬: 기초정리 (4)  (0) 2013.05.26
파이썬: 기초정리 (3)  (0) 2013.05.18
  1. Favicon of https://myspace.com/salecanoe49 BlogIcon glinhaus 2020.11.18 17:11

    유용한 내용 잘 보고 가용~






0. 필요한 파일


파일명

예시 경로

 JDK(Java Developement Kit) SE

 C:\Java\jdk1.7

 이클립스

 C:\eclipse

 안드로이드 android-sdk

 C:\android-sdk-windows
 안드로이드 개발 툴킷(ADT)

 (이큽립스 플러그인)

 플래시 빌더

 C:\Program Files\Adobe\Adobe Flash Builder 4.6

 FlashRuntimeExtensions.jar

(xocode에서는 FlashRuntimeExtension.h)

 (이클립스 프로젝트)\lib\FlashRuntimeExtensions.jar

(4.6기준으로 C:\Program Files\Adobe\Adobe Flash Builder 4.7\sdks\4.6.0\lib\android에서 찾아볼수 있습니다.)






0. 설치하기 & 기본세팅

 

안드로이드: 개발환경 구축 참조.






1. 네이티브 코드, 이클립스


① 클래스 작성

->총 3가지 종류의 클래스가 필요하다.

xxxExtension

 xxxContext

 xxxFunction

 1개만 필요.

 xxxContext를 상속한 객체 반환

 1개만 필요.

 getFunctions()에서 as에 연동할 함수명을 문자열로 지정. (함수에 태그명 붙이기?)

 1개 이상 생성 가능.

 call함수에서 사용하고자 하는 순수 안드로이드 기능등을 구현.

... ... ...

public class NativeExtension implements FREExtension
{
   public static NativeContext _context = null;

   @Override
   public FREContext createContext(String arg0)
   {

      if (context  == null)

         _context  = new NativeContext();

      return _context;
   }

... ... ...

   (xxxFunction에서 사용할 함수)

... ... ...
   @Override
   public void dispose()
   {
      context.dispose();
      context = null;
   }

   @Override
   public void initialize()   {    }
}

... ... ...

public class NativeContext extends FREContext implements ...
{
... ... ...

... ... ...
    @Override
    public void dispose()   {   }

    @Override
    public Map<String, FREFunction> getFunctions()
    {
        Map<String, FREFunction> funcMap = new HashMap<String, FREFunction>();
        functionMap.put("androidToast",    new NativeFunc1());
... ... ...
        return funcMap;
    }
}








... ... ...

public class NativeFunc1 implements FREFunction
{
   @Override
   public FREObject call(FREContext cont, FREObject[] arg1)
   {
      FREObject result = null;
      ... ... ...
      NativeExtension._context.

      ... ... ...
      return null;
    }
}
















② JAR export


③ JAR파일 편집.

안드로이드 API함수말고 jat로 된 외부라이브러리를 사용해야 할 경우,

(FlashRuntimeExtensions.jar 제외)대상이 되는 라이브러리 파일을 압축해제(파일명 경로 생성X / 그냥풀기O)를 하고 해당 폴더와 방금 export시킨 jar파일을 같은 폴더 경로에 넣고 CMD등으로 [jar -uf]명령어를 사용합니다.

예. jar -uf text.jar unzipedFolder

(META-INF는 안 해도 무관한거 같습니다.)






2. 플래시 빌더


!!!주의사항!!!

프로젝트 생성시, Library Project를 확인해야 합니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//  (프로젝트 폴더)\src\air\analoggreen\AndroidLibrary.as
package air.analoggreen
{
    import flash.events.Event;
    import flash.events.EventDispatcher;
    import flash.events.StatusEvent;
    import flash.external.ExtensionContext;
 
    public class AndroidLibrary extends EventDispatcher
    {
        private static var context:ExtensionContext = null;
        private var errStr:String;
        
        public function ExtensionAPI()
        {
            if(context == null)
                context = ExtensionContext.createExtensionContext("air.analoggreen.AndroidLibrary"null);
        }
 
        public function getAndroidAPI(command:int, msgArr:Array=null):void
        {
            context.addEventListener(StatusEvent.STATUS, onStatus);
            
            if(command == 0)        {    context.call("androidToast",    msgArr);    }
            else if(command == 1)    {    context.call("androidVibrate", msgArr);        }
            else if(command == 2)    {    context.call("androidAlert",     msgArr);    }
            ... ... ...
        }
        
        private function onStatus(e:StatusEvent):void
        {
            dispatchEvent(new Event(e.code));
            context.removeEventListener(StatusEvent.STATUS, onStatus);
        }
    }
}


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!--  (프로젝트 폴더)\bin\extension.xml -->
<extension xmlns="http://ns.adobe.com/air/extension/3.1">
    <id>air.analoggreen.AndroidLibrary</id>
    <versionNumber>1</versionNumber>
    <platforms>
        <platform name="Android-ARM">
            <applicationDeployment>
                <nativeLibrary>androidNative.jar</nativeLibrary>
                <!-- 네이티브 코드 패키지경로 -->
                <initializer>com.analoggreen.androidNative</initializer>
                <finalizer>com.analoggreen.androidNative</finalizer>
            </applicationDeployment>
        </platform>
    </platforms>
</extension>






3. ANE빌드

 

플래시 빌더에서 빌드하면 필요한 ANE파일이 생성될테지만, 에러가 빈번해서 BAT을 이용한 수 빌드 방식을 사용했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
: (프로젝트 폴더)\create_ane.bat
set adt_directory=C:\Program Files\Adobe\Adobe Flash Builder 4.6\sdks\4.6.0\bin
set root_directory=C:\workspace-flash\Adobe Flash Builder and ANE
set library_directory=%root_directory%\androdiANE
set native_directory=%root_directory%\androidAne\lib
set signing_options=-storetype pkcs12 -keystore "C:\workspace\androidANE\cret.p12" -tsa none
set dest_ANE=AndroidANE.ane
set extension_XML=%native_directory%\extension.xml
set library_SWC=%library_directory%\AndroidLibrary.swc
 
"%adt_directory%"\adt -package %signing_options% -target ane "%dest_ANE%" "%extension_XML%" -swc "%library_SWC%" -platform Android-ARM -C "%native_directory%" .
 
pause






4. 액션스크립트

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package
{
    import air.analoggreen.AndroidLibrary;
     
    import flash.display.Sprite;
    import flash.events.Event;
     
    public class ANE_test extends Sprite
    {
        private var andLib:AndroidLibrary;
 
        public function TestToast()
        {
            super();
            andLib:AndroidLibrary = new andLib:AndroidLibrary();
            ... ... ...
        }
 
        private function onClick(e:Event):void
        {
            andLib.getAndroidAPI(0new Array("test_for_toast"));
            andLib.getAndroidAPI(1);
            ... ... ...
        }
    }
}
 
cs





기타. 참고자료


YeonMee's Tistory :: ANE 관련 정리 자료

남자는 코딩 :: AIR Native Extension - ANE 만들기 for Android

Adobe Flash Builder 4.5 - AIR로 iOS, 안드로이드 어플을 개발하자. -지돌스타 - 쿠키랩 블로그-

일자

변경이력

2013-11-28

 초안

'프로그래밍note > 스크립트 계열' 카테고리의 다른 글

리눅스: catalina.out 백업 스크립트  (0) 2015.01.22
파이썬: 무료 IDE  (1) 2014.12.09
ANE: 안드로이드용 AIR 개발설정  (0) 2013.11.28
파이썬: 기초정리 (4)  (0) 2013.05.26
파이썬: 기초정리 (3)  (0) 2013.05.18
파이썬: 기초정리 (2)  (0) 2013.05.08

+ Recent posts