10 มิถุนายน 2555

[Android Design] Android Compatibility - ความเข้ากันได้ในแอนดรอยด์



        ข้อมูลในการออกแบบแอพพลิเคชันบนแอนดรอยด์ เจ้าของบล็อกจะอ้างอิงข้อมูลจาก Android Developer หรือจะบอกว่าแปลเป็นภาษาไทยให้ฟังก็ได้ แต่เนื้อหาไม่ได้เอามาแปลทั้งหมดนะ จะเปลียนแปลงตามความเหมาะสมแทน

Android Compatibility
ความเข้ากันได้ในแอนดรอยด์

        เนื่องจากแอนดรอยด์ได้ถูกแบบมาให้สามารถใช้งานบนอุปกรณ์ที่หลากหลาย จึงทำให้แอพพลิเคชันต้องรองรับความหลากหลายของอุปกรณ์แอนดรอยด์ แต่อุปกรณ์แอนดรอยด์ ใช่ว่าจะมีลักษณะทางฮาร์ดแวร์เหมือนกันหมด ดังนั้นเมื่อแอพพลิเคชันใดๆไม่สามารถรองรับกับอุปกรณ์บางส่วนได้ ก็สามารถกำหนดได้ว่าแอพพลิเคชันดังกล่าวสามารถรองรับกับอุปกรณ์ตัวไหนได้ และตัวไหนใช้ไม่ได้โดยใช้ตัวกรอง (Filter) ซึ่งจะทำให้อุปกรณ์แอนดรอยด์ที่ไม่รองรับ จะมองแอพพลิเคชันแต่แอพพลิเคชันที่รองรับใน Google Play เท่านั้น ซึ่งจะช่วยแก้ปัญหากับผู้ใช้ที่ได้ดาวน์โหลดแอพพลิเคชันไปใช้ แล้วเกิดปัญหาไม่รองรับอุปกรณ์นั้นๆได้


Filter for technical reasons
ตัวกรองในเรื่องของทางเทคนิค

        แอนดรอยด์รองรับกับอุปกรณ์ที่หลากหลาย จึงทำให้อุปกรณ์แอนดรอยด์มีคุณสมบัติทางฮาร์ดแวร์เป็นบางส่วนเท่านั้น อย่างเช่นบางตัวไม่มีกล้องหน้า มีขนาดหน้าจอขนาดเล็ก มีไม่รองรับการใช้งานบลูทูธ หรือไม่รองรับการใช้โทรศัพท์ เป็นต้น
        ผู้พัฒนาสามารถกำหนดในแอพพลิเคชันได้เลยว่าอุปกรณ์ที่จะใช้งาน จะต้องรองรับเงื่อนไขดังกล่าวด้วย อย่างเช่น แอพพลิเคชันกล้อง อุปกรณ์แอนดรอยด์ก็จะต้องมีกล้องด้วย ถึงจะใช้งานแอพพลิเคชันนี้ได้
        ในการเขียนแอพพลิเคชัน คำสั่งในการใช้งานอุปกรณ์ต่างๆ จะถูกบังคับว่า ต้องประกาศการเข้าถึงฮาร์ดแวร์ดังกล่าวใน AndroidManifest.xml ด้วย เรียกว่า Permission หรือคำสั่ง <uses-permission> ซึ่งมีประโยชน์ต่อผู้ใช้งานด้วย โดยผู้ใช้งานก็สามารถรู้ได้ว่าแอพพลิเคชันดังกล่าวเข้าถึงการใช้งานใดๆบ้าง
       แต่ Permission จะไม่ถูกนับรวมเป็นตัวกรอง เพราะเป็นแค่การเข้าถึงการใช้งานต่างๆเท่านั้น ถ้าต้องการให้มีการใช้ตัวกรองใน Google Play ให้ประกาศ <uses-feature> แทน คำสั่งตัวกรองใน AndroidManifest.xml เพื่อกำหนดการเข้าถึงอุปกรณ์แอนดรอยด์ ไม่จำเป็นต้องกำหนดให้ครบทั้งหมด สามารถกำหนดเฉพาะอันที่ต้องการก็ได้

        <supports-screens> กำหนดขนาดของหน้าที่จะรองรับ
<supports-screens android:resizeable=["true" | "false"] android:smallScreens=["true" | "false"] android:normalScreens=["true" | "false"] android:largeScreens=["true" | "false"] android:xlargeScreens=["true" | "false"] android:anyDensity=["true" | "false"] android:requiresSmallestWidthDp="integer" android:compatibleWidthLimitDp="integer" android:largestWidthLimitDp="integer" />
ตัวอย่างการใช้งาน
<supports-screens android:smallScreens="true" android:normalScreens="true" />

        รองรับหน้าจอขนาดเล็กและขนาดปานกลาง

        ข้อมูลเพิ่มเติม Android Developer - Supports Screens Element



        <uses-configuration> กำหนดอุปกรณ์จำพวกคีย์บอร์ด รูปแบบที่จะรองรับ
<uses-configuration android:reqFiveWayNav=["true" | "false"] android:reqHardKeyboard=["true" | "false"] android:reqKeyboardType=["undefined" | "nokeys" |"qwerty" | "twelvekey"] android:reqNavigation=["undefined" | "nonav" | "dpad" |"trackball" | "wheel"] android:reqTouchScreen=["undefined" | "notouch" |"stylus" | "finger"] />
ตัวอย่างการใช้งาน
<uses-configuration android:reqTouchScreen="stylus | finger" />
        รองรับกับหน้าจอสัมผัสที่เป็นแบบใช้นิ้วหรือปากกาสไตลัส

        ข้อมูลเพิ่มเติม Android Developer - Uses Configuration Element



        <uses-feature> กำหนดคุณสมบัติทางฮาร์ดแวร์ที่จะรองรับ
