
1. Android开发环境搭建与工具链配置1.1 Android Studio安装与汉化Android Studio作为官方推荐的集成开发环境(IDE)其安装过程需要注意几个关键点。首先从官网下载最新稳定版目前是2023.3.1版本安装时建议勾选Android Virtual Device选项以便后续创建模拟器。对于中文用户可以通过插件市场安装Chinese (Simplified) Language Pack插件实现界面汉化。安装完成后需要配置SDK路径建议将SDK放在非系统盘如D:\Android\Sdk避免占用C盘空间。同时设置环境变量ANDROID_HOME指向该路径方便命令行工具调用。常见问题unable to access android sdk add-on list通常是由于网络连接问题导致可以尝试以下解决方案检查代理设置File → Settings → Appearance Behavior → System Settings → HTTP Proxy更换下载镜像在Android Studio的SDK Manager中点击SDK Update Sites选项卡添加国内镜像源如https://mirrors.cloud.tencent.com/android/repository/1.2 ADB工具使用技巧ADB(Android Debug Bridge)是开发者必备的调试工具以下几个实用命令值得掌握# 查看已连接设备 adb devices # 安装APK adb install -t path/to/app.apk # 卸载应用 adb uninstall com.example.package # 拉取设备文件 adb pull /sdcard/DCIM/Camera/photo.jpg ~/Downloads/ # 推送文件到设备 adb push ~/Documents/file.txt /sdcard/特别值得注意的是执行类似adb shell sh /storage/emulated/0/android/data/com.omarea.vtools/up.sh这样的脚本时需要确保设备已获取root权限且脚本内容可信避免执行恶意代码。2. Android核心组件与框架2.1 Activity生命周期深度解析Activity作为Android四大组件之一其生命周期管理是开发基础。完整生命周期包括onCreate()初始化界面和数据onStart()界面可见但不可交互onResume()获取焦点可交互onPause()失去焦点应保存临时数据onStop()完全不可见onDestroy()释放资源实际开发中常见的坑点不要在onPause()中执行耗时操作会影响新Activity启动速度旋转屏幕会导致Activity重建需要正确处理配置变更使用ViewModel保存UI相关数据避免因重建导致数据丢失2.2 Service与广播接收器实战后台服务(Service)分为三种类型Foreground Service显示通知的前台服务Background Service常规后台服务Android 8.0后限制Bound Service绑定式服务广播接收器(BroadcastReceiver)的两种注册方式!-- 静态注册Manifest中声明 -- receiver android:name.MyReceiver intent-filter action android:nameandroid.intent.action.BOOT_COMPLETED/ /intent-filter /receiver// 动态注册代码中注册 IntentFilter filter new IntentFilter(); filter.addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED); registerReceiver(myReceiver, filter);注意Android 8.0后对后台服务限制严格建议使用WorkManager处理后台任务3. UI开发与主题定制3.1 动态图标主题实现动态图标主题允许应用根据系统主题自动切换图标样式实现步骤准备不同主题的图标资源在res目录下创建对应主题的资源文件夹res/ drawable/ ic_launcher.xml (默认) drawable-night/ ic_launcher.xml (暗色模式)在AndroidManifest中引用application android:icondrawable/ic_launcher ... 3.2 Lottie动画库集成Lottie是Airbnb开源的动画库可以渲染After Effects动画。集成步骤添加依赖implementation com.airbnb.android:lottie:6.1.0XML布局中添加LottieAnimationViewcom.airbnb.lottie.LottieAnimationView android:idid/animation_view android:layout_widthwrap_content android:layout_heightwrap_content app:lottie_rawResraw/animation app:lottie_looptrue app:lottie_autoPlaytrue /代码控制LottieAnimationView animationView findViewById(R.id.animation_view); animationView.setAnimation(hello-world.json); animationView.playAnimation();4. 系统功能与权限管理4.1 蓝牙开发要点Android蓝牙开发主要涉及以下类BluetoothAdapter蓝牙适配器BluetoothDevice远程设备BluetoothSocket连接套接字BluetoothServerSocket服务端套接字典型蓝牙通信流程获取BluetoothAdapterBluetoothAdapter bluetoothAdapter BluetoothAdapter.getDefaultAdapter();开启蓝牙需要BLUETOOTH_ADMIN权限if (!bluetoothAdapter.isEnabled()) { Intent enableBtIntent new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); }发现设备bluetoothAdapter.startDiscovery();建立连接BluetoothDevice device bluetoothAdapter.getRemoteDevice(macAddress); BluetoothSocket socket device.createRfcommSocketToServiceRecord(MY_UUID); socket.connect();4.2 危险权限请求最佳实践Android 6.0后引入了运行时权限机制处理流程检查权限if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) ! PackageManager.PERMISSION_GRANTED) { // 未授权 }请求权限ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_REQUEST_CODE);处理回调Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode PERMISSION_REQUEST_CODE) { if (grantResults.length 0 grantResults[0] PackageManager.PERMISSION_GRANTED) { // 权限已授予 } else { // 权限被拒绝 } } }提示对于关键权限被拒绝的情况应该向用户解释为什么需要这个权限使用shouldShowRequestPermissionRationale()判断5. 性能优化与测试5.1 内存泄漏检测与预防常见内存泄漏场景及解决方案静态变量持有Activity引用// 错误示例 public class AppUtils { public static Activity sCurrentActivity; } // 正确做法使用WeakReference public class AppUtils { private static WeakReferenceActivity sActivityRef; }未取消注册的监听器// 在Activity中 sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL); // 必须重写onDestroy取消注册 Override protected void onDestroy() { super.onDestroy(); sensorManager.unregisterListener(this); }匿名内部类持有外部类引用// 错误示例 new Thread(new Runnable() { Override public void run() { while(true) { /* 长时间运行 */ } } }).start(); // 正确做法使用静态内部类 private static class MyRunnable implements Runnable { Override public void run() { /* ... */ } }5.2 单元测试与UI测试Android测试主要分为本地单元测试JUnit测试纯Java逻辑运行在JVM上速度快位置module-name/src/test/java/仪器化测试AndroidJUnitRunner测试需要Android框架的代码运行在设备或模拟器上位置module-name/src/androidTest/java/示例测试类RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { Test public void useAppContext() { Context appContext InstrumentationRegistry.getInstrumentation().getTargetContext(); assertEquals(com.example.myapp, appContext.getPackageName()); } }执行测试时可能遇到的run android instrumented tests using gradle警告通常是因为模块类型不支持可以尝试确保build.gradle中配置了正确的测试依赖android { defaultConfig { testInstrumentationRunner androidx.test.runner.AndroidJUnitRunner } } dependencies { androidTestImplementation androidx.test.ext:junit:1.1.5 androidTestImplementation androidx.test.espresso:espresso-core:3.5.1 }检查Run/Debug Configuration中是否正确选择了测试类型6. 高级主题与框架应用6.1 MVVM框架搭建MVVM(Model-View-ViewModel)架构的核心组件View处理UI和用户交互ViewModel保存UI相关数据处理业务逻辑Model数据层负责数据获取和处理实现步骤添加依赖implementation androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1 implementation androidx.lifecycle:lifecycle-livedata-ktx:2.6.1 implementation androidx.activity:activity-ktx:1.7.2创建ViewModelpublic class MyViewModel extends ViewModel { private MutableLiveDataString mText new MutableLiveData(); public LiveDataString getText() { return mText; } public void setText(String text) { mText.setValue(text); } }Activity/Fragment中观察数据MyViewModel model new ViewModelProvider(this).get(MyViewModel.class); model.getText().observe(this, text - { // 更新UI textView.setText(text); });6.2 Apex模块开发Android Apex(Android Pony EXpress)是Android 10引入的模块化系统用于更新系统组件。关键特点在运行时安装/更新有独立的进程和资源需要系统签名开发流程创建apex_manifest.json{ name: com.example.myapex, version: 1 }配置Android.bpapex { name: com.example.myapex, manifest: apex_manifest.json, file_contexts: file_contexts, key: com.example.myapex.key, binaries: [mybin], native_shared_libs: [mylib], }签名和安装# 签名 signapk -a 4096 --apex-signer signer \ com.example.myapex.apex com.example.myapex.signed.apex # 安装 adb install com.example.myapex.signed.apex7. 常见问题排查手册7.1 编译错误解决方案Missing JCEF runtime错误原因某些插件依赖JCEF(Java Chromium Embedded Framework)解决下载JCEF运行时并配置路径或禁用相关插件Duplicate class冲突原因多个依赖包含相同类解决使用exclude排除冲突依赖implementation(some.library) { exclude group: com.conflicting.group, module: module-name }Unable to merge dex错误原因方法数超过65536限制解决启用multidexandroid { defaultConfig { multiDexEnabled true } }7.2 运行时异常处理ANR(Application Not Responding)原因主线程执行耗时操作排查检查/data/anr/traces.txt文件预防使用AsyncTask、HandlerThread或协程处理耗时任务OOM(OutOfMemoryError)原因内存泄漏或大图加载排查使用Android Profiler分析内存使用预防使用图片加载库Glide/Picasso及时释放资源崩溃收集Thread.setDefaultUncaughtExceptionHandler((thread, throwable) - { // 记录崩溃日志 logCrash(throwable); // 重启应用 Intent intent new Intent(getApplicationContext(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); System.exit(1); });8. 实用工具与资源推荐8.1 开发效率工具ADB增强工具scrcpy通过USB/WiFi显示和控制Android设备Bugjaeger手机端ADB工具LADB在非root设备上运行ADB命令逆向分析工具JADX反编译APK查看Java代码APKTool解包/重打包APKFrida动态插桩框架性能分析工具Android Profiler内置CPU、内存、网络分析Systrace系统级性能分析Perfetto更强大的性能分析套件8.2 学习资源推荐官方文档Android开发者官网developer.android.comAndroid开源项目source.android.comMaterial Design指南material.io开源项目Android官方示例github.com/androidAwesome-Androidgithub.com/JStumpp/awesome-android开源中国Android版块www.oschina.net/project/tag/142/android社区论坛Stack Overflowstackoverflow.com/questions/tagged/android掘金Android专栏juejin.cn/tag/AndroidV2EX Android节点www.v2ex.com/go/androiddev在实际开发中我发现建立个人知识库非常重要。可以使用Markdown文件记录这些零散知识点配合Git进行版本管理。每当遇到新问题并解决后立即记录下来长期积累会形成宝贵的个人技术手册。