Android bao gồm một khung phát triển, các thư viện ứng dụng và một máy ảo thời gian thực Dalvik, tất cả chạy trên Linux®. Bằng cách lợi dụng nhân Linux, Android có được một số trong các dịch vụ của hệ điều hành, bao gồm việc quản lý các tiến trình và bộ nhớ, một ngăn xếp mạng, các trình điều khiển thiết bị, một tầng trừu tượng hóa phần cứng, và, có liên quan đến chủ đề của bài viết này, các dịch vụ bảo mật.
Các điều kiện cần có trướcĐể đồng hành cùng bài viết này, bạn cần những kỹ năng và các công cụ sau đây:
- Kiến thức cơ bản về công nghệ Java™ và cách sử dụng Eclipse (hoặc IDE yêu thích của bạn).
- JDK (phiên bản cần thiết là 5 hoặc 6).
- Eclipse (phiên bản 3.4 hoặc 3.5).
- SDK Android và Trình cắm thêm ADT.
Để tải về và có các thông tin thiết lập, hãy xem phần Tài nguyên ở cuối bài viết này.
Các hộp cát, các tiến trình và các quyền hạn
Android sử dụng khái niệm về hộp cát để bắt buộc tách riêng giữa ứng dụng với nhau và các quyền hạn để cho phép hoặc ngăn không cho một ứng dụng truy cập vào các tài nguyên của thiết bị như các tệp và các thư mục, các mạng, các cảm biến và các API nói chung. Về việc này, Android sử dụng các phương tiện của Linux như bảo mật cấp-xử lý, các ID của người dùng và của nhóm có liên quan đến ứng dụng và các quyền hạn để bắt tuân thủ những hoạt động nào mà một ứng dụng được phép thực hiện.
Về khái niệm, một hộp cát có thể được thể hiện như trong Hình 1.
Hình 1. Hai ứng dụng Android, mỗi ứng dụng ở trong hộp cát hoặc tiến trình cơ sở riêng của mình
Các ứng dụng Android chạy trên tiến trình Linux riêng của mình và được gán cho một ID của người dùng duy nhất. Theo mặc định, các ứng dụng chạy trong một tiến trình của hộp cát cơ sở không được gán cho các quyền hạn, do đó ngăn không cho các ứng dụng như vậy được truy cập vào hệ thống hoặc các tài nguyên. Tuy nhiên, các ứng dụng Android có thể yêu cầu các quyền hạn thông qua các tệp bản kê (manifest) của ứng dụng.
Các ứng dụng Android có thể cho phép các ứng dụng khác truy cập vào tài nguyên của chúng bằng cách:
- Khai báo các quyền hạn-bản kê thích hợp.
- Chạy trong cùng tiến trình với các ứng dụng tin cậy khác, do đó chia sẻ quyền truy cập vào dữ liệu và mã của chúng.
Cách sau được minh họa trong Hình 2.
Hình 2. Hai ứng dụng Android, chạy trên cùng một tiến trình
Các ứng dụng khác nhau có thể chạy trong cùng tiến trình này. Đối với cách
tiếp cận này, trước tiên bạn phải ký các ứng dụng đó bằng cách sử dụng
cùng một khóa riêng và sau đó bạn phải gán cho chúng cùng một ID người
dùng Linux khi sử dụng tệp bản kê, bằng cách định nghĩa thuộc tính bản kê
android:sharedUserId với cùng một giá
trị/tên.
Các trường hợp sử dụng của nhà phát triển
Hình 3 minh họa một số các trường hợp sử dụng (use case) có liên quan đến bảo mật được tìm thấy khi bạn phát triển các ứng dụng Android.
Hình 3. Các lĩnh vực bảo mật hiện có khi lập trình các ứng dụng Android
- Việc ký ứng dụng hoặc mã là quá trình tạo các khóa riêng và khóa công khai và các chứng chỉ khóa-công khai, ký và tối ưu hóa ứng dụng.
- Các quyền hạn là một cơ chế bảo mật của nền tảng Android cho phép hoặc hạn chế ứng dụng truy cập vào các API và các tài nguyên hạn chế. Theo mặc định, các ứng dụng Android không được cấp các quyền hạn nào, làm cho chúng an toàn nhờ không cho phép chúng truy cập vào các API hoặc các tài nguyên được bảo vệ trên thiết bị. Các quyền hạn phải cần thiết, các quyền hạn tùy chỉnh được định nghĩa và các nhà cung cấp nội dung và tệp được bảo vệ. Hãy chắc chắn rằng bạn kiểm tra, tuân thủ và thu hồi các quyền hạn trong thời gian chạy.
Tiếp theo, hãy xem xét từng lĩnh vực bảo mật cụ thể hơn.
Tất cả các ứng dụng Android phải được ký. Việc ký ứng dụng hoặc mã là quá trình ký số một ứng dụng cụ thể bằng cách sử dụng một khóa riêng để:
- Xác định tác giả của mã.
- Phát hiện ra nếu các ứng dụng đã thay đổi.
- Xây dựng sự tin cậy giữa các ứng dụng.
Căn cứ vào mối quan hệ tin cậy này, các ứng dụng có thể chia sẻ mã và dữ liệu theo cách an toàn.
Các ứng dụng đã ký bằng cách sử dụng cùng một chữ ký số có thể cho phép lẫn nhau các quyền hạn khác để truy cập các API dựa trên chữ ký và cũng có thể chạy trong cùng một tiến trình nếu chúng chia sẻ các ID người dùng, cho phép truy cập vào mã và dữ liệu của nhau.
Việc ký ứng dụng bắt đầu bằng cách tạo ra một cặp khóa riêng và khóa công khai và một chứng chỉ khóa-công khai có liên quan, cũng được biết là một chứng chỉ khoá-công khai.
Khi làm việc với các ứng dụng Android, bạn có thể xây dựng các ứng dụng trong chế độ chế độ gỡ lỗi (debug) và chế độ phát hành (release-mode):
- Các ứng dụng được xây dựng khi sử dụng các công cụ xây dựng Android (dòng lệnh và ADT của Eclipse) được tự động ký bằng cách sử dụng một khóa riêng gỡ lỗi; các ứng dụng này được gọi là các ứng dụng chế độ gỡ lỗi. Các ứng dụng chế độ gỡ lỗi được sử dụng để thử nghiệm và không nên được phân phối. Lưu ý rằng các ứng dụng chưa được ký hoặc các ứng dụng đã ký bằng cách sử dụng một khóa riêng gỡ lỗi không thể được phân phối thông qua Thị trường Android.
- Khi bạn đã sẵn sàng để phát hành ứng dụng của mình, bạn phải xây dựng một phiên bản chế độ phát hành của nó, có nghĩa là ký ứng dụng đó bằng khóa riêng của bạn.
Việc ký mã trong Android được thực hiện theo một cách đơn giản hơn nhiều so với các nền tảng di động khác. Trong Android, chứng chỉ này có thể tự ký, có nghĩa là, không cần phải có người có thẩm quyền chứng nhận. Cách tiếp cận này làm đơn giản hóa quá trình xuất bản và các chi phí liên quan.
Tiếp theo, tôi trình bày cách ký các ứng dụng Android thủ công từ dòng lệnh và ký bằng cách sử dụng ADT của Eclipse. Tôi không trình bày một cách tiếp cận thứ ba, sử dụng Ant, trong bài viết này.
Tạo thủ công các khóa riêng và khóa công khai và chứng chỉ khóa-công khai
Hãy nhớ rằng các ứng dụng chế độ gỡ lỗi được ký tự động bằng các công cụ xây dựng khi sử dụng khóa/chứng chỉ gỡ lỗi. Để ký một ứng dụng chế độ phát hành, trước tiên bạn phải tạo cặp khóa riêng và khóa công khai và chứng chỉ khóa-công khai. Bạn có thể ký ứng dụng của bạn bằng thủ công hoặc bằng cách sử dụng ADT của Eclipse. Trong cả hai cách tiếp cận, khóa của công cụ khóa của JDK (Java Developer Kit – Bộ dụng cụ của nhà phát triển Java) và tiện ích quản lý chứng chỉ được sử dụng.
Để tạo thủ công thông tin khóa riêng và khóa công khai, hãy sử dụng
keytool từ dòng lệnh, như trong Liệt kê 1.
Liệt kê 1. Sử dụng
keytool để tạo các khóa riêng/khóa công khai và chứng chỉkeytool -genkey -v -alias <alias_name> -keystore <keystore.name> -keyalg RSA -keysize 2048 -validity <number of days> |
LƯU Ý:
Liệt kê 1 giả định JDK đã được cài đặt trên máy tính
của bạn và đường dẫn JAVA_HOME được xác định
đúng để trỏ đến thư mục JDK của bạn (xem phần Tài
nguyên với các thông tin tải về và thiết lập).
Trong Liệt kê 1, -genkey
biểu thị một mục nhập cặp khóa riêng và khóa công khai , cũng như một
chuỗi của chứng chỉ X.509 v1 có một phần tử, tự ký bao gồm khóa công khai
được tạo ra. -v biểu thị chế độ-dài dòng. -alias là bí danh để sử dụng cho mục nhập kho
khóa (keystore) để lưu trữ khóa riêng và chứng chỉ được tạo. -keystore cho biết tên của kho khóa muốn sử dụng.
-keyalg là thuật toán sử dụng để tạo ra cặp
khoá. -keysize là kích thước của khóa để tạo
ra, ở đây giá trị mặc định là 1024, nhưng khuyến khích sử dụng là 2048. Và
-validity là thời hạn hiệu lực theo ngày;
khuyến cáo sử dụng một giá trị lớn hơn 1000.
LƯU Ý: Sau khi bạn tạo ra các khóa của mình, điều rất quan trọng là bạn bảo vệ khóa riêng của bạn. Không chia sẻ khóa riêng và không chỉ rõ nó trên dòng lệnh hoặc trong các kịch bản lệnh; lưu ý rằng công cụ khóa (keytool) và trình ký jar (jarsigner) nhắc nhở mật khẩu. Về điều này và các thủ thuật khác, xem "Bảo vệ khóa riêng của bạn" từ trang web của các nhà phát triển Android (xem phần Tài nguyên để có một liên kết).
Keytool nhắc gõ tên và họ, tổ chức, thành phố,
bang, quốc gia của bạn để từ đó tạo ra một Tên Nhận biết X.500 (xem phần
Tài nguyên để biết thêm thông tin) và các mật
khẩu để bảo vệ khóa riêng và để tự bảo vệ kho khóa.
Với thời hạn hiệu lực, đảm bảo chắc chắn sử dụng một thời hạn vượt quá vòng đời dự kiến của ứng dụng và các ứng dụng liên quan. Nếu bạn đang xuất bản ứng dụng của mình trên thị trường Android, thời hạn phải kết thúc sau 22 tháng 10 năm 2033; nếu không, bạn không thể tải nó lên. Ngoài ra, các chứng chỉ có vòng đời lâu dài làm cho bạn dễ dàng hơn khi nâng cấp các ứng dụng của bạn. May mắn thay, Thị trường Android đòi hỏi các chứng chỉ có vòng đời lâu dài để giúp bạn tránh các tình huống như vậy.
Tiếp theo, ký ứng dụng chưa ký bằng cách sử dụng công cụ
jarsigner, một phần của JDK:
jarsigner -verbose -keystore <keystore.name> <my_application.apk> <alias_name> |
Trong đoạn mã trên, -verbose cho biết chế độ dài
và -keystore cho biết tên của kho khóa sử dụng.
Tiếp theo là tên của ứng dụng (.apk) và cuối cùng là bí danh để sử dụng
cho khóa riêng.
Jarsigner nhắc nhập mật khẩu để sử dụng kho khóa
và khóa riêng.
Các ứng dụng có thể được ký nhiều lần bằng cách sử dụng các khóa khác nhau và các ứng dụng đã ký với cùng một khóa riêng có thể thiết lập một mối quan hệ tin cậy với nhau và có thể chạy trong cùng một tiến trình và chia sẻ mã và dữ liệu.
Tối ưu hóa ứng dụng của bạn bằng thủ công
Bước cuối cùng trong quá trình ký là tối ưu hóa ứng dụng này để cho các
ranh giới của dữ liệu được sắp xếp trong bộ nhớ với sự bắt đầu của tệp,
một kỹ thuật giúp cải thiện hiệu năng thời gian chạy và sử dụng bộ nhớ. Để
sắp xếp ứng dụng, sử dụng zipalign:
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk |
Trong đoạn mã trên, -v biểu thị kết quả đầu ra
dài. Số 4 cho biết sử dụng sự sắp xếp bốn-byte (luôn luôn sử dụng bốn
byte). Đối số tiếp theo là tên tệp của ứng dụng đầu vào đã ký (.apk), ứng
dụng đó phải được ký bằng khóa riêng của bạn và đối số cuối cùng là tên
tệp kết quả đầu ra; nếu ghi đè một ứng dụng hiện có, hãy thêm vào
-f.
Kiểm tra thủ công xem ứng dụng đã được ký chưa
Để kiểm tra xem ứng dụng được ký chưa, sử dụng
Jarsigner, lúc này dùng cờ
-verify:
jarsigner -verify -verbose -certs my_application.apk |
Trong đoạn mã trên, -verify biểu thị việc kiểm
tra ứng dụng; -verbose biểu thị chế độ dài
dòng; -certs biểu thị sẽ hiển thị trường CN của
những người đã tạo ra khóa và đối số cuối cùng là tên của gói ứng dụng
Android cần kiểm tra.
LƯU Ý: Nếu CN là "Android Debug", có nghĩa là ứng dụng này đã được ký bằng cách sử dụng khóa gỡ lỗi và nó không thể được xuất bản; hãy nhớ sử dụng một khóa riêng nếu kế hoạch của bạn là xuất bản ứng dụng của mình trên Thị trường Android.
Đúng là bạn vừa thấy cách tạo thủ công các khóa riêng và khóa công khai và cách ký và tối ưu hóa ứng dụng này. Tiếp theo, hãy xem xét cách sử dụng ADT (Các công cụ phát triển Android) của Eclipse để tự động tạo các khóa riêng và khóa công khai và cách ký và tối ưu hóa ứng dụng cho bạn.
Sử dụng ADT của Eclipse để tạo các khóa và chứng chỉ và để ký và tối ưu hóa các ứng dụng của bạn
Để tạo các khóa khi sử dụng ADT của Eclipse, bạn phải xuất khẩu ứng dụng này. Có hai phương thức xuất khẩu các ứng dụng từ Eclipse:
- Xuất khẩu một phiên bản chưa ký của ứng dụng mà bạn phải ký thủ công.
- Xuất khẩu một phiên bản đã ký của ứng dụng, ở đây ADT sẽ làm tất cả các bước cho bạn.
Xuất khẩu một ứng dụng chưa ký
Bạn có thể xuất khẩu một phiên bản ứng dụng chưa ký của bạn mà bạn phải ký thủ công ứng dụng đó. Đó là, bạn cần phải chạy thủ công keytool (để tạo ra các khóa như được mô tả ở trên) và Jarsigner (để ký ứng dụng) và tối ưu hóa ứng dụng bằng cách sử dụng công cụ zipalign, như đã giải thích ở trên.
Để xuất khẩu một phiên bản ứng dụng chưa ký bằng cách sử dụng ADT, hãy nhấn chuột phải vào dự án đó và chọn Android Tools>Export Unsigned Application Package (Các công cụ Android > Xuất khẩu gói ứng dụng chưa ký) (xem Hình 4).
Hình 4. Xuất khẩu ứng dụng chưa ký
Sau khi được chọn, ADT nhắc bạn về thư mục, nơi xuất khẩu ứng dụng chưa ký. Hãy nhớ rằng ngay khi ứng dụng được xuất khẩu, bạn phải ký và tối ưu hóa thủ công ứng dụng đó, như đã trình bày ở trên.
Với ADT của Eclipse, bạn có thể xuất khẩu một phiên bản ứng dụng đã ký. Khi sử dụng cách tiếp cận này, ADT nhắc cho bạn những việc sau:
- Thông tin cần thiết để sử dụng một kho khóa hiện có hoặc tạo ra một kho khóa được bảo vệ mới.
- Thông tin cần thiết để tạo ra một khóa riêng được bảo vệ.
- Thông tin cần thiết để tạo ra chứng chỉ khoá-công khai.
Để xuất khẩu một ứng dụng đã ký, nhấn chuột phải vào dự án đó, nhưng lần này chọn mục trình đơn Android Tools->Export Signed Application Package (Các công cụ Android > Xuất khẩu gói ứng dụng đã ký), như minh họa trong Hình 5.
Hình 5. Xuất khẩu một ứng dụng đã ký
Vào lúc này này, Trình thủ thuật xuất khẩu (Export Wizard) hoạt động, như trong Hình 6.
Hình 6. Trình thủ thuật xuất khẩu
Trong Hình 7, hãy chọn một kho khóa hiện có hoặc tạo một kho khóa mới và các ủy quyền để sử dụng.
Hình 7. Trình thủ thuật xuất khẩu: Chọn kho khóa
Trong Hình 8, hãy nhập thông tin để tạo ra khóa riêng và chứng chỉ số.
Hình 8. Trình thủ thuật xuất khẩu: Tạo khóa riêng và chứng chỉ số
Trong Hình 9, hãy nhập đường dẫn và tên của tệp đích và kiểm tra thời hạn hiệu lực.
Hình 9. Nhập đường dẫn và tên của tệp đích
Khi hoàn thành, bạn có một ứng dụng chế độ-phát hành đã ký và được tối ưu hóa có thể xuất bản được.
Ngoài ra, bạn cũng có thể gọi Export Wizard bằng cách sử dụng Android Manifest Tool (Công cụ Manifest của Android), như trong Hình 10.
Hình 10. Gọi Export Wizard bằng cách sử dụng công cụ Manifest Android
Sau khi ứng dụng được ký, bước tiếp theo là để bạn xác định các quyền hạn mà ứng dụng đó cần đến trong bản kê. Quá trình này được mô tả tiếp sau.
Lưu ý rằng trang web của nhà phát triển Android có nhiều tài liệu thú vị về việc ký ứng dụng, nó luôn cập nhật khi các bản phát hành mới của nền tảng Android trở nên có sẵn (xem phần Tài nguyên để biết thêm thông tin).
Các quyền hạn là một cơ chế bảo mật của nền tảng Android để cho phép hoặc hạn chế ứng dụng truy cập đến các API và các tài nguyên bị hạn chế. Theo mặc định, các ứng dụng Android không được cấp các quyền hạn nào, làm cho chúng an toàn bằng cách không cho phép chúng truy cập vào các API được bảo vệ hoặc các tài nguyên trên thiết bị. Ứng dụng phải yêu cầu các quyền hạn thông qua tệp bản kê và người dùng cấp hoặc không cấp các quyền hạn trong khi cài đặt.
Android định nghĩa một danh sách dài các quyền hạn qua bản kê, bảo vệ các
khía cạnh khác nhau của hệ thống hoặc các ứng dụng khác. Để yêu cầu cấp
quyền hạn, hãy khai báo một thuộc tính
<user-permission> trong tệp bản kê:
<uses-permission android:name="string" /> |
Ở đây android:name xác định tên của quyền hạn
này.
Để biết một danh sách tất cả các quyền hạn qua bản kê do Android định nghĩa, hãy xem trang Manifest.permisson. Liệt kê 2 là một ví dụ của một tệp bản kê yêu cầu cấp quyền sử dụng Internet và quyền ghi vào bộ nhớ ngoài:
Liệt kê 2. Khai báo (yêu cầu cấp) một quyền hạn
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="com.cenriqueortiz.tutorials.datastore"
android:installLocation="auto">
<application
:
:
:
</application>
<uses-permission
android:name="android.permission.INTERNET"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
|
Các ứng dụng có thể định nghĩa các quyền hạn tùy chỉnh riêng của mình để bảo vệ tài nguyên của ứng dụng. Các ứng dụng khác muốn truy cập vào tài nguyên được bảo vệ của một ứng dụng phải yêu cầu có các quyền hạn thích hợp thông qua tệp bản kê riêng của mình. Liệt kê 3 chỉ ra một ví dụ về cách định nghĩa các quyền hạn.
Liệt kê 3. Khai báo một quyền hạn tùy chỉnh
<permission
xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.cenriqueortiz.android.ACCESS_FRIENDS_LIST"
android:description="@string/permission_description"
android:label="@string/permission_label"
android:protectionLevel="normal"
>
</permission>
|
Trong Liệt kê 3, một quyền hạn khách hàng được định
nghĩa bằng cách xác định các thuộc tính tối thiểu
name (tên),
description (mô tả),
label (nhãn) và
protectionLevel (mức bảo vệ). Các thuộc tính
khác có thể được định nghĩa thêm, nhưng chúng không được trình bày ở
đây.
Một thuộc tính cần quan tâm đặc biệt là
android:protectionLevel, biểu thị phương thức
mà hệ thống phải tuân theo khi cấp (hoặc không cấp) một quyền hạn cho một
ứng dụng đang yêu cầu. Các mức bảo vệ gồm có normal (bình
thường), nghĩa là tự động cấp các quyền này (mặc dù người sử dụng luôn có
thể xem xét lại trước khi cài đặt), việc cấp các quyền hạn dựa trên chữ ký
(có nghĩa là, nếu ứng dụng đang yêu cầu đã được ký với cùng một chứng chỉ)
và dangerous (nguy hiểm), biểu thị các quyền hạn truy cập đến dữ
liệu riêng hoặc có tác động tiêu cực tiềm năng khác. Để biết thêm thông
tin về thuộc tính bản kê <permission> hãy
xem trang <permission> (xem phần Tài
nguyên).
Các ứng dụng có thể hạn chế truy cập vào ứng dụng và các thành phần hệ
thống mà nó sử dụng như là Activity (Hoạt động), Service (Dịch vụ),
Content Provider (Nhà cung cấp nội dung) và Broadcast Receiver (Máy thu
quảng bá). Sự hạn chế này dễ dàng thực hiện bằng cách định nghĩa thuộc
tính android:permission như trong Liệt kê 4. Mức bảo vệ này để cho ứng dụng đó cho
phép hoặc hạn chế các ứng dụng khác truy cập vào tài nguyên hệ thống.
Liệt kê 4. Định nghĩa một quyền hạn cho một hoạt động
<activity
android:name=".FriendsListActivity"
android:label="Friends List">
android:permission="com.cenriqueortiz.android.ACCESS_FRIENDS_LIST"
<intent-filter>
:
:
</intent-filter>
</activity>
|
Các quyền hạn của các nhà cung cấp nội dung và của tệp
Các nhà cung cấp nội dung trưng ra một URI chung là URI duy nhất xác định
dữ liệu của họ (xem phần Tài nguyên). Để bảo vệ
các nhà cung cấp nội dung như vậy, khi bắt đầu một hoạt động hoặc trả về
một kết quả hoạt động của mình, người gọi có thể thiết lập
Intent.FLAG_GRANT_READ_URI_PERMISSION và
Intent.FLAG_GRANT_WRITE_URI_PERMISSION, để cấp
quyền cho hoạt động thu nhận truy cập vào URI của dữ liệu cụ thể theo ý
đích này.
Theo mặc định, các tệp của ứng dụng được bảo vệ. Các tệp được bảo vệ dựa trên các ID người dùng và do đó chỉ người chủ sở hữu của ứng dụng, có cùng ID người dùng, mới có thể truy cập được. Như đã trình bày ở trên, các ứng dụng chia sẻ ID người dùng giống nhau (và được ký bằng cách sử dụng cùng một chứng chỉ số) chạy trên cùng một tiến trình và vì thế chia sẻ quyền truy cập các ứng dụng của chúng.
Các ứng dụng có thể cho phép các ứng dụng hoặc các tiến trình khác có quyền
truy cập tới các tệp của mình. Sự cho phép này được thực hiện bằng cách
chỉ ra chế độ hoạt động MODE_WORLD_READABLE và
MODE_WORLD_WRITEABLE thích hợp để cho phép
quyền truy cập đọc hoặc viết vào tệp, hoặc
MODE_PRIVATE để mở tệp trong chế độ riêng tư.
Bạn có thể xác định một chế độ hoạt động bằng các phương thức sau khi bạn
tạo hoặc mở các tệp:
-
getSharedPreferences(filename, operatingMode) -
openFileOutput(filename, operatingMode) -
openOrCreateDatabase(filename, operatingMode, SQLiteDatabase.CursorFactory)
Các API
Permission thời gian chạy
Android cung cấp các API để kiểm tra, bắt tuân thủ, cấp và thu hồi các
quyền hạn trong thời gian chạy. Các API này là một phần của lớp
android.content.Context, cung cấp toàn bộ thông
tin về một môi trường ứng dụng. Ví dụ, nếu bạn muốn xử lý các quyền hạn
một cách trang nhã, bạn có thể xác định xem ứng dụng của bạn đã được cấp
quyền truy cập vào Internet chưa (xem Liệt kê 5).
Liệt kê 5. Sử dụng một API
Permission thời gian chạy để kiểm tra, bắt tuân thủ, cấp và thu hồi các quyền hạn trong thời gian chạy
if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET)
!= PackageManager.PERMISSION_GRANTED) {
// The Application requires permission to access the
// Internet");
} else {
// OK to access the Internet
}
|
Đối với các API quyền hạn khác để kiểm tra, bắt tuân thủ, cấp và thu hồi các quyền hạn trong thời gian chạy, hãy xem lớp ngữ cảnh.
Bài viết này đã giới thiệu bảo mật trên nền tảng Android, bao gồm các hộp cát, việc ký ứng dụng, các quyền hạn của ứng dụng và các quyền hạn của nhà cung cấp nội dung và tệp. Sau phần mở đầu này, bạn có thể tạo các chứng chỉ số bằng thủ công và sử dụng Eclipse, yêu cầu cấp các quyền hạn cho các ứng dụng và cho phép hoặc không cho phép các ứng dụng truy cập tới các nhà cung cấp nội dung và các tệp. Ngoài ra, bạn xem xét nhanh các API thời gian chạy của các quyền hạn, cho phép bạn kiểm tra, bắt tuân thủ, cấp và thu hồi các quyền hạn trong thời gian chạy.
Học tập
- Android là gì?: Tìm hiểu tổng quan từ trang web của các nhà phát
triển Android.
- Phát triển các ứng dụng Android với Eclipse (Frank
Ableson,developerWorks, 02.2008): Tìm hiểu tất cả về cách dễ dàng nhất để
phát triển các ứng dụng Android là sử dụng Eclipse trong hướng dẫn
này.
- Giới thiệu về phát triển Android (Frank Ableson, developerWorks,
05.2009): Xem phần mở đầu về nền tảng Android và tìm hiểu cách mã hóa một
ứng dụng Android cơ bản.
- Các chứng chỉ X.509: Tìm hiểu tiêu chuẩn X.509, định nghĩa thông
tin nào có thể có trong một chứng chỉ và mô tả cách ghi nó (định dạng dữ
liệu).
- Các quyền hạn mở rộng: Yêu cầu các quyền hạn mở rộng cho ứng dụng
của bạn khi ứng dụng cần phải truy cập vào các phần khác của hồ sơ người
dùng có thể có tính riêng tư hoặc khi ứng dụng cần phải xuất bản nội dung
đến Facebook nhân danh người dùng.
- Bảo vệ khóa riêng của bạn: Tìm hiểu cách giữ bảo mật khóa riêng
của bạn trên trang web của các nhà phát triển Android.
- Việc ký các ứng dụng của bạn: Tìm hiểu về việc ký các ứng dụng
Android của bạn trước khi xuất bản chúng cho những người sử dụng di động
từ trang web của các nhà phát triển Android.
- Trang manifest.permission: Để tìm danh sách tất cả các quyền hạn
qua Manifest do Android định nghĩa, hãy truy cập vào trang web các nhà
phát triển Android.
- Các nhà cung cấp nội dung: Tìm hiểu cách lưu trữ và lấy ra dữ
liệu và làm cho tất cả các ứng dụng có thể truy cập vào nó.
- Lớp Context (Bối cảnh): Cho phép truy cập đến các tài nguyên và
các lớp ứng dụng cụ thể với giao diện này để toàn bộ thông tin được mô tả
trên trang web của các nhà phát triển Android.
- Nối mạng với Android (Frank Ableson, developerWorks, 06.2009):
Tìm hiểu các khả năng nối mạng của Android.
- Làm
việc với XML trên Android (Michael Galpin, developerWorks,
06.2009): Tìm hiểu về các tùy chọn khác nhau để làm việc với XML trên
Android và cách sử dụng chúng để xây dựng các ứng dụng của Android riêng
của bạn.
- Dưới Mái che của các ứng dụng Web được thiết kế riêng cho
Android: Tìm hiểu về các ứng dụng lai trong Android.
- Mở
khóa Android (Frank Ableson, Manning Publications, 2010): Trình
bày tất cả các khía cạnh về phát triển Android trong cuốn sách này của tác
giả.
- Thiết kế và Phát
triển di động (Brian Fling, O'Reilly Media, 2009): Tìm hiểu về các
hướng dẫn thực hành, các tiêu chuẩn, các kỹ thuật và các thực hiện tốt
nhất để xây dựng các sản phẩm di động trong cuốn sách này.
- Đọc Hướng dẫn phát triển lưu trữ dữ liệu: Chọn giải pháp đúng để lưu
dữ liệu ứng dụng lâu bền như được lưu ý trên trang web chính thức của nhà
phát triển Android.
- Intents: Tìm hiểu về mô tả trừu tượng này của một hoạt động được
thực hiện từ trang web của nhà phát triển Android.
- Tài liệu
SDK của Android: Thu thập các thông tin mới nhất trong tài liệu
tham khảo API của Android.
- The Open Handset
Alliance: Truy cập vào trang web của nhà tài trợ của
Android.
- Vùng XML trên
developerWorks: Thu thập các tài nguyên mà bạn cần để nâng cao các
kỹ năng của bạn trong lĩnh vực XML.
- My
developerWorks: Cá nhân hoá kinh nghiệm developerWorks của
bạn.
- Chứng chỉ XML
của IBM: Tìm hiểu cách bạn có thể trở thành một nhà phát triển có
chứng chỉ-IBM trong công nghệ XML và các công nghệ liên quan.
- Thư
viện kỹ thuật XML: Xem Vùng XML của developerWorks với một loạt
các bài báo và thủ thuật kỹ thuật, các hướng dẫn, các tiêu chuẩn và các
sách Đỏ của IBM. Ngoài ra, hãy xem chi tiết các thủ thuật XML.
- Các sự
kiện kỹ thuật và Webcast của developerWorks: Theo sát với công
nghệ trong các phiên này.
- developerWorks trên
Twitter: Tham gia ngày hôm nay để theo sát các bài viết ngắn
(tweets) của developerWorks.
- developerWorks
podcasts: Nghe các cuộc phỏng vấn và các cuộc thảo luận thú vị
dành cho các nhà phát triển phần mềm.
- Các chương
trình trình diễn theo yêu cầu của developerWorks: Xem một loạt các
chương trình trình diễn từ cài đặt và thiết lập sản phẩm cho nhưng người
mới bắt đầu đến chức năng cao cấp cho các nhà phát triển có kinh
nghiệm.
Lấy sản phẩm và công nghệ
- Trang <permission>: Tìm thêm thông tin về trang Manifest
<permission>.
- keytool: Hãy thử công cụ quản lý khóa và chứng chỉ này.
- jarsigner: Nhận công cụ ký JAR và xác nhận hợp lệ này để tạo các
chữ ký cho các tệp lưu trữ Java (JAR) và xác nhận các chữ ký của các tệp
JAR đã ký.
- Android SDK: Tải về SDK, truy
cập tài liệu tham khảo API và nhận các tin tức mới nhất về Android từ
trang Web chính thức của nhà phát triển Android. Phiên bản 1.5 và mới hơn
sẽ hoạt động.
- Dự án nguồn mở Android: Tìm các
thông tin nguồn mở và mã nguồn mà bạn cần để xây dựng một thiết bị tương
thích với Android.
- Bản cập nhật 21 của JDK 6: Nhận nền tảng Java, ấn bản tiêu
chuẩn.
- Eclipse: Nhận lấy bản IDE của Eclipse
mới nhất.
-
Các phiên bản đánh
giá sản phẩm của IBM: Tải về hoặc khám
phá các thử nghiệm trực tuyến trong SOA Sandbox của IBM và nhận
các công cụ phát triển ứng dụng thực hành của bạn và các sản phẩm phần mềm
trung gian từ DB2®, Lotus®, Rational®, Tivoli® và
WebSphere®.
Thảo luận
- Các
diễn đàn thảo luận lĩnh vực XML: Tham gia vào bất kỳ trong số các
cuộc thảo luận có liên quan đến XML.
- Các blog
developerWorks: Đọc các blog này và dành tâm trí cho
nó.