<uses-feature android:name="string" android:required=["true" | "false"] android:glEsVersion="integer" /> 
ตัวอย่างการใช้งาน
<uses-feature android:name="android.hardware.bluetooth" android:required="false" /> <uses-feature android:name="android.hardware.camera" android:required="true" />
        รองรับกับอุปกรณ์แอนดรอยด์ที่มีบลูทูธและกล้อง โดยที่เครื่องนั้นๆจะมีบลูทูธหรือไม่มีก็ได้ แต่เครื่องนั้นๆจะต้องมีกล้องในตัวถึงจะดาวน์โหลดแอปพลิเคชันนี้บน Google Play ได้

        ข้อมูลเพิ่มเติม Android Developer - Uses Feature Element



        <uses-library> กำหนดความสามารถในการเข้าใช้งานร่วมกับแอพพลิเคชันอื่นๆ
<uses-library android:name="string" android:required=["true" | "false"] />
ตัวอย่างการใช้งาน
<uses-library android:name="com.google.android.maps" />
        รองรับกับอุปกรณ์ที่สามารถใช้งาน Google Maps 

        ข้อมูลเพิ่มเติม Android Developer - Uses Library Element



        <uses-sdk> กำหนด API Level ของอุปกรณ์แอนดรอยด์ที่จะรองรับ ซึ่ง API Level ก็คือเวอร์ชันของแอนดรอยด์ที่ใช้อยู่นั่นเอง ดูข้อมูลเพิ่มเติมได้ที่ Android Developer - API Levels
<uses-sdk android:minSdkVersion="integer" android:targetSdkVersion="integer" android:maxSdkVersion="integer" />
ตัวอย่างการใช้งาน
<uses-sdk android:minSdkVersion="8" android:maxSdkVersion="10" />
        รองรับแอนดรอยด์เวอร์ชันขั้นต่ำ API 8 หรือ Android 2.2 และสูงสุดคือ API 10 หรือ Android 2.3.3

        ข้อมูลเพิ่มเติม Android Developer - Uses SDK Element



<compatible-screens> คล้ายกับ <supports-screens>  แต่จะสามารถกำหนดได้ครอบคลุมกว่า
<compatible-screens> <screen android:screenSize=["small" | "normal" | "large" | "xlarge"] android:screenDensity=["ldpi" | "mdpi"  | "hdpi" | "xhdpi"] /> </compatible-screens>
ตัวอย่างการใช้งาน
<compatible-screens> <screen android:screenSize="small" android:screenDensity="ldpi" /> <screen android:screenSize="small" android:screenDensity="mdpi" /> <screen android:screenSize="small" android:screenDensity="hdpi" /> <screen android:screenSize="small" android:screenDensity="xhdpi" /> <screen android:screenSize="normal" android:screenDensity="ldpi" /> <screen android:screenSize="normal" android:screenDensity="mdpi" /> <screen android:screenSize="normal" android:screenDensity="hdpi" /> <screen android:screenSize="normal" android:screenDensity="xhdpi" /> </compatible-screens>
        รองรับกับหน้าจอขนาดเล็กและปานกลางที่ทุกความหนาแน่นของหน้าจอ

        ข้อมูลเพิ่มเติม Android Developer - Compatible Screens Element



        <supports-gl-texture> กำหนดรูปแบบการบีบอัดของ GL texture ที่จะรองรับ ซึ่งเป็นรูปแบบของการประมวลผลข้อมูลสำหรับกราฟฟิคแบบ GL ของชิปประมวลผลกราฟฟิค (GPU) ในแต่ละตัว เพราะ GPU ในแต่ละยี่ห้อจะมีรูปแบบการประมวลผลทีต่างกัน
<supports-gl-texture android:name="string" /> 
ตัวอย่างการใช้งาน
<supports-gl-texture android:name="GL_IMG_texture_compression_pvrtc" />
        รองรับรูปแบบการบีบอัดของ GL texture ของ PowerVR สำหรับอุปกรณ์แอนดรอยด์ที่ใช้ GPU ของ PowerVR อย่างเช่น PowerVR SGX540 เป็นต้น

        ข้อมูลเพิ่มเติม Android Developer - Supports GL Texture Element



Filtering for business reasons
ตัวกรองในเรื่องของทางธุรกิจ

    บางแอพพลิเคชันได้สร้างขึ้นมาเพื่อใช้ในบางประเทศเท่านั้น เนื่องจากเหตุผลทางธุรกิจหรือทางกฏหมาย อย่างเช่นแอพพลิเคชันเกี่ยวกับการรถไฟไทย ที่ทำขึ้นมาสำหรับผู้ใช้ที่เป็นคนไทยด้วยกันเท่านั้น โดยตัวกรองแบบนี้จะสามารถกำหนดได้ในขั้นตอนการนำแอพพลิเคชันลง Google Play ที่จะมีให้เลือกว่าให้ผู้ใช้ในประเทศใดสามารถดาวน์โหลดแอพพลิเคชันไปใช้งานได้บ้าง




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium