标签: android-manifest

如何在Android中使用自定义权限?

我有两个申请.

一个是宣布许可和单身Activity:

部分的AndroidManifest.xml

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:permission="your.namespace.permission.TEST" >
    <activity
        android:name=".DeclaringPermissionActivity"
        android:label="@string/app_name" >

        <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.VIEW" /> 
         <category android:name="android.intent.category.DEFAULT" /> 
         <category android:name="android.intent.category.BROWSABLE" /> 
         <data android:scheme="myapp"
             android:host="myapp.mycompany.com" /> 
        </intent-filter> 
    </activity>
</application>
Run Code Online (Sandbox Code Playgroud)

第二个声明是使用权限

部分的AndroidManifest.xml

<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="your.namespace.permission.TEST" />

<application
Run Code Online (Sandbox Code Playgroud)

部分Activity:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("myapp://myapp.mycompany.com/index")));
}
Run Code Online (Sandbox Code Playgroud)

我正在安装应用程序声明权限,然后我运行第二个应用程序.

结果我得到安全异常:

 01-11 09:46:55.249: E/AndroidRuntime(347): java.lang.RuntimeException: Unable to start activity ComponentInfo{your.namespace2/your.namespace2.UsingPErmissionActivity}: java.lang.SecurityException: Permission Denial: starting Intent …
Run Code Online (Sandbox Code Playgroud)

permissions android android-manifest

57
推荐指数
3
解决办法
7万
查看次数

清单合并失败错误

我正在将当前项目的大型应用程序移动到Android Studio和Gradle中.我目前陷入以下问题:

Error:(87, 9) Execution failed for task ':App:processDebugManifest'.
> Manifest merger failed : Attribute application@label value=(@string/app_label) from AndroidManifest.xml:87:9
    is also present at ANDROID_APPLICATION:Library:unspecified:9:18 value=(@string/app_name)
    Suggestion: add 'tools:replace="android:label"' to <application> element at AndroidManifest.xml:82:5 to override
Run Code Online (Sandbox Code Playgroud)

我尝试将以下属性添加到主AndroidManifest.xml文件中:

tools:replace="android:label, *App Name*"
tools:replace="android:label, @string/app_label"
tools:replace="android:label"
Run Code Online (Sandbox Code Playgroud)

这些属性定义都不起作用.我究竟做错了什么?

java android gradle android-manifest android-studio

56
推荐指数
3
解决办法
7万
查看次数

Android Studio有两种不同的清单文件

我在为Android Studio中的风格定义两个不同的清单文件时遇到问题.这是我目前的项目结构:

目前的项目结构

AndroidManifest.xmlfree味道是这样的:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="se.example.package">
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xmlmain味道没有用途的权限,但其中包含的是所有口味之间共享清单代码的其余部分.

AndroidManifest.xmlpro味道是这样的:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="se.example.package">
    <uses-permission android:name="com.android.vending.CHECK_LICENSE" />
</manifest>
Run Code Online (Sandbox Code Playgroud)

build.gradle定义了两种风格

productFlavors {
    free {
        applicationId 'se.example.package.free'
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName '1.0'
    }
    pro {
        minSdkVersion 14
        applicationId 'se.example.package.pro'
        targetSdkVersion 21
        versionCode 2
        versionName '1.1'
    }
}
Run Code Online (Sandbox Code Playgroud)

我期待的结果是不同的风格定义了不同的使用权限.不是这种情况.结果目前两种口味仅定义了专业口味中<uses-permission android:name="com.android.vending.CHECK_LICENSE" />定义 …

android android-manifest android-studio android-gradle-plugin

56
推荐指数
5
解决办法
4万
查看次数

Intent.resolveActivity 在 API 30 中返回 null

查看intent.resolveActivity != null 但启动 Intent 会引发 ActivityNotFound 异常,我在打开浏览器或具有深度链接的应用程序时写道:

private fun openUrl(url: String) {
    val intent = Intent().apply {
        action = Intent.ACTION_VIEW
        data = Uri.parse(url)
//        setDataAndType(Uri.parse(url), "text/html")
//        component = ComponentName("com.android.browser", "com.android.browser.BrowserActivity")
//        flags = Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_GRANT_READ_URI_PERMISSION
    }
    val activityInfo = intent.resolveActivityInfo(packageManager, intent.flags)
    if (activityInfo?.exported == true) {
        startActivity(intent)
    } else {
        Toast.makeText(
            this,
            "No application can handle the link",
            Toast.LENGTH_SHORT
        ).show()
    }
}
Run Code Online (Sandbox Code Playgroud)

它不起作用。在 API 30 模拟器中找不到浏览器,而一个常见的解决方案有效:

