我最近创建了一个项目并添加了一个启动和主要活动.我编辑了清单文件,并将启动活动和主要活动添加到其中.添加主活动后,它会向我发出警告"导出的活动不需要权限".这给了我什么警告?我的API版本是android:15.
请帮帮忙,谢谢!
这是我的清单文件!
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.sliit.droidman"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="15" />
<application android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:theme="@style/AppTheme">
<activity
android:name=".SplashActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name="com.sliit.droidman.main.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="com.sliit.droidman.main.MAINACTIVITY" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud) 有没有办法让我的应用程序从AndroidManifest.xml知道android:versionCode,还是我必须在我的一个类中创建一个单独的常量?
我在我的应用程序中有两个活动,一个是启动器,另一个是从第一个启动的显式调用.
这里我的问题是,当我通过从第二个活动按下主页键返回主屏幕并启动应用程序时,即使第二个活动已经在后台,第一个活动也会启动.
编写第一个Activity是为了下载应用程序工作所需的资产,一旦下载资产,它就会触发第二个活动并调用自我完成.
以下是我的应用程序清单.
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="14" />
<application android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
<! Download the Required Assets if not found on SD Card -->
<activity android:name=".ContentDownload"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|locale"
android:launchMode="singleTask"
android:alwaysRetainTaskState="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity android:name=".ActualAppActivity"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|locale"
android:launchMode="singleTask"
android:alwaysRetainTaskState="true"
/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<supports-screens android:smallScreens="false" android:normalScreens="true" android:largeScreens="true" android:anyDensity="true"/>
Run Code Online (Sandbox Code Playgroud)
有人可以指导我如何使第二个活动直接获得控制,而不是在调用启动器并且它在后台时再次通过第一个活动.
下面是我的onResult回拨方法. …
我在这里已经阅读了类似的问题,但我仍然不清楚几件事情.使用库项目意味着我的整个项目将有两个清单 - 一个用于库,另一个用于"主"应用程序项目 - 我不清楚是什么或哪些有冗余.
我正在开发一个带有"精简"和"付费"版本的应用程序小部件,因此几乎所有代码都在库项目中.作为一个小部件,该库至少会有一个接收器,一个服务,一个配置活动,以及其他一些活动.那么应该在哪里声明这些组件的完整声明 - 包括意图,过滤器等?它们是在库的清单中,还是在应用程序包本身的清单中,引用库中的类(例如android:name ="com.foo.mylibrary.MyService")?
我看过的一些例子似乎在两个清单中都声明了它们,但我怀疑将它们放在一个或另一个中是一个无操作.
android android-manifest android-service android-library android-activity
当我在adb中键入命令时:
./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos pkg=com.myapp }
Error: Activity not started, unable to resolve Intent { act=android.intent.action.VIEW dat=example://gizmos flg=0x10000000 pkg=com.myapp }
Run Code Online (Sandbox Code Playgroud)
但是当我在adb中输入命令时:
./adb shell am start -W -a android.intent.action.VIEW -d "example:gizmos" com.myapp.activity.DeepLinkActivity
Run Code Online (Sandbox Code Playgroud)
一切正常,我收到消息,我可以在手机上看到活动的启动:
Starting: Intent { act=android.intent.action.VIEW dat=example://gizmos cmp=com.myapp.activity.DeepLinkActivity }
Status: timeout
Activity: com.myapp.activity.DrawerActivity
Complete
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么我需要获得我的活动的完整路径,而不仅仅是包名?因为当外部应用程序或浏览器尝试深层链接时,它们不会调用我的应用程序中的活动.
这是我的AndroidManifest.xml
<activity
android:name=".activity.DeepLinkActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud) 在Play开发者控制台中,它说:
您的APK似乎不是专为平板电脑设计的
但我添加了layout-sw600dp,layout-sw600dp-land,layout-sw720dp和layout-sw720dp-land文件夹的布局.完整的清单(原样):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.technicosa.unjumble"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="18" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock.Light.DarkActionBar" >
<activity
android:name="com.technicosa.unjumble.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.technicosa.unjumble.UserSettingsActivity"
android:label="@string/title_activity_user_settings" >
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
该应用程序在模拟器中的Nexus 7和Nexus 10上运行完美.同样在开发者控制台的优化提示下,它说:
您的制作APK需要符合以下条件:使用10英寸平板电脑上的可用屏幕空间
我的应用的截图:

虽然应用程序似乎在平板电脑上运行(我只在模拟器上测试过),但必须采取哪些措施来满足Play标准?
我发现在我的应用程序中,用户可以在用户使用应用程序时打开的各种活动中完全"嵌套".
例如:
现在,当用户按下时,它必须经过两次"对象子细节"(相同的对象,当它被编辑时返回到详细页面),"父对象细节"也会发生同样的事情.
有没有办法重用活动,如果它们已经在堆栈中打开,并将它们重新排序到前面?我看到的唯一方法是使用该launcher属性进行活动.我相信我看到的singleTask和singleTop.
如果我应该使用这两个属性,singleTask并且singleTop我应该如何使用它们?当我试图将它们包含在应用程序中时,它没有任何区别.使用时启动意图时是否还需要设置标志startActivity?
我正在寻找摆脱警告的解决方案.我甚至不明白它出现的原因.我看了一个没有出现警告的SDK示例.
首先,这是我的清单,我收到警告导出的服务不需要许可:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="15" />
<uses-feature android:name="android.hardware.camera"
android:required="true" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.Sherlock">
<service
android:name=".AuthenticationService"
android:exported="true">
<intent-filter>
<action
android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator" />
</service>
<activity
android:name=".Test"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
Run Code Online (Sandbox Code Playgroud)
虽然Android SDK 的SampleSyncAdapter具有以下清单:
<?xml version="1.0" …Run Code Online (Sandbox Code Playgroud) android warnings android-manifest android-service android-activity
我正在尝试实现新的Android 照片选择器,但在尝试在旧设备上设置自动安装向后移植的照片选择器模块时遇到了问题。
根据文档,我们需要将以下内容添加到应用程序的清单文件中以允许这样做:
<!-- Trigger Google Play services to install the backported photo picker module -->
<service android:name="com.google.android.gms.metadata.ModuleDependencies"
android:enabled="false"
android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.metadata.MODULE_DEPENDENCIES" />
</intent-filter>
<meta-data android:name="photopicker_activity:0:required" android:value="" />
</service>
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我在 Android Studio 中收到有关“com.google.android.gms.metadata.ModuleDependency”未被识别或解析的错误。
我们该如何解决这个问题?
根据此文档,我们不再需要在 AndroidManifest.xml 中提供包名称,而是在 build.gradle 中使用命名空间,我们可以在其中定义包名称。
package="org.sample.domain" found in source AndroidManifest.xml: C:\Users\user\Desktop\Projects\Sample\app\libs\sample\src\main\AndroidManifest.xml.
Setting the namespace via a source AndroidManifest.xml's package attribute is deprecated.
Please instead set the namespace (or testNamespace) in the module's build.gradle file, as described here: https://developer.android.com/studio/build/configure-app-module#set-namespace
This migration can be done automatically using the AGP Upgrade Assistant, please refer to https://developer.android.com/studio/build/agp-upgrade-assistant for more information.
Run Code Online (Sandbox Code Playgroud)
但执行此操作后,“合并清单”选项卡会显示错误,指出我没有提供包名称。我同时尝试了两者,但警告版本再次显示。
android android-manifest android-studio android-gradle-plugin
android ×10
android-manifest ×10
adb ×1
deep-linking ×1
google-play ×1
photo-picker ×1
tablet ×1
warnings ×1