2012년 8월 14일. Adobe® Flash Player® 11.3 및 AIR® 3.3입니다. 이 릴리스에는 일반 안정성, 오디오, 비디오 및 iOS 응용 프로그램 개발과 관련된 버그 픽스가 포함되어 있습니다.

현재 런타임 릴리스 버전

  • Flash Player 데스크톱 11.3.300.271

새로운 기능

 해당 없음

보안 향상

이 릴리스는 Security Bulletin APSB12-18에 나열된 보안 개선 사항으로 구성되어 있습니다.

수정된 문제

해당 없음

알려진 문제

  • Flash 컨텐츠를 스트리밍할 때의 오디오 왜곡 문제(3212648)

Flash Player 11.3용 내용 저작

새로운 Flash Player를 사용하려면 Flex 컴파일러에 -swf-version=16이라는 추가 컴파일러 인수를 전달하여 SWF 버전 16을 대상으로 지정해야 합니다. 자세한 방법은 아래와 같습니다.
Adobe Flex SDK를 사용하는 경우:

  • Flash Player 11.3용 새 playerglobal.swc를 다운로드합니다.
  • Flex 4.5 SDK 표에서 Flex 4.5.1 SDK(4.5.1.21328)를 다운로드합니다.
  • Flash Builder에서 새 ActionScript 프로젝트를 만듭니다(파일 -> 새로 만들기 -> ActionScript 프로젝트).
  • [속성] 패널을 엽니다(마우스 오른쪽 버튼을 클릭하고 '속성' 선택). 왼쪽의 목록에서 [ActionScript 컴파일러]를 선택합니다.
  • 오른쪽 상단에 있는 'Flex SDK 구성' 옵션을 사용하여 프로젝트가 Flex 빌드 21328를 가리키도록 지정합니다. [확인]을 클릭합니다.
  • SWF 버전 16을 대상으로 하도록 프로젝트를 구성합니다.
  • '추가 컴파일러 인수' 입력에 -swf-version=16을 추가합니다. 그러면 SWF 버전 16을 대상으로 하는 SWF가 출력됩니다. Flash Builder가 아니라 명령줄에서 컴파일할 경우에도 동일한 컴파일러 인수를 추가해야 합니다.
  • 브라우저에 새 Flash Player 11.3 빌드를 설치했는지 확인합니다.

AIR 3.3용 제작

AIR 3.3 네임스페이스로 업데이트
새로운 AIR 3.3 API와 비헤이비어에 액세스하려면 응용 프로그램 설명자 파일을 3.3 네임스페이스로 업데이트해야 합니다. 응용 프로그램에 새로운 AIR 3.3 API와 비헤이비어가 필요하지 않은 경우 네임스페이스를 업데이트하지 않아도 됩니다. 그러나 새로운 3.3 기능을 아직 활용하지 않더라도 모든 사용자가 AIR 3.3 네임스페이스 사용을 시작하는 것이 좋습니다. 네임스페이스를 업데이트하려면 응용 프로그램 설명자에서 xmlns 특성을 다음으로 변경하십시오.

<application xmlns="http://ns.adobe.com/air/application/3.3">

기능 사용 지침

전체 화면 키보드 입력
키가 있는 전체 화면 모드를 활성화하려면 새로운 / 태그 매개 변수인 allowFullScreenInteractive를 포함 HTML에 추가해야 합니다. 이 매개 변수는 기본적으로 false입니다. 즉, 키가 있는 전체 화면을 허용하지 않습니다. 키가 있는 전체 화면을 허용하려면 allowFullScreenInteractive를 "true"로 설정하고 아래와 같이 태그를 지정하십시오.

<object classid=”"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,18,0"
 width="600"  height="400" id="fullScreen" align="middle">

   <param name=”allowFullScreenInteractive” value=”true” />
   <param name=”movie” value=”fullScreenInteractive.swf” />

   <embed src=”fullScreen.swf” allowFullScreen=”true” width=”600” height=”400” name=”fullScreen” align=”middle” type=”application/x-shockwave-flash” pluginspage=”http://get.adobe.com/flashplayer/” />

</object>

