我从Android文档中获得了以下解释,关于Android M Preview中的新权限模型。请用简单的单词用粗体解释文本因为我很困惑。
如果应用程序请求清单中的权限属于PROTECTION_SIGNATURE,且应用程序使用与声明这些权限的应用程序相同的证书进行签名,系统会向请求应用程序授予安装权限。应用无法在运行时请求签名权限。
答案 0 :(得分:2)
应用可以通过清单定义自己的权限。这是指那些权限。因此,如果我发布2个应用程序,两个都使用相同的证书签名,而应用程序#1 定义具有签名级别保护的新权限,而应用#2 使用该权限(通过声明所以在其清单中)然后系统将自动授予app#2的权限。请注意,这对Android Marshmallow来说并不陌生。只有选择性授予/撤销才是。
本文将有助于解释Android下的权限:http://hiqes.com/android-security-part-2
答案 1 :(得分:1)
让我猜一下。
有两个应用程序,A和B,它们使用相同的证书签名。
首先,用户开始使用A应用,并在import numpy as np
import time
from openmdao.main.api import Component, Assembly, Driver
from openmdao.lib.datatypes.api import Float, Array
from openmdao.lib.drivers.api import FixedPointIterator, SLSQPdriver, COBYLAdriver
from pyopt_driver.pyopt_driver import pyOptDriver
from pyoptsparse_driver.pyoptsparse_driver import pyOptSparseDriver
class SimpleComp(Component):
x = Float(iotype="in")
y = Float(iotype="out")
def execute(self):
# print 'print'
print 'In SimpleComp, x = %s' % self.x
# time.sleep(2) #slow things down to make the parallization more clear
self.y = self.x*self.x
def provideJ(self):
J = np.zeros((1, 1))
J[0][0] = 2.0*self.x
return J
def list_deriv_vars(self):
return ('x', ), ('y', )
class Summer(Component):
def __init__(self, size):
super(Summer, self).__init__()
self.size = int(size)
for i in xrange(size):
self.add('y_%d'%i, Float(iotype="in"))
self.add('tot', Float(iotype="out"))
def execute(self):
tot = 0
for i in xrange(self.size):
tot += getattr(self, 'y_%d'%i)
self.tot = tot
def provideJ(self):
J = np.ones((1, self.size))
return J
def list_deriv_vars(self):
inputs = ['y_%d'%i for i in range(self.size)]
return inputs, ('tot', )
class Sim(Assembly):
def __init__(self, size):
super(Sim, self).__init__()
# self.add('x', Array(np.zeros(size), dtype='float', iotype='in'))
# self.add('x', Float(iotype='in'))
for i in range(0, size):
self.add('x_%d' % i, Float(iotype='in'))
def configure(self):
#you'll need one process per point
self.add('driver', pyOptSparseDriver())
self.add('parallel_stuff', Driver())
self.driver.optimizer = 'SNOPT'
self.add('summer', Summer(size))
# print self.x
for i in xrange(size):
# print 'x = ', self.x[i]
self.add('point_%d'%i, SimpleComp())
self.connect('x_%d' % i, 'point_%d.x' % i)
self.connect('point_%d.y'%i, 'summer.y_%d'%i)
self.parallel_stuff.workflow.add('point_%d'%i)
self.driver.add_parameter('x_%d' % i, high=10, low=-10)
self.driver.workflow.add(['parallel_stuff', 'summer'])
self.driver.add_objective('summer.tot')
# Don't try to parallelize anything except 'parallel_stuff'
self.driver.system_type = 'serial'
if __name__ == "__main__":
from openmdao.main.api import set_as_top
size = 2
x = np.arange(0, size)
# x = 1.
print x
sim = set_as_top(Sim(size))
for i in range(0, size):
exec('sim.x_%d = x[%d]' % (i, i))
st = time.time()
sim._setup()
sim.run()
print "runtime: ", time.time() - st
print 'y* = %s' % sim.summer.tot
下请求权限EXAMPLE_PERMISSION
,然后系统会给出一个对话框并向用户提示他需要授予权限。用户点击GRANT。
然后,用户启动B app,B app需要相同的权限,PROTECTION_SIGNATURE
,当它请求权限时,系统自动授予该权限。
由于A app已授予它,A和B具有相同的证书。
我想是的。