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

简介: PackageManager武器库的完结篇,让我们梳理一下从Android 1.0到Android 7.0的发展过程吧。

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)
目录
相关文章
|
15天前
|
JSON Java Android开发
探索安卓开发之旅:打造你的第一个天气应用
【10月更文挑战第30天】在这个数字时代,掌握移动应用开发技能无疑是进入IT行业的敲门砖。本文将引导你开启安卓开发的奇妙之旅,通过构建一个简易的天气应用来实践你的编程技能。无论你是初学者还是有一定经验的开发者,这篇文章都将成为你宝贵的学习资源。我们将一步步地深入到安卓开发的世界中,从搭建开发环境到实现核心功能,每个环节都充满了发现和创造的乐趣。让我们开始吧,一起在代码的海洋中航行!
|
15天前
|
存储 搜索推荐 Java
打造个性化安卓应用:从设计到实现
【10月更文挑战第30天】在数字化时代,拥有一个个性化的安卓应用不仅能够提升用户体验,还能加强品牌识别度。本文将引导您了解如何从零开始设计和实现一个安卓应用,涵盖用户界面设计、功能开发和性能优化等关键环节。我们将以一个简单的记事本应用为例,展示如何通过Android Studio工具和Java语言实现基本功能,同时确保应用流畅运行。无论您是初学者还是希望提升现有技能的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧。
|
19天前
|
搜索推荐 开发工具 Android开发
打造个性化Android应用:从设计到实现的旅程
【10月更文挑战第26天】在这个数字时代,拥有一个能够脱颖而出的移动应用是成功的关键。本文将引导您了解如何从概念化阶段出发,通过设计、开发直至发布,一步步构建一个既美观又实用的Android应用。我们将探讨用户体验(UX)设计的重要性,介绍Android开发的核心组件,并通过实际案例展示如何克服开发中的挑战。无论您是初学者还是有经验的开发者,这篇文章都将为您提供宝贵的见解和实用的技巧,帮助您在竞争激烈的应用市场中脱颖而出。
|
21天前
|
算法 Java 数据库
Android 应用的主线程在什么情况下会被阻塞?
【10月更文挑战第20天】为了避免主线程阻塞,我们需要合理地设计和优化应用的代码。将耗时操作移到后台线程执行,使用异步任务、线程池等技术来提高应用的并发处理能力。同时,要注意避免出现死循环、不合理的锁使用等问题。通过这些措施,可以确保主线程能够高效地运行,提供流畅的用户体验。
33 2
|
24天前
|
Java API Android开发
安卓应用程序开发的新手指南:从零开始构建你的第一个应用
【10月更文挑战第20天】在这个数字技术不断进步的时代,掌握移动应用开发技能无疑打开了一扇通往创新世界的大门。对于初学者来说,了解并学习如何从无到有构建一个安卓应用是至关重要的第一步。本文将为你提供一份详尽的入门指南,帮助你理解安卓开发的基础知识,并通过实际示例引导你完成第一个简单的应用项目。无论你是编程新手还是希望扩展你的技能集,这份指南都将是你宝贵的资源。
48 5
|
24天前
|
移动开发 Dart 搜索推荐
打造个性化安卓应用:从零开始的Flutter之旅
【10月更文挑战第20天】本文将引导你开启Flutter开发之旅,通过简单易懂的语言和步骤,让你了解如何从零开始构建一个安卓应用。我们将一起探索Flutter的魅力,实现快速开发,并见证代码示例如何生动地转化为用户界面。无论你是编程新手还是希望扩展技能的开发者,这篇文章都将为你提供价值。
|
27天前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
22 1
|
1月前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
83 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
6天前
|
搜索推荐 Android开发 开发者
探索安卓开发中的自定义视图:打造个性化UI组件
【10月更文挑战第39天】在安卓开发的世界中,自定义视图是实现独特界面设计的关键。本文将引导你理解自定义视图的概念、创建流程,以及如何通过它们增强应用的用户体验。我们将从基础出发,逐步深入,最终让你能够自信地设计和实现专属的UI组件。
|
8天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异和挑战
【10月更文挑战第37天】在移动应用开发的广阔舞台上,安卓和iOS这两大操作系统扮演着主角。它们各自拥有独特的特性、优势以及面临的开发挑战。本文将深入探讨这两个平台在开发过程中的主要差异,从编程语言到用户界面设计,再到市场分布的不同影响,旨在为开发者提供一个全面的视角,帮助他们更好地理解并应对在不同平台上进行应用开发时可能遇到的难题和机遇。