이 기능은 아래와 같이 mms.cfg에서 FullScreenInteractiveDisable = 1을 설정함으로써 비활성화할 수 있습니다.

FullScreenInteractiveDisable=1 

관련 ActionScript API:

flash.display.Stage.getAllowsFullScreenInteractive();
flash.display.StageDisplayState
flash.events.FullScreenEvent

텍스처 스트리밍

텍스처 스트리밍은 먼저 거칠고 품질이 낮은 텍스처를 로드한 후, 사용 가능한 데이터가 증가함에 따라 점진적으로 텍스처를 향상시킬 수 있는 Stage3D의 새로운 기능입니다.

function createCubeTexture( size:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int=0):CubeTexture
function createTexture( width:int, height:int, format:String, optimizeForRenderToTexture:Boolean, streamingLevels:int=0 ):Texture;

추가적인 선택적 매개 변수인 streamingLevels가 createTexture 및 createCubeTexture 함수에 추가되었습니다. 이 매개 변수가 0이 아닌 경우에는 이 텍스처에 대해 스트리밍이 활성화됩니다. 최대값은 2D 텍스처에 대해 log2(max(width, height)), 정육면체 맵 텍스처에 대해 log2(size)입니다. 이보다 값이 더 큰 경우에는 텍스처 생성이 실패하고 ActionScript 오류 예외가 발생합니다. 스트리밍을 활성화하는 텍스처는 텍스처를 렌더링하는 데 사용될 수 없으며, 해당 optimizeForRenderToTexture 플래그는 무시됩니다.

스트리밍용으로 활성화된 텍스처는 최대 50%의 추가 크기까지 메모리에서 잠재적 페널티를 받으며, 잠재적인 업로드 속도 페널티도 있습니다. 텍스처가 완전히 로드된 후에는 다른 컨텐츠와 함께 다시 스트리밍될 수 없습니다. 텍스처가 스트리밍으로 표시된 경우에는 streamingLevels 값 이상의 모든 mip 레벨이 업로드될 때 완료되고 렌더링 준비가 된 것으로 간주됩니다. 텍스처 업로드는 변경되지 않습니다.

예제:

[Embed( source = "MipLevel9.jpg" )]
var MipLevel9:Class;
var context3D:Context3D;
var texture:Texture;

stage.stage3Ds[0].addEventListener(Event.CONTEXT3D_CREATE, createdHandler);
stage.stage3Ds[0].requestContext3D(Context3DRenderMode.AUTO);

function createdHandler(e:Event) {
            context3D = stage.stage3Ds[0].context3D;
            //set streaming levels to 9, a 1x1 mip level for a complete texture size of 512 (Mip level 0 =512, Mip level 9 = 1)
            texture = context3D.createTexture(512,512,Context3DTextureFormat.BGRA,false, 9);
            var mip9:Bitmap = new MipLevel9();
            texture.uploadFromBitmapData(mip9.bitmapData,9);
}


BitmapData.drawWithQuality
과거에는 BitmapData.draw의 품질을 변경하려면 스테이지 품질을 수정해야만 했습니다. BitmapData. drawWithQuality는 벡터 렌더링의 품질을 지정하기 위한 선택적 매개 변수를 추가하는 BitmapData.draw의 확장입니다.

function drawWithQuality(source: IBitmapDrawable, matrix:Matrix=null, colorTransform: ColorTransform =null, blendMode:String=null, clipRect:Rectangle=null, smoothing:Boolean=false, quality:String=null): void

지원되는 품질 값은 다음과 같습니다.

  • StageQuality.LOW
  • StageQuality.MEDIUM
  • StageQuality.BEST
  • StageQuality.HIGH_8X8_LINEAR
  • StageQuality.HIGH_16X16
  • StageQuality.HIGH_16X16_LINEAR

BitmapData.encode


BitmapData.encode를 사용하면 BitmapData 객체를 PNG, JPEG 및 JPEG XR로 기본적으로 압축할 수 있습니다. 따라서 개발자가 런타임 이미지 압축의 속도를 크게 높일 수 있으므로 휴대 장치에서 매우 유용합니다.

function encode(rect:Rectangle,EncoderOptions :Object, byteArray: ByteArray = null): ByteArray;
지원되는 EncoderOptions 객체는 다음과 같습니다.

// compress bitmap data as a JPEG file
var bitmapData:BitmapData = new BitmapData(640,480,false,0x00FF00);
var byteArray:ByteArray = new ByteArray();
bitmapData.encode(new Rectangle(0,0,640,480), new JPEGCompressOptions(), byteArray);
// Display the bitmap we just encoded
var loader:Loader = new Loader();
loader.loadBytes(byteArray);
addChild(loader); 

Context3D.driverinfo의 HW 오류 문자열

이 기능은 Stage3D 컨텐츠를 하드웨어 가속화할 수 없을 때 Context3D.driverInfo에 있는 정보를 제공합니다. Context3D.driverInfo에는 Stage3D가 소프트웨어로 폴백하는 이유를 설명하는 다음 문자열 중 하나가 포함됩니다.

  • Software Hw_disabled=userDisabled

설정 UI에 있는 HW 가속화 설정 확인란이 비활성화되고 Stage3D가 소프트웨어를 사용하여 렌더링됩니다.

  • Software Hw_disabled=oldDriver

알려진 문제로 인해 HW 그래픽 드라이버가 차단되고 Stage3D가 소프트웨어를 사용하여 렌더링됩니다. 드라이버를 업데이트함으로써 수정됩니다.

  • Software Hw_disabled=unavailable

드라이버의 용량 때문에, 일반적인 차단 때문에 또는 기타 HW 그래픽 초기화 오류 때문에 하드웨어 렌더링을 사용할 수 없으며 Stage3D가 소프트웨어를 사용하여 렌더링됩니다.

  • Software Hw_disabled=explicit

컨텐츠가 requestContext3D를 통해 명시적으로 렌더링하는 소프트웨어를 요청하며 Stage3D가 소프트웨어를 사용하여 렌더링됩니다.


종횡비 개선

AIR 3.3에서는 지정된 종횡비를 런타임이 무시하는 문제가 해결되었습니다. aspectRatio가 설정되어 있고 autoOrients가 true인 경우 스테이지 방향이 장치 회전을 통해 두 개의 방향으로만 제한됩니다(종횡비 값에 따라 가로-왼쪽 및 가로-오른쪽 방향이나 세로 및 세로-위-아래 방향이 지원됨).

ANY라는 이름의 새로운 StageAspectRatio 상수가 추가되었습니다. StageAspectRatio.ANY는 autoOrients가 true로 설정되어 있을 때 모든 장치 방향에서 자동 스테이지 방향을 달성하는 데 사용될 수 있습니다. 이것은 응용 프로그램 설명자에 aspectRatio 태그가 없을 때의 기본 비헤이비어입니다.

AIR iOS용 USB 디버깅
먼저, 추가적인 -listen 스위치를 사용하여 응용 프로그램을 패키징함으로써 응용 프로그램이 시작 시 fdb 연결을 수신 대기하도록 하십시오.

adt -package -target (ipa-debug-interpreter | ipa-debug) -listen (port number optional) -provisioning-profile xyz.mobileprovision -storetype pkcs12 -keystore Certificates.p12 -storepass pass123 OutputFile.ipa InputFile-app.xml InputFile.swf

기본적으로 응용 프로그램은 포트 7936에서 수신 대기합니다. 원하는 포트를 지정할 수 있습니다.

adt -package -target (ipa-debug-interpreter | ipa-debug) -listen 16000 xyz.mobileprovision -storetype pkcs12 -keystore Certificates.p12 -storepass pass123 OutputFile.ipa InputFile-app.xml InputFile.swf

2) 응용 프로그램을 ipa로 패키징한 후에 장치에서 설치하고 시작합니다.

3) -devices를 매개 변수로 하여 idb 이진 가능 @ SDK_LOCATION/lib/aot/idb를 실행합니다. 데스크톱에 연결된 장치 목록과 해당 DEVICE_HANDLES가 반환됩니다.

idb -devices

4) 이제 연결을 수신 대기 중인 장치의 포트에 데스크톱의 일부 포트를 전달해야 합니다.

idb -forward LOCAL_PORT REMOTE_PORT DEVICE_HANDLE

