Phát triển ứng dụng định vị tín hiệu GPS và lưu trữ dựa trên công nghệ google app engine

66 508 0
Phát triển ứng dụng định vị tín hiệu GPS và lưu trữ dựa trên công nghệ google app engine

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

LỜI CẢM ƠN Trong suốt trình thực đồ án tốt nghiệp: “Phát triển ứng dụng định vị tín hiệu GPS lưu trữ dựa công nghệ Google App Engine” cố gắng thân, trình làm đồ án em nhận giúp đỡ tận tình từ phía nhà trường, thầy cô gia đình bạn bè Em xin gửi lời cảm ơn sâu sắc đến ThS.Nguyễn Thị Tính bận nhiều công việc dành thời gian hướng dẫn giúp đỡ em tận tình trình làm đồ án tốt nghiệp Em xin chân thành cảm ơn thầy – cô trường Đại học Công nghệ thông tin Truyền thông truyền đạt kiến thức quý báu cho em suốt trình học tập Em xin cảm ơn tới gia đình bạn bè quan tâm, động viên, giúp đỡ tạo điều kiện cho em để em có điều kiện tốt để hoàn thành đồ án Trong trình thực đồ án, em có nhiều cố gắng hạn chế thời gian kinh nghiệm nên đồ án mắc phải thiếu sót, mong góp ý kiến thầy cô bạn để ứng dụng mà đồ án đề cập hoàn thiện Em xin chân thành cảm ơn! Thái nguyên, ngày 10 tháng 06 năm 2012 Sinh viên thực Phạm Thị Thùy Linh LỜI CAM ĐOAN Để hoàn thành đồ án tốt nghiệp thời gian quy định đáp ứng yêu cầu đề tài, thân em cố gắng tìm hiểu nghiên cứu, học tập làm việc thời gian dài Em tham khảo số tài liệu nêu phần “Tài liệu tham khảo diễn đàn, mạng uy tín Internet” Nội dung đồ án hoàn toàn không chép từ đồ án khác, không vi phạm quyền tác giả Toàn đồ án thân em nghiên cứu xây dựng nên Em xin cam đoan lời đúng, có thông tin sai lệch em xin hoàn toàn chịu trách nhiệm trước Hội đồng Thái Nguyên, ngày 10 tháng 06 năm 2012 Sinh viên thực Phạm Thị Thùy Linh MỤC LỤC LỜI CẢM ƠN LỜI CAM ĐOAN MỤC LỤC DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT LỜI MỞ ĐẦU CHƯƠNG 1: TÌM HIỂU VỀ ANDROID CÔNG NGHỆ LẬP TRÌNH ANDROID 1.1.Giới thiệu hệ điều hành Android .7 1.2.Kiến trúc Android 1.3.1.AVD (Android Virtual Device) .12 1.4.Cấu trúc ứng dụng Android 13 1.4.4.Service 17 1.5.Lưu trữ liệu 23 1.6.Android Location API Google Maps .27 1.7.Android Market 30 CHƯƠNG 2: TÌM HIỂU CÔNG NGHỆ GAE CỦA GOOGLE 32 2.1.Công nghệ điện toán đám mây 32 2.2.Google App Engine 38 2.2.1.Giới thiệu 38 2.2.2.Các thành phần GAE 39 CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG ANDROID GHI LẠI DỮ LIỆU CHUYỂN ĐỘNG LƯU TRỮ TRÊN GAE 47 3.1.1.Môi trường lập trình Android 47 3.1.2.Yêu cầu phần cứng cài đặt Eclipse .47 3.1.3.Phân tích thiết kế phần mềm 48 3.1.4.Demo chương trình 56 3.2.Mô hình lưu trữ liệu GAE .59 3.2.1.Môi trường chạy GAE 59 3.2.2.Yêu cầu phần cứng cài đặt Eclipse .60 3.2.5.Demo chương trình lưu trữ GAE 61 KẾT LUẬN 63 TÀI LIỆU THAM KHẢO 64 PHỤ LỤC 65 DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT Ký hiệu viết tắt Diễn giải GPS Global Positioning System GAE LBS Google App Engine Location-based services API Application Program Interface SDK DVK ARM NMEA QEMU OHA Software Development Kit Dalvik Virtual Machine Acorn RISC Machine National Marine Electronics Association Quick EMUlator Open Handset Alliance PaaS Platform as a service ADT Android Development Tool AVD Android Virtual Device LỜI MỞ ĐẦU Tính cấp thiết đồ án Ngày với tốc độ công nghệ ngày tiên tiến hơn, đại kéo theosự bùng nổ thiết bị di động thông minh có hỗ trợ GPS máy tình hiệu cao kết nối internet mang lại nhiều lợi ích cho người dùng khắp giới Tuy nhiên, dịch vụ người dùng muốn biết vị trí đâu,người lái xe muốn trợ giúp tìm xăng gần nhất, người rút tiền muốn tìm ATM gần nhất, cao dịch vụ hỗ trợ hãng bay sếp chỗ ngồi cho khách hàng ngồi cạnh theo tiêu chí đó,…Các dịch vụ mang tính địa lý tính thời gian thực, quan tâm lớn giới Việt Nam Hiện nay, dịch vụ công nghệ Google hệ điều hành Andoid chạy thiết bị di động, dịch vụ điện toán đám mây GAE phát triển nhanh chóng với dung lượng lưu trữ lớn khả xử lý tính toán với tốc độ cao tập đoàn sản xuất thiết bị di động máy tính hiệu cao kết hợp khai thác ứng dụng để đưa đến tay khách hàng sản phẩm chất lượng công nghệ dịch vụ Từ phát triển nhanh chóng phổ cập thiết bị di động, đặc biệt công nghệ liên quan từ Google nên em chọn đề tài:Phát triển ứng dụng định vị tín hiệu GPS lưu trữ dựa công nghệ Google App Engine làm đồ án tốt nghiệp Mục tiêu đồ án - Tiếp cận xu trình độ nghiên cứu tiên tiến giới lĩnh vực lưu trữ CSDL đối tượng chuyển động dựa công nghệ Google - Đồ án phát triển phần mềm tích hợp thiết bị di động chạy hệ điều hành Android để ghi lại tín hiệu GPS lịch sử đường gắn liền với thiết bị Tiếp đó, phần mềm định kỳ đẩy liệu lịch sử di chuyển lên CSDL trung tâm công nghệ điện toán đám mây GAE Google Bố cục đồ án Chương 1: Tìm hiểu Android công nghệ lập trình Android Chương 2: Tìm hiểu công nghệ GAE Google Chương 3: Xây dựng ứng dụng Android ghi lại liệu chuyển động lưu trữ GAE CHƯƠNG 1: TÌM HIỂU VỀ ANDROID CÔNG NGHỆ LẬP TRÌNH ANDROID 1.1 Giới thiệu hệ điều hành Android Android hệ điều hành dành cho thiết bị di động smartphones hay tablet, phát triển Open Handset Alliance (OHA) OHA liên minh doanh nghiệp gồm 83 thành viên tập trung phát triển tiêu chuẩn cho thiết bị di động.Các thành viên bao gồm: Google, HTC, Sony, Dell, Intel, Motorola, Qualcomm, Texas Intruments, Samsung, LG, T-Mobile, Nvidia Wind River Systems Android xây dựng dựa Linux kernel với middleware, libraries, API viết C phần mềm chạy application framework bao gồm thư viện tương thích với Java dựa Apache Harmony Android sử dụng DVM (Dalvik Virtual Machine) với phương pháp biên dịch just-in-time để chạy code Java biên dịch Android có cộng đồng developer viết ứng dụng, chủ yếu viết Java Hiện có 250.000 ứng dụng Android Android Market kho ứng dựng online Google, người dùng download ứng dụng 1.2 Kiến trúc Android Kiến trúc Android gồm phần chính, mô hình cho ta nhìn tổng quan kiến trúc Android Nhân Android phát triển dựa vào Kernel Linux 2.6 Mỗi tầng kiến trúc Android hoạt động dựa vào tầng bên Hình 1.1: Kiến trúc Android 1.2.1 Tầng Application Đây lớp kiến trúc Android Là ứng dụng mà lập trình viên phát triển Browser, Media,…Android tích hợp sẵn số ứng dụng cần thiết như: contacts, browser, camera, Phone,…Tất ứng dụng viết ngôn ngữ Java 1.2.2 Tầng Application framework Bằng cách cung cấp tảng phát triển mở, Android cung cấp cho người phát triển khả xây dựng ứng dụng phong phú Người phát triển có toàn quyền sử dụng thiết bị phần cứng hay ứng dụng chạy nền… để tạo ứng dụng theo ý Kiến trúc ứng dụng thiết kế để đơn giản hóa việc sử dụng lại thành phần, ứng dụng cho phép ứng dụng khác khả sử dụng thành phần Điều giống với kỹ thuật cho phép người dùng đặt lại thành phần.Google xây dựng cho developer để phát triển ứng dụng họ Android cách gọi API Dưới ứng dụng hệ thống dịch vụ: • View UI - để xây dựng layout ứng dụng bao gồm: list view, text field, button, dialog, form grid, textbox, chí nhúng trình duyệt web • Content Providers cho phép ứng dụng truy xuất liệu từ ứng dụng khác, hay chia sẻ liệu • Resource Managercung cấp truy cập tới tài nguyên mã nguồn tập tin xâu, đồ họa, hay layout • Notification Manager: cho phép tất ứng dụng hiển thị thông báo hệ điều hành • Activity Maanager dùng để quản lý vòng đời ứng dụng điều hướng activity 1.2.3 Tầng Libraries Runtime Android 1.2.3.1 Libraries Là thư viện viết ngôn ngữ C/C++ developer phát triển ứng dụng android thông qua tầng Android Framework Có thể kể số thư viện quen thuộc với lập trình viên như: • Hệ thống thư viện C: dẫn xuất hệ thống thư viện C chuẩn cho thiết bị nhúng Linux • Media Libraries: mở rộng từ PacketVideo’s OpenCORE Hỗ trợ nhiều định dạng âm ,video hình ảnh phổ biến: MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG • Surface Manager: quản lý việc hiển thị kết hợp đồ họa 2D 3D • LibWebCore: dùng webkit engine cho việc render trình duyệt mặc định HDH Android browser cho dạng web nhúng (như HTML nhúng) 10 3.1.3.3 Biểu đồ lớp cho UseCase “Dinh vi tin hieu” MapActivity +onCreat(): any(idl) +isRouteDisplayed(): boolean(idl) Device +DeviceID: String(idl) +GPSDataList +MapView +MapController +LocationManager +LocationListerner * GPSData +x: long(idl) +y: long(idl) +timestamp 1 LocationListener GPSLocationListener +onLocationChanged() +onLocationChanged() +onProvideDisabled() +onProvideEnable() +onStatusChanged() +uploadData() Hình 3.3: Biểu đồ lớp Hình 3.3 cho thấy cấu trúc lớp sơ đồ Các thiết bị kế thừa lớp MapActivity đưa API Google để hỗ trợ nhiệm vụ chính: nhận liệu GPS thường xuyên cập nhật vào liệu thành viên GPSDataList Danh sách liệu bao gồm thành phần Mỗi thành phần đại diện lớp GPSData hình thành theo độ, kinh độ mốc thời gian Thiết bị tham gia việc hiển thị liệu Google Map (thông qua hai thành viên liệu MapView MapController) để vị trí vẽ đầu trang Ngoài ra,thiết bị cảnh báo có dịch chuyển, thông qua thành phần liệu LocationManager LocationListener Bất lúc Android phát di 52 chuyển, gửi thông báo cho thiết bị kích hoạt phương thức onLocationChanged định nghĩa giao diện LocationListener Trên thực tế phương thức onLocationChanged lớp GPSLocationListener thực giao diện mà thành phần kinh độ, độ, mốc thời gianđược ghi lại thành phần GPSDataList Sau khoảng thời gian cấu hình sẵn, mã thực phút, thiết bị tải lên danh sách (kinh độ-x, độ -y, mốc thời gian ) để máy chủ lưu trữ 3.1.3.4 Biểu đồ trình tự  Biểu đồ trình tự cho User Case “Gửi liệu lên GAE”: : Nguoi su dung ThuyLinh_AppGPSTrack : Chon menu Gui du lieu() Ctrl_ThuyLinh_AppGPSTrack : Gui du lieu len GAE() : CSDL GAE : Luu du lieu vao CSDL GAE() Hình 3.4: Biểu đồ trình tự cho Use Case “Gửi liệu lên GAE” 53  Biểu đồ trình tự cho User Case “ Hiển thị liệu ”: : Nguoi su dung ThuyLinh_AppGPSTrack : Chon menu "Hien thi DL"() Ctrl_ ThuyLinh_AppGPSTrack : Hien thi cac vi tri da di qua() : Hien thi ket qua tra ve() : Hien thi du lieu la cac la co ung voi cac vi tri() Hình 3.5: Biểu đồ trình tự cho Use Case “Hiển thị liệu” 54  Biểu đồ trình tự cho Use Case “Cài đặt thời gian lưu vị trí ”: : Nguoi su dung ThuyLinh_AppGPSTrack : Chon menu "Thiet lap"() Ctrl_ ThuyLinh_AppGPSTrack : Hien thi giao dien nhap thoi gian() : Tra ve giao dien nhap thoi gian() : Nhap khoang thoi gian luu vi tri() : Luu thoi gian moi() Hình 3.6: Biểu đồ trình tự cho Use Case “Cài đặt thời gian lưu vị trí” 55 3.1.4 Demo chương trình 3.1.4.1 Demo chạy Android Amulator Hình 3.7: Demo chạy máy áo Android Amulator 3.1.4.2 Demo chạy máy SamSung Galaxy S8530: Sau Built project MyTrack_GPSmặc định thư mục: MyTrack_GPS\bin\ tạo file MyTrack_GPS.apk vào máy Smartphone chạy hệ điều hành Android, cài chạy có giao diện sau: 56 Hình 3.8: Giao diện ứng dụng cài đặt thiết bị 57 Hình 3.9: Giao diện hiển thị lịch sử định vị đường 58 Hình 3.10: Upload liệu lên GAE 3.2 Mô hình lưu trữ liệu GAE 3.2.1 Môi trường chạy GAE Để triển khai ứng dụng bạn với đám mây Google, bạn cần tài khoản GAE Làm tài khoản bạn cần tài khoản email Google Mở trình duyệt http://appengine.google.com/ đăng nhập với thông tin tài khoản gmail bạn 59 Môi trường lập trình Android phổ biến dùng Eclipse kết hợp với ADT (Android Development Tool) 3.2.2 Yêu cầu phần cứng cài đặt Eclipse - Eclipese - Google plugin cho Eclipese - AppEngine-java-SDK-1.6.6.zip - Có tài khoản ứng dụng goole app engine 3.2.3 Phân tích sở liệu Như biết danh sách thuộc tính (kinh độ, độ, mốc thời gian) thường xuyên tải lên trung tâm sở liệu dựa GAE Để phân biệt vị trí thiết bị, khóa DeviceID đại diện chuỗi 15 ký tự bao gồm với thuộc tính Do đó, từ quan điểm thiết kế sở liệu quan hệ truyền thống, sở liệu đơn giản coi bảng cột DeviceID, kinh độ, độ, dấu thời gian 3.2.4 Lược đồ sở liệu: Các thiết kế bảng đơn giảnvì chúng đượclấy trực tiếp từ kiểu liệu nguyên thủy API Google Đó là: - MaThietBi: string - ViTri (KinhDo,ViDo) + Kinh độ: Float + độ: Float - ThoiGian: Date 60 3.2.5 Demo chương trình lưu trữ GAE Hình 3.11: Giao diện ứng dụng GAE Hình 3.12: Dữ liệu lưu trữ GAE Hình 3.12 cho thấy liệu mẫu lưu trữ GAE Dữ liệu lấy từ điện thoại Samsung Ace S5830 (Android2.2) Cột ID tự động 61 Cột thứ hai “MaThietBi” cột mã thiết bị, thử nghiệm thiết bị Samsung Ace s5830 mã hoá với mã ID = "357238044968712" Tiếp theo cột "ThoiGian" đại diện cho yếu tố mốc thời gian Cuối cột “ViTri” thể chiều (kinh độ, độ) 62 KẾT LUẬN  Kết đạt được: Trong trình nghiên cứu, tìm hiểu phân tích thực đề tài này,em hiểu thấy công việc cần phải làm để xây dựng phần mềm ThuyLinh_AppGPSTrack Trong phân tích thực kiến thức hạn chế em cố gắng hoàn thành đề tài theo mục tiêu đề kịp với tiến độ dự kiến với chức sau: • Định vị tín hiệu GPS máy điện thoại Smartphone • Cứ sau phút (có thể thay đổi đổi để đảm bảo thời gian thực) người sử dụng di chuyển phần mềm lưu lại vị trí CSDL • Cho phép người sử dụng gửi liệu lên trung tâm lưu trữ GAE Google • Cho phép người sử dụng xem vết di chuyển đồ • Cho phép người sử dụng thay đổi khoảng thời gian lưu vị trí lần  Hướng phát triển: Đề tài thực các công việc cụ thể đặt ban đầu việc xây dựng ứng dụng định vị đối tượng chuyển động lưu trữ liệu GAE, bước đầu việc tiếp cận xu đầy tiềm lĩnh vực khoa học ứng dụng mà không Việt Nam mà giới Từ kết nghiên cứu đồ án, em hi vọng khai phá liệu liệu đối tượng di chuyển nhằm đưa lại dịch vụ tốt dựa định vị 63 TÀI LIỆU THAM KHẢO Tài liệu tiếng Việt [1] http://www.droidviet.com/forum/lap-trinh-android/ [2] http://congdongit.org/bai-viet-ve-cloud-computing/ [3] http://vi.wikipedia.org/wiki/Điện_toán_đám_mây [4] http://code.google.com/intl/vi-VN/appengine/ Tài liệu tiếng Anh [1] Mark L Murphy, 2009, Begining Android, Apress [2] Dick Wall, Unlocking Android [3] Daniel Guermeur and Amy Unruh, Google App Engine Java and GWT Application Developmentccessful Android applications [4] http://www.vogella.de/articles/GoogleAppEngineJava/article.html [5] http://developer.android.com/ [6] http://googcloudlabs.appspot.com/ 64 PHỤ LỤC // LOAD BAN DO // GUI DU LIEU LEN GAE publicvoid onCreate(Bundle savedInstanceState) { case R.id.sendData: { super.onCreate(savedInstanceState); try { setContentView(R.layout.main); jSon = new ReadWrite(); try { FileInputStream fIn = null; mapView = (MapView) findViewById(R.id.mapView); fIn = openFileInput(pathfile); DataGPS=jSon.ReadFile(fIn,0).trim(); mapView.setBuiltInZoomControls(true); if (DataGPS.equals("1")) {Toast.makeText(this, TelephonyManager tm = (TelephonyManager) "Dữ liệu trống", Toast.LENGTH_LONG).show(); getSystemService(TELEPHONY_SERVICE); } else { number = tm.getDeviceId(); String[] arrays = DataGPS.substring(1).split("\\}\\ mapController = mapView.getController(); {"); mapController.setZoom(16); for (String array : arrays) { locationManager = (LocationManager) String[] info = new String[3]; getSystemService(Context.LOCATION_SERVICE); locationListener = new array = array.replace("{", ""); array = array.replace("}", ""); GPSLocationListener(); array = array.replace("\"", ""); locationManager.requestLocationUpdates( String[] sub = array.split(","); LocationManager.GPS_PROVIDER, 0, 0, for (int i = 0; i < sub.length; i++) { locationListener); info[i] = sub[i].substring(sub[i].indexOf(":") + } catch (Exception e) { 1).trim(); } } } CreateOrUpdate(METHOD_NAME, SOAP_ACTION, number,info[1],info[2], info[0]); } FileOutputStream fOut = openFileOutput(pathfile, Context.MODE_WORLD_WRITEABLE); jSon.WriteText(fOut, "1"); Toast.makeText(this, "Gửi liệu thành công", Toast.LENGTH_LONG).show(); } } catch (FileNotFoundException e) { Toast.makeText(this, "Không có liệu", //XEM DU LIEU Toast.LENGTH_LONG) show();} // UPDATE DU LIEU 65 case R.id.viewData: { privatevoid CreateOrUpdate(String method_name, try { String soap_action, jSon = new ReadWrite(); String numberDevice, String toadoX, String toadoY, FileInputStream fIn = null; String date) { fIn = openFileInput(pathfile); SoapObject request = new SoapObject(NAMESPACE, DataGPS = jSon.ReadFile(fIn, 0).trim(); method_name); if (DataGPS.equals("1")) request.addProperty("arg0", numberDevice); Toast.makeText(this, "Dữ liệu trống", request.addProperty("arg1", toadoX); Toast.LENGTH_LONG).show(); request.addProperty("arg2", toadoY); else { request.addProperty("arg3", date); ArrayList p = new SoapSerializationEnvelope envelope = new ArrayList(); SoapSerializationEnvelope( String[] arrays = DataGPS.split("\\}\\{"); SoapEnvelope.VER11); for (String array : arrays) { envelope.dotNet = false; String[] info = new String[3]; envelope.setOutputSoapObject(request); array = array.replace("{", ""); HttpTransportSE androidHttpTransport = new array = array.replace("}", ""); HttpTransportSE(URL); array = array.replace("\"", ""); androidHttpTransport.debug = true; String[] sub = array.split(","); try { for (int i = 0; i < sub.length; i++) { androidHttpTransport.call(soap_action, info[i] = sub[i].substring(sub[i].indexOf(":") envelope); + 1).trim(); } catch (Exception e) { } int x = (int) Toast.makeText(getApplicationContext(), (Double.parseDouble(info[1]) * 1000000); int y = (int) (Double.parseDouble(info[2]) * "Không có mạng", Toast.LENGTH_LONG).show(); 1000000); } p.add(new GeoPoint(x, y));} } MapOverlay mapOverlay = new MapOverlay(); List listOfOverlays = mapView.getOverlays(); listOfOverlays.clear(); mapOverlay.setPointToDraw(p); listOfOverlays.add(mapOverlay); } } catch (Exception e) {} } 66 ... vụ Từ phát triển nhanh chóng phổ cập thiết bị di động, đặc biệt công nghệ liên quan từ Google nên em chọn đề tài :Phát triển ứng dụng định vị tín hiệu GPS lưu trữ dựa công nghệ Google App Engine. .. cấp tảng phát triển mở, Android cung cấp cho người phát triển khả xây dựng ứng dụng phong phú Người phát triển có toàn quyền sử dụng thiết bị phần cứng hay ứng dụng chạy nền… để tạo ứng dụng theo... chia sẻ activity ứng dụng Và tương lai, Preference chia sẻ ứng dụng với 23 Bên cạnh việc sử dụng Preferences để lưu trữ liệu cách đơn giản khác để thực công việc lưu trữ liệu sử dụng tập tin Android