private fun openUrl(url: String) {
    val intent …
Run Code Online (Sandbox Code Playgroud)

android android-manifest android-intent activitynotfoundexception android-11

56
推荐指数
5
解决办法
2万
查看次数

访问网络状态(ACCESS_NETWORK_STATE)和WIFI状态(ACCESS_WIFI_STATE)权限之间有什么区别?

在Android Manifest的Permissions选项卡中,在下拉列表中有名为android.permission.ACCESS_NETWORK_STATE和的选项android.permission.ACCESS_WIFI_STATE.他们之间有什么区别?是ACCESS_NETWORK_STATE不是更广义的ACCESS_WIFI_STATE

谢谢.

android android-manifest android-permissions

55
推荐指数
2
解决办法
3万
查看次数

在AndroidManifest中添加'tools:replace ="Android:value"'到<meta-data>元素

我正在关注HeadFirst Android开发中的教程并在添加后遇到问题:private ActionBarDrawerToggle drawerToggle;

该控件已弃用,因此我按照Stack上的说明通过将com.android.support:appcompat-v7:26.0.0-alpha1添加到应用程序模块依赖项来解决该问题

但现在我收到以下构建错误:

错误:任务':app:processDebugManifest'的执行失败.

清单合并失败:来自[com.android.support:recyclerview-v7:25.3.1]的属性meta-data#android.support.VERSION@value value =(25.3.1)AndroidManifest.xml:24:9-31也是出现在[com.android.support:appcompat-v7:26.0.0-alpha1] AndroidManifest.xml:27:9-38 value =(26.0.0-alpha1).建议:在AndroidManifest.xml:22:5-24:34中添加'tools:replace ="android:value"'来覆盖.

这是代码:

android gradle android-manifest android-support-library android-studio

55
推荐指数
5
解决办法
5万
查看次数

调试服务

我用远程接口编写了一个服务,并将其安装在我的PC的Eclipse AVD上.我有一个客户端测试工具,它启动并调用服务中的方法.最初我通过控件类和活动安装了服务,我现在已将其删除,因此服务的清单如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.myname.gridservice"
android:versionCode="1"
android:versionName="1.0">
<application
    android:icon="@drawable/icon"
    android:label="@string/app_name"
    android:debuggable="true">
    <service
        android:enabled="true"
        android:debuggable="true"
        android:name="OverlayService">
        <intent-filter>
            <action android:name="com.myname.OverlayService.SERVICE"/>
            <action android:name="com.myname.gridservice.IRemoteInterface" />
        </intent-filter>
    </service>
 </application>  
</manifest>   
Run Code Online (Sandbox Code Playgroud)

所以没有活动标签.

当我从Eclipse中的调试图标启动它时,控制台告诉我它正在安装apk(它是),但它不会显示为调试线程并且不会触发断点,尽管服务的行为是可以的客户看到了它.如果我将服务标签包装在具有关联类的活动标签中并启动它,那么我可以调试它

是否可以调试服务而不将其包装在活动中?

android android-manifest

54
推荐指数
4
解决办法
4万
查看次数

注册活动时的"点"是什么

我是Android OS编程的小伙子.我在书中注意到,当我在清单中注册活动时,作者在活动名称前面放置了一个"点".我查看了Android开发者网站,我无法弄清楚为什么我们需要"点"."点"实际上是服务器的目的吗?我需要它吗?我在下面列举了一个例子.注意"NewActivity"之前的"点":

<activity android:name=".NewActivity"></activity>
Run Code Online (Sandbox Code Playgroud)

android android-manifest

54
推荐指数
2
解决办法
7632
查看次数

设置launchMode ="singleTask"vs设置活动launchMode ="singleTop"

我有一个非常分层的应用程序(活动类似于League> Team> Position> Player)所以我已经完成了每个活动singleTop,以保持导航合理并防止重复实例.

现在我正在制作我的第二个应用程序,我已经看到它建议声明我的应用程序是singleTask为了防止重复的实例.有人可以帮助解释每种方法的优点吗?

我的新应用程序只是一个包含3个片段的活动,然后我可能会添加一个设置活动,也许还有一个FAQ.

编辑:我刚刚意识到这singleTask并没有像我想象的那样阻止我的应用程序的重复实例.现在正在寻找处理这个问题的正确方法......

android android-manifest android-activity android-navigation

53
推荐指数
4
解决办法
4万
查看次数

Android X:工具:替换为line:for属性,但没有指定新值

我在这个网站上尝试了很多解决方案,但问题仍未解决.问题是由于Android X库.当我添加Android X时,此问题已得到解决,但它开启了新问题.我不想添加Android X.如何解决这个问题?

早些时候这个错误即将来临:

Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
Suggestion: add 'tools:replace="android:appComponentFactory"' to <application> element at AndroidManifest.xml:19:5-142:19 to override.
Run Code Online (Sandbox Code Playgroud)

我添加后tools:replace="android:appComponentFactory",出现此错误:

 java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs
at com.android.builder.core.AndroidBuilder.mergeManifestsForApplication(AndroidBuilder.java:540)    
at com.android.build.gradle.tasks.MergeManifests.doFullTaskAction(MergeManifests.java:173)
Run Code Online (Sandbox Code Playgroud)

合并错误(在Android Manifest中):

错误:工具:替换为line:2指定属性android:appComponentFactory,但没有指定新值的应用程序主清单(此文件),第1行

表现:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    package="com.example"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:replace="allowBackup, android:appComponentFactory"
    android:allowBackup="false">

    ...

    <application
        android:name="com.example"
        android:icon="@mipmap/icon"
        android:debuggable="true"
        android:hardwareAccelerated="false"
        android:largeHeap="true"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:allowBackup="false"
        tools:ignore="GoogleAppIndexingWarning,HardcodedDebugMode">
       ...
Run Code Online (Sandbox Code Playgroud)

模块级build.gradle中的依赖项块:

Manifest merger failed : Attribute …
Run Code Online (Sandbox Code Playgroud)

java android android-manifest android-gradle-plugin androidx

53
推荐指数
6
解决办法
5万
查看次数