이 LOCAL_PORT는 데스크톱에 있는 포트를 나타냅니다. 원하는 어느 포트 번호나 가능하지만, 8000보다 큰 것이 좋습니다.

REMORT_PORT는 패키징 명령에서 명시한 포트 번호입니다. 패키징하는 동안 포트 번호를 명시하지 않은 경우에는 기본적으로 응용 프로그램이 포트 7936에서 수신 대기합니다.

장치의 DEVICE_HANDLE은 3단계에서 얻은 정보입니다.

5) 이제 다음 명령을 사용하여 fdb를 시작합니다.

fdb -p LOCAL_PORT

6) fdb 디버거가 시작됩니다. 명령줄에 'r'을 입력하여 디버깅 세션을 시작합니다.

참고: idb는 포트 전달을 중지하는 데 사용할 수 있는 'stopforward'라는 다른 매개 변수를 제공합니다. 하지만 이 매개 변수는 fdb 세션이 설정되기 전까지만 작동합니다.

idb -stopforward LOCAL_PORT

현재 이 기능은 Flash Builder에서 지원되지 않습니다.

AIR iOS용 강화된 백그라운드 비헤이비어
이제 백그라운드 지원이 iOS에 있는 기본 응용 프로그램과 더욱 비슷합니다. AIR for iOS에서 이미 활성화된 몇 가지 기본적인 멀티태스킹 및 백그라운드 오디오 지원 외에도 이제 응용 프로그램은 백그라운드에서 위치 업데이트 및 네트워킹을 지원하는 것은 물론 백그라운드 응용 프로그램이 운영 체제에 의해 일시 중지되기 직전에 알림을 받을 수도 있습니다.
이를 위해 몇 가지 새로운 태그와 이벤트가 추가되었습니다. 백그라운드에서 위치 업데이트를 지원하기 위해 AIR 응용 프로그램 설명자에서 iPhone 태그에 다음을 포함시키십시오.

<iPhone>
<InfoAdditions>
<![CDATA[
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
]]>
</InfoAdditions>
</iPhone> 

응용 프로그램이 이 태그를 지정하고 백그라운드로 전환되는 경우 플레이어는 계속해서 4fps로 실행됩니다. 하지만 모든 화면 업데이트(렌더링 호출, OpenGL 호출)는 비활성화됩니다.
응용 프로그램에서 동시에 오디오를 생성하고 위치를 추적해야 하는 경우(예: 턴바이턴 내비게이션 응용 프로그램) UIBackgroundModes 키는 "위치"와 "오디오"를 동시에 지원합니다.
iOS는 짧은 백그라운드 작업을 실행하기 위한 메커니즘을 제공합니다. 하지만 iOS는 작업이 실행될 것임을 보장하지는 못하며, 사용자를 위해 조금 더 오랜 시간 동안 작업을 처리할 것까지만 보장합니다. 이러한 백그라운드 작업이 응용 프로그램을 실행 상태로 유지하는 시간에 제한이 있습니다.(약 10분)

용용 프로그램 제작자가 executeInBackground 속성을 TRUE/FALSE로 지정하면 해당 값이 선택되고 응용 프로그램이 그에 맞게 작동합니다. 현재는 응용 프로그램이 백그라운드로 이동할 때 응용 프로그램이 일시 중지되었는지 여부에 관계없이 비활성화 이벤트가 시작됩니다. 응용 프로그램에 보다 구체적인 정보를 제공하기 위해 응용 프로그램이 일시 중지되려고 할 때는 응용 프로그램에 일시 중지 이벤트가 전달되어 적절한 응용 프로그램 비헤이비어를 지원합니다.
iOS에서는 배터리 수명을 보존하기 위해 응용 프로그램이 백그라운드 실행을 선택할 때마다 플레이어의 속도가 제한됩니다(4fps).

시뮬레이터 지원
iOS의 시뮬레이터는 x86이므로 이를 위해 ADT에서 두 개의 새로운 대상이 추가되었습니다. 시뮬레이터에 대한 패키징은 인터프리터 모드에서만 지원됩니다.

대상은 다음과 같습니다.

1.) ipa-test-interpreter-simulator
2.) ipa-debug-interpreter-simulator

시뮬레이터에서 응용 프로그램 테스트를 시작하기 위해 Apple로부터 개발자 인증서를 받거나(이 프로세스에 시간이 오래 걸림), AIR 응용 프로그램 개발을 시작하기 전에 프로비저닝 프로파일을 만들 필요가 없습니다. (사용자가 직접 만들 수 있는 p12 인증서만으로 충분합니다.)

시뮬레이터용 응용 프로그램을 패키징하려면 다음 명령을 실행하십시오.

인터프리터 대상

adt -package -target ipa-test-interpreter-simulator -storetype pkcs12 -keystore Certificates.p12 -storepass password Sample_ipa_name sample_ipa-app.xml sample_ipa.swf

디버그 대상

adt -package -target ipa-debug-interpreter-simulator -storetype pkcs12 -keystore Certificates.p12 -storepass password Sample_ipa_name sample_ipa-app.xml sample_ipa.swf

*시뮬레이터에서 응용 프로그램을 설치하려면 *

adt -installApp -platform ios -platformsdk (path to sdk like /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk) -device ios-simulator -package Sample_ipa_name.ipa

*시뮬레이터에서 응용 프로그램을 시작하려면 *

adt -launchApp -platform ios -platformsdk (path to sdk like /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk) -device ios-simulator -appid

Sample_ipa_name

시뮬레이터에서 기본 확장을 테스트할 수 있도록 새로운 플랫폼 이름(iPhone-x86) 지원이 extension.xml에 추가되었습니다.
기본 확장을 패키징하기 위한 모든 명령은 그대로 유지되지만 XCode에 필수적인 library.a 파일이 시뮬레이터 전용으로 컴파일되어야 합니다.

extension.xml은 다음과 같은 모습입니다.

<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>com.cnative.extensions</id>
<versionNumber>1</versionNumber>
<platforms>
<platform name="iPhone-x86">
<applicationDeployment>
<nativeLibrary>library.a</nativeLibrary>
<initializer>TestNativeExtensionsInitializer </initializer>
<finalizer>TestNativeExtensionsFinalizer </finalizer>
</applicationDeployment>
</platform>
</platforms>
</extension>

시스템 요구 사항

최신 Flash Player 시스템 요구 사항은 http://www.adobe.com/kr/products/flashplayer/systemreqs/를 참조하십시오.

최신 AIR 시스템 요구 사항은 http://www.adobe.com/kr/products/air/systemreqs/를 참조하십시오.

Flash Access 시스템 요구 사항(클라이언트 및 서버)은 http://www.adobe.com/kr/products/flashaccess/systemreqs/를 참조하십시오.

Flash Player 11.3 최소 시스템 요구 사항:

 

Windows®

Macintosh  

프로세서

2.33 Ghz 이상의 x86 호환 프로세서 또는 넷북급 장치의 경우 Intel® Atom™ 1.6GHz 이상 프로세서

Intel® Core™  Duo 1.83GHz 이상 프로세서

운영 체제 

Microsoft® Windows® XP(32비트), Windows Server® 2003(32비트), Windows Server® 2008(32비트), Windows Vista®(32비트), Windows 7®(32비트 및 64비트)

Mac OS® X 10.6 및 Mac OS X 10.7

브라우저

Internet Explorer 7.0 이상, Mozilla Firefox 4.0 이상, Google Chrome, Safari 5.0 이상, Opera 11

Safari 5.0 이상, Mozilla Firefox 4.0 이상, Google Chrome, Opera 11

메모리

128MB RAM(넷북급 장치의 경우 1GB RAM 권장), 128MB 그래픽 메모리

256MB RAM, 128MB 그래픽 메모리

AIR 3.3 최소 시스템 요구 사항:

 

Windows®

Macintosh  

AndroidTM

iOS

프로세서/장치 하드웨어

2.33GHz 이상의 x86 호환 프로세서 또는 넷북급 장치의 경우 Intel Atom™ 1.6GHz 이상 프로세서

Intel® Core™  Duo 1.83GHz 이상 프로세서

Vector FPU, 550MHz 이상, OpenGL ES2.0, H.264 & AAC 하드웨어 디코더가 탑재된 ARMv7 프로세서