Ngày đăng: 19/04/2017, 22:33

Từ khóa liên quan

Mục lục

  • LỜI CẢM ƠN

  • LỜI CAM ĐOAN

  • MỤC LỤC

  • DANH MỤC CÁC KÝ HIỆU, TỪ VIẾT TẮT

  • LỜI MỞ ĐẦU

  • CHƯƠNG 1: TÌM HIỂU VỀ ANDROID VÀ CÔNG NGHỆ LẬP TRÌNH ANDROID

    • 1.1. Giới thiệu về hệ điều hành Android

    • 1.2. Kiến trúc Android

      • 1.3.1. AVD (Android Virtual Device)

      • 1.4. Cấu trúc một ứng dụng Android

        • 1.4.4. Service

        • 1.5. Lưu trữ dữ liệu

        • 1.6. Android Location API và Google Maps

        • 1.7. Android Market

        • CHƯƠNG 2: TÌM HIỂU CÔNG NGHỆ GAE CỦA GOOGLE

          • 2.1. Công nghệ điện toán đám mây

          • 2.2. Google App Engine

            • 2.2.1. Giới thiệu

            • 2.2.2. Các thành phần chính của GAE

            • CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG ANDROID GHI LẠI DỮ LIỆU CHUYỂN ĐỘNG VÀ LƯU TRỮ TRÊN GAE

              • 3.1.1. Môi trường lập trình Android

              • 3.1.2. Yêu cầu phần cứng và cài đặt Eclipse

              • 3.1.3. Phân tích thiết kế phần mềm

              • 3.1.4. Demo chương trình

              • 3.2. Mô hình lưu trữ dữ liệu trên GAE

                • 3.2.1. Môi trường chạy GAE

Tài liệu cùng người dùng

Tài liệu liên quan