Android应用生死轮回的那些事儿(6) - 武器库完结篇

Android应用生死轮回的那些事儿(6) - 武器库完结篇

资源相关API

这些API虽然数量众多,但是功能相对简单,都是根据包头或者是ApplicationInfo或Activity信息去获取一些资源,如图标,文本等。

Android 1.0创始API

  • getXml:获取xml
  • getText:从资源中读取文本
  • getResourcesForApplication(app):获取资源对象
  • getResourcesForApplication(appPackageName):获取资源对象
  • getResourcesForActivity:从Activity中获取资源对象
  • getDrawable:获取Drawable
  • getDefaultActivityIcon:Activity的默认Icon
  • getApplicationLabel:获取Applicaiton的标签
  • getApplicationIcon:获取图标
  • getActivityIcon:获取图标

Android 2.3新增API

Android 2.3新增两个API,都是跟Logo相关。

  • getApplicationLogo
  • getActivityLogo

Android 4.4手表版新增API

手表上新增了Banner.

  • getApplicationBanner
  • getActivityBanner

Android 5.0新增API

Android 5.0新增了UserBadged UI,所以新增了三个方法:

  • getUserBadgedLabel
  • getUserBadgedIcon
  • getUserBadgedDrawableForDensity

禁掉或者解禁相关API

Android中可以支持将应用或者组件禁掉或者解禁。
ComponentEnableSetting是通过组件名来设置,ApplicationEnableSetting是通过包名。

  • setComponentEnabledSetting
  • getComponentEnabledSetting
  • setApplicationEnabledSetting
  • getApplicationEnabledSetting

setApplicationEnabledSetting

原型:

void setApplicationEnabledSetting (String packageName, int newState, int flags)

参数:

  • 包名
  • 新状态:状态请见下面的3种。
  • 标志位:要么是DONT_KILL_APP,要么是0.

状态可以为:

  • COMPONENT_ENABLED_STATE_ENABLED
  • COMPONENT_ENABLED_STATE_DISABLED
  • COMPONENT_ENABLED_STATE_DEFAULT

例程:禁掉微信:

    public void testSetApplicationEnableSetting() {
        mPm.setApplicationEnabledSetting("com.tencent.mm", PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
    }

setComponentEnabledSetting

将包中的四大组件之一禁掉或解禁。

原型:

void setComponentEnabledSetting (ComponentName componentName, int newState, int flags);

参数与上面的针对整个应用的一致。

检查签名

Android 1.0时,只能检查两个包名的签名是否一致。

原型:

int checkSignatures (String pkg1, String pkg2);

到了Android 2.0,也可以支持对两个uid之间判断签名。
问题是,从包名获取uid的API,要到Android 7.0才有呢。。。

原型:

int checkSignatures (int uid1, int uid2);

Prefer相关

addPackageToPreferred API已经在Android 2.1被除名,所以Prefer相关的API,只剩下下面三个:

  • getPreferredPackages
  • getPreferredActivities
  • clearPackagePreferredActivities

至此,Android 1.0的PackageManager提供的46个API全部讲完了。

feature相关API

Android 2.0开始引入feature的概念。我们可以通过getSystemAvailableFeatures方法获取系统支持哪些feature. 或者是通过hasSystemFeature(name)方法判断是否支持一个feature.
不过,Android 2.0的时候,feature是不分版本号的。支持版本号的或者是通过hasSystemFeature方法要到Android 7.0才会出品。

FeatureInfo类

属性:

  • flags: FLAG_REQUIRED或0
  • name:属性名
  • reqGlEsVersion:在name为空时,为需要的OpenGL ES的版本号
  • version:(Android 7.0才有)版本号

方法:

  • getGlEsVersion(): 0x00010002代表1.2

getSystemAvailableFeatures

原型:

FeatureInfo[] getSystemAvailableFeatures ();

例程:

    public void testGetSystemAvailableFeatures(){
        final FeatureInfo[] fis = mPm.getSystemAvailableFeatures();
        if(fis!=null){
            for(FeatureInfo fi:fis){
                Log.d(TAG,"Feature Info:"+fi.toString());
            }
        }
    }

输出结果:

08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{385e67d android.hardware.sensor.proximity fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{deb6972 android.hardware.sensor.accelerometer fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{788d1c3 android.hardware.faketouch fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{4fcea40 android.hardware.usb.accessory fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{c8f6d79 android.software.backup fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{102aabe android.hardware.touchscreen fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{b1cc71f android.hardware.touchscreen.multitouch fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{e66a6c android.software.print fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{2106835 android.software.voice_recognizers fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{ebab4ca android.hardware.sensor.gyroscope fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{6d0b63b android.hardware.bluetooth fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{b05c158 android.hardware.camera.autofocus fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{46c52b1 android.hardware.telephony.gsm fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{9375396 android.hardware.usb.host fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{40a7b17 android.hardware.audio.output fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{4c19b04 android.hardware.camera.flash fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{cc268ed android.hardware.camera.front fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{f0d1322 android.hardware.screen.portrait fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{2b1b1b3 android.software.home_screen fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{d3f6370 android.hardware.microphone fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{ce9a6e9 android.hardware.bluetooth_le fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{18d3f6e android.hardware.touchscreen.multitouch.jazzhand fl=0x0}
08-17 11:40:49.889 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{f8bb60f android.software.app_widgets fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{e8f469c android.software.input_methods fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{32cc8a5 android.hardware.sensor.light fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{3d1e47a android.software.device_admin fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{457a42b android.hardware.camera fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{1983088 android.hardware.screen.landscape fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{dc64a21 android.software.managed_users fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{e89ce46 android.software.webview fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{daa5807 android.hardware.camera.any fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{4c3cd34 android.software.connectionservice fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{a1c675d android.hardware.touchscreen.multitouch.distinct fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{48488d2 android.hardware.location.network fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{28a6da3 android.hardware.wifi.direct fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{16a88a0 android.software.live_wallpaper fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{bbd1c59 android.hardware.location.gps fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{3fe601e android.hardware.wifi fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{9cc40ff android.hardware.location fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{bff8ecc android.hardware.telephony fl=0x0}
08-17 11:40:49.890 17111-17111/com.yunos.xulun.testcppjni2 D/TestPackageManager: Feature Info:FeatureInfo{71a2515 glEsVers=3.0 fl=0x0}

上面都是feature,最后一条是openGLES的版本号:3.0

hasSystemFeature

原型:

boolean hasSystemFeature (String name);

feature的取值可以是下面的字符串:

  • API 7 (Android 2.1)开始支持的feature

    • FEATURE_CAMERA
    • FEATURE_CAMERA_AUTOFOCUS
    • FEATURE_CAMERA_FLASH
    • FEATURE_LIVE_WALLPAPER
    • FEATURE_SENSOR_LIGHT
    • FEATURE_SENSOR_PROXIMITY
    • FEATURE_TELEPHONY
    • FEATURE_TELEPHONY_CDMA
    • FEATURE_TOUCHSCREEN_MULTITOUCH
  • API 8 (Android 2.2)开始支持的feature
    • FEATURE_BLUETOOTH
    • FEATURE_LOCATION
    • FEATURE_LOCATION_GPS
    • FEATURE_LOCATION_NETWORK
    • FEATURE_MICROPHONE
    • FEATURE_SENSOR_ACCELEROMETER
    • FEATURE_SENSOR_COMPASS
    • FEATURE_TOUCHSCREEN
    • FEATURE_TOUCHSCREEN_MULTITOUCH_DISTINCT
    • FEATURE_WIFI
  • API 9 (Android 2.3)
    • FEATURE_AUDIO_LOW_LATENCY
    • FEATURE_CAMERA_FRONT
    • FEATURE_NFC
    • FEATURE_SENSOR_BAROMETER
    • FEATURE_SENSOR_GYROSCOPE
    • FEATURE_SIP
    • FEATURE_SIP_VOIP
    • FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND
  • API 11 (Android 3.0)
    • FEATURE_FAKETOUCH
  • API 12 (Android 3.1)
    • FEATURE_USB_ACCESSORY
    • FEATURE_USB_HOST
  • API 13 (Android 3.2)
    • FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT
    • FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND
    • FEATURE_SCREEN_LANDSCAPE
    • FEATURE_SCREEN_PORTRAIT
  • API 14 (Android 4.0)
    • FEATURE_WIFI_DIRECT
  • API 17 (Android 4.2)
    • FEATURE_CAMERA_ANY
  • API 18 (Android 4.3)
    • FEATURE_APP_WIDGETS
    • FEATURE_BLUETOOTH_LE
    • FEATURE_HOME_SCREEN
    • FEATURE_INPUT_METHODS
  • API 19 (Android 4.4)
    • FEATURE_CONSUMER_IR
    • FEATURE_DEVICE_ADMIN
    • FEATURE_NFC_HOST_CARD_EMULATION
    • FEATURE_SENSOR_STEP_COUNTER
    • FEATURE_SENSOR_STEP_DETECTOR
  • API 20 (Android 4.4 Watch)
    • FEATURE_BACKUP
    • FEATURE_CAMERA_EXTERNAL
    • FEATURE_PRINTING
    • FEATURE_SENSOR_HEART_RATE
    • FEATURE_WATCH
    • FEATURE_WEBVIEW
  • API 21 (Android 5.0)
    • FEATURE_AUDIO_OUTPUT
    • FEATURE_CAMERA_CAPABILITY_MANUAL_POST_PROCESSING
    • FEATURE_CAMERA_CAPABILITY_MANUAL_SENSOR
    • FEATURE_CAMERA_CAPABILITY_RAW
    • FEATURE_CAMERA_LEVEL_FULL
    • FEATURE_CONNECTION_SERVICE
    • FEATURE_GAMEPAD
    • FEATURE_LEANBACK
    • FEATURE_LIVE_TV
    • FEATURE_MANAGED_USERS
    • FEATURE_OPENGLES_EXTENSION_PACK
    • FEATURE_SECURELY_REMOVES_USERS
    • FEATURE_SENSOR_AMBIENT_TEMPERATURE
    • FEATURE_SENSOR_HEART_RATE_ECG
    • FEATURE_SENSOR_RELATIVE_HUMIDITY
    • FEATURE_VERIFIED_BOOT
  • API 23 (Android 6.0)
    • FEATURE_AUDIO_PRO
    • FEATURE_AUTOMOTIVE
    • FEATURE_FINGERPRINT
    • FEATURE_HIFI_SENSORS
    • FEATURE_MIDI
  • API 24 (Android 7.0)
    • FEATURE_ETHERNET
    • FEATURE_FREEFORM_WINDOW_MANAGEMENT
    • FEATURE_NFC_HOST_CARD_EMULATION_NFCF
    • FEATURE_PICTURE_IN_PICTURE
    • FEATURE_VR_MODE
    • FEATURE_VR_MODE_HIGH_PERFORMANCE
    • FEATURE_VULKAN_HARDWARE_LEVEL
    • FEATURE_VULKAN_HARDWARE_VERSION

包名转换API - Android 2.2新增

原型:

String[] currentToCanonicalPackageNames (String[] names);
String[] canonicalToCurrentPackageNames (String[] names)

例程:

    public void testCurrentToCanonicalPackageNames(){
        String[] canonicalNames = mPm.currentToCanonicalPackageNames(new String[]{
                "com.yunos.xulun.testcppjni2","com.tencent.mm","com.taobao.taobao"});

        if(canonicalNames!=null) {
            for (String name : canonicalNames) {
                Log.d(TAG, "CanonicalName is:"+name);
            }
        }
    }

Android 1.0 PackageManager API总结

我们小结一下Android 1.0的46个PackageManager API:

  • 权限相关

    • removePermission
    • queryPermissionsByGroup
    • getPermissionInfo
    • getPermissionGroupInfo
    • getAllPermissionGroups
    • checkPermission
    • addPermission
  • 禁掉组件相关
    • setComponentEnabledSetting
    • getComponentEnabledSetting
    • setApplicationEnabledSetting
    • getApplicationEnabledSetting
  • 最佳匹配组件
    • resolveService
    • resolveContentProvider
    • resolveActivity
  • query组件
    • queryIntentServices
    • queryIntentActivityOptions
    • queryIntentActivities
    • queryBroadcastReceivers
    • queryInstrumentation
    • queryContentProviders
  • uid/gid相关
    • getPackagesForUid
    • getNameForUid
    • getPackageGids(packageName)
  • get组件集合
    • getInstalledPackages
    • getInstalledApplications
  • get单个组件
    • getPackageArchiveInfo
    • getInstrumentationInfo
    • getApplicationInfo
    • getActivityInfo
    • getPackageInfo
    • getServiceInfo
    • getReceiverInfo
  • 获取资源
    • getXml
    • getText
    • getResourcesForApplication(app)
    • getResourcesForApplication(appPackageName)
    • getResourcesForActivity
    • getDrawable
    • getDefaultActivityIcon
    • getApplicationLabel
    • getApplicationIcon
    • getActivityIcon
  • 最爱组件相关
    • getPreferredPackages
    • getPreferredActivities
    • clearPackagePreferredActivities
  • 比较签名
    • checkSignatures(pkg,pkg)

Android 1.5新增Package API总结

API 3 (Android 1.5)新增了3个API:

  • getLaunchIntentForPackage
  • isSafeMode
  • getSystemSharedLibraryNames

isSafeMode

是否处于安全模式。

getSystemSharedLibraryNames

返回so库的路径

Android 2.0新增API总结

API 5 (Android 2.0)新增4个API,前面已经都讲过了。

  • getInstallerPackageName
  • checkSignatures(uid1,uid2)
  • hasSystemFeature(name)
  • getSystemAvailableFeatures

Android 2.2新增API总结

API 8 (Android 2.2)新增3个API,2个名义包名转换的,还有一个权限管理的,前面都已经讲过了。

  • currentToCanonicalPackageNames
  • canonicalToCurrentPackageNames
  • addPermissionAsync

Android 2.3新增API总结

API 9 (Android 2.3)新增3个API,一个是getProviderInfo,终于把四大组件的getAPI凑齐了。另外从本版开始有了Logo的概念。

  • getProviderInfo
  • getApplicationLogo
  • getActivityLogo

Android 3.0新增API总结

API 11 (Android 3.0)只增加一个API,为2.0的getInstallerPackageName提供一个setter接口。

  • setInstallerPackageName

Android 4.0新增API总结

API 14 (Android 4.0)也只增加一个API,用于安装时校验。

  • verifyPendingInstall

Android 4.2新增API总结

API 17 (Android 4.2)只增加一个API,其实是对于上一个API的补足。

  • extendVerificationTimeout

Android 4.3新增API总结

API 18 (Android 4.3)新增一个权限相关API

  • getPackagesHoldingPermissions

Android 4.4新增API总结

API 19 (Android 4.4)只新增一个API,终于可以通过Intent查询ContentProvider了

  • queryIntentContentProviders

Android 4.4手表版新增API总结

API 20 (KITKAT_WATCH)新增两个Banner相关API.

  • getApplicationBanner
  • getActivityBanner

Android 5.0新增API总结

API 21 (Android 5.0)新增5个API,前三个是UserBadged界面相关。
第4个提供了PackageInstaller的接口。
最后一个是Leanback界面下获取Launch intent的API

  • getUserBadgedLabel
  • getUserBadgedIcon
  • getUserBadgedDrawableForDensity
  • getPackageInstaller
  • getLeanbackLaunchIntentForPackage

Android 6.0新增API总结

API 23 (Android 6.0)只增加一个权限相关API

  • isPermissionRevokedByPolicy

Android 7.0新增API总结

API 24 (Android 7.0)新增3个API。
systemm feature开始支持版本号。
终于可以获取package的uid了。

  • hasSystemFeature(name,version)
  • getPackageUid
  • getPackageGids(name,flags)
时间: 2024-09-22 14:02:08

Android应用生死轮回的那些事儿(6) - 武器库完结篇的相关文章

Android应用生死轮回的那些事儿(4) - 武器库(2)-应用组件查询相关API

Android应用生死轮回的那些事儿(4) - 武器库(2)-应用组件查询相关API 这一节我们将学习: 如何查询系统中安装了哪些应用 如何获取一个包的信息 如何获取一个Application的信息 如何获取系统中安装的所有的ContentProvider的信息 如何获取一个uid中运行的所有的包 如何查询一个uid的进程名 如何通过一个广播Intent查询接受这个广播所有的BroadcastReceiver 得到一个Intent,如何寻找执行它的最佳的Activity,Service或Cont

Android应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关API

Android应用生死轮回的那些事儿(3) - 武器库(1)-权限管理相关API PackageManager中提供的武器,可以用"既多又杂,版本变化大"来形容. 不过,我们通过分类和排序的方法将它们组织起来,让开发者同学们可以学会使用这些强大的武器! 这一节我们将学习: 如何查询系统中都有哪些权限组 每个权限组都有些什么权限 如何查询是否被授予某一权限 如何查询都有哪些应用申请了某一项权限 权限相关API及其发展史 我们先看第一个大族的API,Permission相关的API 创始成

Android应用生死轮回的那些事儿(5) - 武器库(3)- Installer相关工具

Android应用生死轮回的那些事儿(5) - 武器库(3)- Installer相关工具 Install相关的API,在Android 1.0时一个也没有.全是后续陆续增加进来的. 我们来看看他们的历史. 我们发现,除了4.2的是补充4.0的以外,基本上全是逢大版本才有更新:2.0,3.0,4.0,5.0都有新货. Install相关的API发展史 Android 2.0新增的API - getInstallerPackageName 功能:获取安装器的名字. getter在Android 2

Android应用生死轮回的那些事儿(1) - installd初探

Android应用生死轮回的那些事儿(1) - installd初探 前面我们讨论过dex2oat的过程,下面我们开始探索系统中的重要工具进程,installd守护进程. 我们有PackageManageService这么大的组件了,为什么还需要installd这个守护进程呢? 一句话,是因为权限的问题,PMS只有system权限.installd的作用就是处理需要root权限的操作. installd支持的命令列表 4.4中的cmds 4.4版中的命令只有16个 struct cmdinfo

Android应用生死轮回的那些事儿(2) - PackageManager

Android应用生死轮回的那些事儿(2) - PackageManager PMS对外的接口 如我们上节所讲,在Android中,为应用包的安装,删除各种操作服务的,是PackageManagerSerivce,简称PMS. 如果想要调用PMS的服务,则可以通过Context去调用getPackageManager方法. 这个定义于Context.java中: /* Return PackageManager instance to find global package informatio

Android应用生死轮回的那些事儿(7) - PackageManager的不公开API

Android应用生死轮回的那些事儿(7) - PackageManager的不公开API 前面,我们花了相当多的篇幅把PackageManager的公开API分门别类,并按版本顺序讲解了发展的过程. 有的同学问了,既然installer相关的API在Android 5.0才引入,那么Android 4.4及之前的应用安装的程序是怎么写出来的呢? 答案是,还有未公开的内部API啊. 这些API有些在未来的版本中就被转正了. Android 4.4时代的隐藏API Android 4.4的不公开A

打飞机游戏终极BOSS Android实战打飞机游戏完结篇_Android

本文实例为大家分享了打飞机游戏BOSS以及胜利失败页面设计的Android代码,具体内容如下 修改子弹类: public class Bullet { //子弹图片资源 public Bitmap bmpBullet; //子弹的坐标 public int bulletX, bulletY; //子弹的速度 public int speed; //子弹的种类以及常量 public int bulletType; //主角的 public static final int BULLET_PLAYE

打飞机游戏终极BOSS Android实战打飞机游戏完结篇

本文实例为大家分享了打飞机游戏BOSS以及胜利失败页面设计的Android代码,具体内容如下 修改子弹类: public class Bullet { //子弹图片资源 public Bitmap bmpBullet; //子弹的坐标 public int bulletX, bulletY; //子弹的速度 public int speed; //子弹的种类以及常量 public int bulletType; //主角的 public static final int BULLET_PLAYE

云栖Android精华文章合集

云栖Android精彩文章整理自各位技术大咖们关于Android的精彩分享,本文将云栖Android精彩文章整理成为一个合集,以便于大家学习参考.Weex.apk瘦身.开发资源.应用维护.内存管理,一切尽在云栖Android精华文章合集. 云课堂: Android平台页面路由框架ARouter最佳实践 聚能聊: Android_Studio_那些年你常用的神奇快捷键及遇到的糗事儿 文章干货: 安全: APP漏洞扫描器之未使用地址空间随机化 [安全攻防挑战]Androidapp远程控制实战 你必须