2011-07-05 46 views
5

Đây là lần đầu tiên tôi đăng bài ở đây. Tôi không chắc đây có phải là nơi thích hợp để đặt câu hỏi này hay không, nhưng dường như tôi không tìm được những nơi thích hợp hơn. Đây là câu hỏi của tôi.ActivityManager.forceStopPackage() từ Task Manager

Tôi hiểu rằng API ActivityManager.forceStopPackage() là một nội bộ và có thể được gọi chỉ từ quá trình hệ thống. Tuy nhiên, nó giải thích cho tôi rằng ứng dụng Trình quản lý tác vụ tích hợp (với tên gói com.motorola.PerformanceManager) trên điện thoại motorola atrix của chúng tôi có thể gọi trực tiếp mà không phải là một quy trình hệ thống. Có hai điều tôi đã xác minh.

Đầu tiên, nó là quá trình không thuộc hệ thống từ ps lệnh:

app_64 13681 1379 170788 29820 ffffffff 00000000 S com.motorola.PerformanceManager 

Thứ hai, nó thực sự gọi là ActivityManager.forceStopPackage() API từ tập tin Odex của nó (dịch ngược vào smali, sau đó vào dex, và sau đó vào java). Từ mã smali, nó đã được rõ ràng rằng nó gọi API này.

Tôi cũng đã kiểm tra tệp AndroidManifest.xml của mình mà dường như không có gì đặc biệt đối với tôi (diễn đàn nhầm lẫn nhận ra nội dung dưới dạng URL và ngăn tôi đăng nội dung đó).

Tệp kê khai không bao gồm sự cho phép android.permission.FORCE_STOP_PACKAGES được cho là hệ thống. Ứng dụng không thuộc hệ thống sẽ vẫn nhận được lỗi từ chối quyền ngay cả khi có quyền này. Tôi đã thử sử dụng tính năng phản chiếu để truy cập API này với sự cho phép android.permission.FORCE_STOP_PACKAGES nhưng vẫn gặp lỗi thời gian chạy.

Giờ đây, ứng dụng Trình quản lý tác vụ tích hợp có thể gọi API nội bộ như thế nào mà không phải là một quy trình hệ thống. Một khả năng là ứng dụng được ký với cùng khóa riêng của nền tảng. Tuy nhiên, tôi không chắc làm thế nào tôi có thể xác minh điều đó. Hơn nữa, nó vẫn được coi là một quá trình hệ thống với các mô tả bổ sung trong tệp kê khai.

Hy vọng ai đó có thể trả lời câu hỏi của tôi. Cảm ơn.

+0

tôi đã cùng một vấn đề như: java.lang.SecurityException: Permission từ chối: \t \t forceStopPackage() từ pid = 20.914, uid = 10.073 đòi hỏi android .permission.FORCE_STOP_PACKAGES ,,, bạn có thể giúp tôi giải quyết vấn đề này –

Trả lời

13

Quyền "android.permission.FORCE_STOP_PACKAGES" được bảo vệ bằng chữ ký nền tảng.

Nếu bạn có mã nguồn Android sau đó kiểm tra việc kê khai của phép:

/frameworks/base/core/res/AndroidManifest.xml

... 
    <permission android:name="android.permission.FORCE_STOP_PACKAGES" 
     android:permissionGroup="android.permission-group.SYSTEM_TOOLS" 
     android:protectionLevel="signature" 
... 

Bạn có thể thấy mức độ bảo vệ của nó là chữ ký, sau đó kiểm tra các tài liệu SDK cho Giải thích:

"android: protectionLevel"

http://developer.android.com/guide/topics/manifest/permission-element.html#plevel

"chữ ký ... Quyền mà hệ thống chỉ cấp nếu ứng dụng yêu cầu được ký bằng cùng một chứng chỉ như ứng dụng đã khai báo quyền. Nếu chứng chỉ phù hợp, hệ thống sẽ tự động cấp quyền mà không thông báo cho người dùng hoặc yêu cầu phê duyệt rõ ràng của người dùng "

Quyền đó được tuyên bố bởi khuôn khổ-res được ký bởi chữ ký nền tảng, vì vậy ứng dụng muốn sử dụng giấy phép cũng sẽ được ký bằng cùng một chữ ký.

/frameworks/base/core/res/Android.mk

... 
    LOCAL_PACKAGE_NAME := framework-res 
    LOCAL_CERTIFICATE := platform 
... 

Trân

Ziteng Chen

+0

Cảm ơn, tôi nghĩ đây là câu trả lời đúng. Tuy nhiên, tôi vẫn không chắc chắn làm thế nào tôi có thể xác minh rằng ứng dụng thực sự được ký với khóa nền tảng. Theo tệp kê khai của ứng dụng, quyền được viết đơn giản là (không có chỗ nào được bảo vệĐược đề cập trong tệp kê khai). Điều này có phần mâu thuẫn với những gì chúng ta hiểu? – zack

+0

Tất cả các tệp .apk sẽ được ký nhưng bạn có thể không biết nó vì ADT Eclipse đã làm nó cho bạn. Làm theo hướng dẫn để đăng ký apk bằng các phím của riêng bạn: http://developer.android.com/guide/publishing/app-signing.html#ExportWizard Nếu bạn có nguồn Android thì bạn có thể tìm thấy chứng chỉ gỡ lỗi Android trong thư mục/build/target/product/security, nhưng các nhà sản xuất điện thoại thường sẽ thay thế các chứng chỉ bằng chứng chỉ trực tiếp của riêng họ và sẽ không bao giờ được tiết lộ cho bạn và tôi, vì vậy tôi e rằng bạn không thể lấy ví dụ nền tảng chứng nhận của điện thoại Motorola. –

+0

Xin cảm ơn một lần nữa. Chỉ cần kiểm tra lại nếu tôi hiểu chính xác điều này. Tôi hiểu mọi tệp .apk được ký bằng chứng chỉ. Nhưng điều này là theo spec, không phải là sự cho phép FORCE_STOP_PACKAGES phải có một dòng "android: protectionLevel =" chữ ký "trong tệp kê khai? Bạn đang nói điều này không thực sự cần thiết (trình quản lý tác vụ tích hợp sẵn) Tôi sẽ đánh dấu phản hồi của bạn là câu trả lời sau khi bạn xác nhận sự hiểu biết của mình – zack

Các vấn đề liên quan