iPod touch(3세대) 32GB 및 64GB 모델, iPod touch 4, iPhone 3GS, iPhone 4, iPad, iPad 2

운영 체제 

Microsoft® Windows® XP, Windows Server® 2003, Windows Server® 2008, Windows Vista® Home Premium, Business, Ultimate, Enterprise(64비트 에디션 포함) 서비스 팩 2 또는 Windows 7

Mac OS® X 10.6 및 10.7

AndroidTM 2.2, 2.3, 3.0, 3.1, 3.2 및 4.0

iOS 4.2 이상

RAM

512MB RAM(1GB 권장)

512MB RAM(1GB 권장)

256MB RAM 

 -

문제 보고

버그가 발견된 경우에는 Flash Player 및 Adobe AIR에 버그를 알려 주십시오. 버그 데이터베이스.

Flash Player 및 AIR는 그래픽 하드웨어를 사용하여 H.264 비디오를 디코딩하고 재생합니다. 어떤 비디오 문제는 특정 그래픽 하드웨어 및 드라이버에서만 재현됩니다. 비디오 관련 문제를 보고할 때는 문제를 재현하고 조사할 수 있도록 그래픽 하드웨어 및 드라이버와 함께 운영 체제와 브라우저(Flash Player 사용 시)를 반드시 확인해야 합니다. 비디오 재생 문제 보고 지침에 설명된 대로 이 정보를 포함하십시오. 참고: 지원 센터에 접수되는 전자 메일이 너무 많아서 모든 요청에 응답하지 못할 수도 있습니다.

Adobe® Flash Player®와 AIR®를 사용해 주시고 시간을 내어 피드백을 보내 주셔서 감사합니다!

 

런타임 버전 기록

릴리스 날짜

런타임 버전

새로운 기능

보안 향상

수정된 문제

2012년 6월 21일
Flash Player 11.3.300.262 Windows 플러그인만 해당
해당 없음 해당 없음 Windows의 Firefox에서 Flash 컨텐츠를 볼 때 충돌이 발생함(3211153)

2012년 6월 8일

Flash Player Desktop 11.3.300.257
AIR 데스크톱 3.3.0.3650
AIR Android 3.3.0.3650
AIR SDK 3.3.0.3650

데스크톱:
Flash Player용 전체 화면 키보드 입력
NetStream을 통해 오디오를 스트리밍하기 위한 짧은 지연 시간의 오디오 지원
사운드 API를 위한 짧은 지연 시간의 오디오 지원
Firefox용 보호 모드(Windows®만 해당)
텍스처 스트리밍
Mac용 백그라운드 업데이트 도구
Framelabel 이벤트
Bitmapdata.drawwithQuality
BitmapData.encode
ReleaseOutside 이벤트
런타임 클래스 검사
향상된 Apple MacOS App Store 지원

AIR Mobile:
Windows®의 iOS에 대한 플랫폼 SDK 지원
AndroidTM 4.0 장치용 스타일러스 지원
AIR iOS용 USB 디버깅
AIR iOS용 강화된 백그라운드 비헤이비어
iOS에 대한 시뮬레이터 지원
종횡비 개선

APSB-14

[Stage3D for Desktop] Starling 컨텐츠 렌더러가 잘못된 위치에 있음(3153467)
GPU 렌더링 모드를 사용할 때 일부 응용 프로그램에서 iOS 렌더링이 멈춤(3124838)
rendermode=gpu에서 앤티앨리어싱 품질 설정이 유지되지 않음(3124862)
[Stage3D] Intel HD 3000 탑재 Mac에서 가위 사각형이 올바르게 설정되지 않음(2959500)
Windows 7의 Chrome 브라우저에서 마우스 잠금을 사용하면 이동 x/y가 상대값 대신 절대값을 반환함(3152175)
브라우저에서 여러 개의 Flash 인스턴스가 열려 있을 때의 오디오 지연 시간 문제(3084306)
비디오 재생 시의 녹색 화면 문제(3050372)

이 작업에는 Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License의 라이센스가 부여되었습니다.  Twitter™ 및 Facebook 게시물은 Creative Commons 약관을 적용받지 않습니다.

법적 고지 사항   |   온라인 개인 정보 보호 정책