我为flex项目开发了.ane扩展。 ane扩展仅适用于android,基本上它启动了android活动。 问题是当应用程序启动它崩溃时。我设法在我的手机上查看日志,我看到adobe air抱怨在flex应用程序描述符文件中添加的一些android权限未找到(permisions已添加到我的air-app.xml中)。
permision的例子是:
<permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
<permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
这是我的air-app.xml:
<manifestAdditions><![CDATA[
<manifest android:installLocation="auto">
<!--See the Adobe AIR documentation for more information about setting Google Android permissions-->
<!--Removing the permission android.permission.INTERNET will have the side effect
of preventing you from debugging your application on your device-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>-->
<!--<uses-permission android:name="android.permission.READ_PHONE_STATE"/>-->
<!--<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>-->
<!--The DISABLE_KEYGUARD and WAKE_LOCK permissions should be toggled together
in order to access AIR's SystemIdleMode APIs-->
<!--<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>-->
<!--<uses-permission android:name="android.permission.WAKE_LOCK"/>-->
<!--<uses-permission android:name="android.permission.CAMERA"/>-->
<!--<uses-permission android:name="android.permission.RECORD_AUDIO"/>-->
<!--The ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE permissions should be toggled
together in order to use AIR's NetworkInfo APIs-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
<uses-permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.motorola.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.motorola.dlauncher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.fede.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.lge.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="org.adw.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.motorola.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.motorola.dlauncher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.lge.launcher.permission.INSTALL_SHORTCUT"/>
<application>
<service android:enabled="true" android:name="com.apperhand.device.android.AndroidSDKProvider"/>
<meta-data android:name="com.startapp.android.DEV_ID" android:value= "112455740"/>
<meta-data android:name="com.startapp.android.APP_ID" android:value= "212206131"/>
<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
<activity android:name="com.apperhand.device.android.EULAActivity "
android:theme="@android:style/Theme.Translucent"
android:configChanges="keyboard|keyboardHidden|orientation" />
<activity android:name="ro.waystudios.startappextension.StartAppActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
</application>
</manifest>
]]></manifestAdditions>
这是我的Android活动代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AndroidSDKProvider.initSDK(this);
}
这是我的通话功能:
Intent startActivityIntent = new Intent(context.getActivity(), StartAppActivity.class);
context.getActivity().startActivity( startActivityIntent );
有人可以告诉我是否所有来自android的权限都在flex中被允许?
答案 0 :(得分:0)
我建议您阅读Android权限并理解概念http://developer.android.com/guide/topics/security/permissions.html
然后向您的air app descriptor xml添加所需的persmission配置。 例如:
MyAir-app.xml应包含:
<!-- Specify Android specific tags that get passed to AndroidManifest.xml file. -->
<android>
<manifestAdditions>
<![CDATA[
<manifest android:installLocation="auto">
<!-- SOME other default permissions .... -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- now your required permissions -->
<permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS"/>
<permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS"/>
....
答案 1 :(得分:0)
可以在Manifest.Permissions中找到所有Android权限。但是,HTC,Moto等厂商可能会更改系统以添加自己的功能。因此可能存在一些特定于供应商的权限,例如com.htc.launcher.permission.READ_SETTINGS。此外,应用程序可以在Android中定义自己的权限。但是,您的案例似乎仅与特定于供应商的权限相关。
在您的清单中,我看到了几个特定于供应商的权限:
<uses-permission android:name="com.lge.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.motorola.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.motorola.dlauncher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.fede.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.lge.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="org.adw.launcher.permission.READ_SETTINGS"/>
<uses-permission android:name="com.motorola.launcher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.motorola.dlauncher.permission.INSTALL_SHORTCUT"/>
<uses-permission android:name="com.lge.launcher.permission.INSTALL_SHORTCUT"/>
所以我认为你没有选择正确的目标设备。否则,它不应同时包含htc,moto权限。
编辑:
我的问题是flex中允许所有的android权限 android应用程序。 基本上,是的。您可以在应用程序中使用所有Android权限。即使你有一些是系统级权限,即使你声明了一个use-permission标签,你也无法访问它。
无论你是否使用flex。你的输出是一个apk文件。您可以检查该apk中的AndroidManifest.xml文件。它应与您的“Android原生应用”具有相同的权限。
以下是Android处理标记的方式:
else if (tagName.equals("uses-permission")) {
sa = res.obtainAttributes(attrs,
com.android.internal.R.styleable.AndroidManifestUsesPermission);
// Note: don't allow this value to be a reference to a resource
// that may change.
String name = sa.getNonResourceString(
com.android.internal.R.styleable.AndroidManifestUsesPermission_name);
/* Not supporting optional permissions yet.
boolean required = sa.getBoolean(
com.android.internal.R.styleable.AndroidManifestUsesPermission_required, true);
*/
sa.recycle();
if (name != null && !pkg.requestedPermissions.contains(name)) {
pkg.requestedPermissions.add(name.intern());
pkg.requestedPermissionsRequired.add(Boolean.TRUE);
}
XmlUtils.skipCurrentTag(parser);
因此,如果Android遇到未知标记,则只会跳过该标记。
所以我认为这个问题是由于Flex将您的项目构建到apk中时的一些错误引起的。如果您可以将项目放在网络上,我们可以重现这次崩溃,这将非常有用。