公司网站建设中心,重庆seo霸屏,vs2008 新建网站,wordpress博客小工具标签问题背景 
当自写APP发现无缘无故多申请了多个权限,其中一个就是:android.permission.WAKE_LOCK. 一想就知道如果并非自己在APP main中引入的,那就是依赖的库清单文件导入进来的. 定位问题 
定位手段 
1.manifest-merger-buildVariant-report.txt 根据其内容可知, WAKE_LOCK 权…问题背景 
当自写APP发现无缘无故多申请了多个权限,其中一个就是:android.permission.WAKE_LOCK. 一想就知道如果并非自己在APP main中引入的,那就是依赖的库清单文件导入进来的. 定位问题 
定位手段 
1.manifest-merger-buildVariant-report.txt 根据其内容可知, WAKE_LOCK 权限来源于work-runtime-2.7.0的库依赖,其清单文件中的25行5-68个字符. 
uses-permission#android.permission.WAKE_LOCK
ADDED from [androidx.work:work-runtime:2.7.0] /home/user/.gradle/caches/transforms-3/603a5a760e085f6144531debd6660c46/transformed/work-runtime-2.7.0/AndroidManifest.xml:25:5-68 
2.自编AndroidManifest.xml中选中Merged manifest, 通过查看预览merge视图定位来源. 从上视图查看就更加直观了.选中被merge进来的元素,右侧会预览显示merging log. 直接双击该行被引入的元素, 会自动跳转到对应work-runtime的清单文件中. 
其内容如下: ?xml version1.0 encodingutf-8?
!--~ Copyright (C) 2016 The Android Open Source Project~~ Licensed under the Apache License, Version 2.0 (the License);~ you may not use this file except in compliance with the License.~ You may obtain a copy of the License at~~      http://www.apache.org/licenses/LICENSE-2.0~~ Unless required by applicable law or agreed to in writing, software~ distributed under the License is distributed on an AS IS BASIS,~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.~ See the License for the specific language governing permissions and~ limitations under the License.
--
manifest xmlns:androidhttp://schemas.android.com/apk/res/androidxmlns:toolshttp://schemas.android.com/toolspackageandroidx.work uses-sdkandroid:minSdkVersion14android:targetSdkVersion31 /uses-permission android:nameandroid.permission.WAKE_LOCK /uses-permission android:nameandroid.permission.ACCESS_NETWORK_STATE /uses-permission android:nameandroid.permission.RECEIVE_BOOT_COMPLETED /uses-permission android:nameandroid.permission.FOREGROUND_SERVICE /applicationproviderandroid:nameandroidx.startup.InitializationProviderandroid:authorities${applicationId}.androidx-startupandroid:exportedfalsetools:nodemerge meta-dataandroid:nameandroidx.work.WorkManagerInitializerandroid:valueandroidx.startup //providerserviceandroid:nameandroidx.work.impl.background.systemalarm.SystemAlarmServiceandroid:directBootAwarefalseandroid:enabledbool/enable_system_alarm_service_defaultandroid:exportedfalsetools:targetApin /serviceandroid:nameandroidx.work.impl.background.systemjob.SystemJobServiceandroid:directBootAwarefalseandroid:enabledbool/enable_system_job_service_defaultandroid:exportedtrueandroid:permissionandroid.permission.BIND_JOB_SERVICEtools:targetApin /serviceandroid:nameandroidx.work.impl.foreground.SystemForegroundServiceandroid:directBootAwarefalseandroid:enabledbool/enable_system_foreground_service_defaultandroid:exportedfalsetools:targetApin /receiverandroid:nameandroidx.work.impl.utils.ForceStopRunnable$BroadcastReceiverandroid:directBootAwarefalseandroid:enabledtrueandroid:exportedfalsetools:targetApin /receiverandroid:nameandroidx.work.impl.background.systemalarm.ConstraintProxy$BatteryChargingProxyandroid:directBootAwarefalseandroid:enabledfalseandroid:exportedfalsetools:targetApin intent-filteraction android:nameandroid.intent.action.ACTION_POWER_CONNECTED /action android:nameandroid.intent.action.ACTION_POWER_DISCONNECTED //intent-filter/receiverreceiverandroid:nameandroidx.work.impl.background.systemalarm.ConstraintProxy$BatteryNotLowProxyandroid:directBootAwarefalseandroid:enabledfalseandroid:exportedfalsetools:targetApin intent-filteraction android:nameandroid.intent.action.BATTERY_OKAY /action android:nameandroid.intent.action.BATTERY_LOW //intent-filter/receiverreceiverandroid:nameandroidx.work.impl.background.systemalarm.ConstraintProxy$StorageNotLowProxyandroid:directBootAwarefalseandroid:enabledfalseandroid:exportedfalsetools:targetApin intent-filteraction android:nameandroid.intent.action.DEVICE_STORAGE_LOW /action android:nameandroid.intent.action.DEVICE_STORAGE_OK //intent-filter/receiverreceiverandroid:nameandroidx.work.impl.background.systemalarm.ConstraintProxy$NetworkStateProxyandroid:directBootAwarefalseandroid:enabledfalseandroid:exportedfalsetools:targetApin intent-filteraction android:nameandroid.net.conn.CONNECTIVITY_CHANGE //intent-filter/receiverreceiverandroid:nameandroidx.work.impl.background.systemalarm.RescheduleReceiverandroid:directBootAwarefalseandroid:enabledfalseandroid:exportedfalsetools:targetApin intent-filteraction android:nameandroid.intent.action.BOOT_COMPLETED /action android:nameandroid.intent.action.TIME_SET /action android:nameandroid.intent.action.TIMEZONE_CHANGED //intent-filter/receiverreceiverandroid:nameandroidx.work.impl.background.systemalarm.ConstraintProxyUpdateReceiverandroid:directBootAwarefalseandroid:enabledbool/enable_system_alarm_service_defaultandroid:exportedfalsetools:targetApin intent-filteraction android:nameandroidx.work.impl.background.systemalarm.UpdateProxies //intent-filter/receiverreceiverandroid:nameandroidx.work.impl.diagnostics.DiagnosticsReceiverandroid:directBootAwarefalseandroid:enabledtrueandroid:exportedtrueandroid:permissionandroid.permission.DUMPtools:targetApin intent-filteraction android:nameandroidx.work.diagnostics.REQUEST_DIAGNOSTICS //intent-filter/receiver/application/manifest 
从清单文件中可知,其中被默认引入了很多androidx相关的能力, 尽管我们自己定义的demo的AndroidManifest.xml很简单. 这时候可能根据自身情况看是否引入了过多不必要的dependencies依赖库. 3.清单文件合并规则 
更多清单文件的合并规则,可以参考android开发者网站官方说明. 
管理清单文件  |  Android Studio  |  Android Developers (完)