[App Bundle]Android动态化技术实例

本文介绍了Android App Bundle的实践应用,包括如何创建Base APK和Dynamic Feature Module,以及如何在Google和华为HMS平台上实现动态管理。通过示例展示了初始化、安装动态模块的代码,并提供了本地测试App Bundle的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近几年,Android动态化,插件化相关技术在国内市场弄的风声水起,可以说Android程序员不去了解一下相关技术都会被人鄙视,但是相关技术却遭到苹果和Google双重封杀,毕竟人家希望平台的生态完全掌握在自己的手中。但国人的努力并非没有得到认可,Google就为此开发了App Bundle,其实就是对相关技术的认可。使用App Bundle,apk必须上传到google play才支持,幸运的是,国内华为的HMS为了兼容android平台,也支持相关技术,所以实例中会同时说到两个产家的方案。

App Bundle是什么东西?介绍性的东西,无论是官网还是简书上都有不少介绍,这里就不累述,可参考:
Android App Bundle
AndroidAppBundle

这里主要侧重于实例。

什么是Base APK
你用Android Studio新建任何一个工程(Application),都可以是Base APK。

  1. 新建base apk与Dynamic feature
    新建一个Empty Activity工程作为Base apk,然后app右键,通过New -> New Module,新建一个Dynamic Feature Module:
    在这里插入图片描述
    在Dynamic Feature Module同样新建一个Empty Activity。

那么如何使Base APk与Dynamic Feature Module关联起来呢?其实这部分工作Android Studio默认就做了:

在Base apk中,它会添加:

dynamicFeatures = [":dynamictest"]

而在Dynamic部分,会添加:

implementation project(':app')
  1. 动态管理
    1)依赖包,前者为Google的依赖包,后者为华为的依赖包,
api "com.google.android.play:core:1.7.3"
api 'com.huawei.hms:dynamicability:1.0.11.302'

要使得华为的依赖包可以下载,还需要在Project中添加仓库maven {url ‘http://developer.huawei.com/repo’}

allprojects {
   
    repositories {
   
        google()
        jcenter()
        maven {
   url 'http://developer.huawei.com/repo'}
    }
}

2)华为的动态管理实现
华为的APP Bundle需要在base apk和dynamic feature分别初始化,base apk端在application初始化:

public class DynamicApplication extends Application {
   
    @Override
    protected void attachBaseContext(Context base) {
   
        super.attachBaseContext(base);
        FeatureCompat.install(base);
    }
}

而dynamic feature处在Activity中初始化:

package net.wen.dynamic.test;

public class MainActivity extends AppCompatActivity {
   
    @Override
    protected void attachBaseContext(Context newBase) {
   
        super.attachBaseContext(newBase);
        FeatureCompat.install(newBase);
    }
}

除了初始化,其它部分的代码都在base apk中。

华为的动态管理类叫FeatureInstallManager,在Activity中可以对其进行初始化和添加listener:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mFeatureInstallManager = FeatureInstallManagerFactory.create(this);
        findViewById(R.id.click_test).setOnClickListener(v -> launchDynamic());
    
### 如何恢复未保存的Word文件 #### 使用自动恢复功能 Microsoft Word具备内置的自动恢复功能,可以在程序崩溃或意外关闭后尝试恢复未保存的内容。默认情况下,Word会每隔一定时间间隔(通常为10分钟)自动保存一次文档副本到临时位置[^1]。要利用这一功能: 1. 打开Microsoft Word。 2. 在启动界面中查看是否有提示框显示可恢复的文档列表。 3. 如果存在相关文档,则可以选择打开并手动保存。 如果未能在启动时看到恢复选项,可以通过菜单路径访问:“文件” -> “信息” -> “管理版本” -> 查看可用的历史记录和草稿版本[^2]。 #### 检查临时文件夹 当Word运行期间,它会在系统的特定目录下存储临时文件。这些文件可能包含了尚未正式保存的工作成果。对于Windows操作系统而言,可以查找以下路径中的`.asd`扩展名文件: ``` C:\Users\<用户名>\AppData\Local\Microsoft\Office\UnsavedFiles\ ``` 而对于Mac用户来说,需注意两个地方:一个是废纸篓;另一个则是位于隐藏库文件夹内的缓存区域: ```bash ~/Library/Containers/com.microsoft.Word/Data/ ``` 通过浏览上述地址找到最近修改过的可疑项目,并将其重命名为标准 `.docx` 后缀以便加载[^3]。 #### 利用第三方工具扫描硬盘残留数据 假如前两种方式均告失败,还可以考虑借助专业的数据恢复软件来进行深层次检索。例如Recuva (适用于Windows) 或 Disk Drill (支持跨平台),它们能够深入挖掘磁盘上的已删除标记项以及覆盖较少的数据片段,从而有机会挽回部分遗失的信息。 ```python # 示例代码仅作为说明用途,实际操作无需编写脚本实现以上过程 import os def search_temp_files(directory): temp_files = [] for root, dirs, files in os.walk(directory): for file in files: if file.endswith(".asd"): temp_files.append(os.path.join(root, file)) return temp_files temp_directory_windows = r"C:\Users\<用户名>\AppData\Local\Microsoft\Office\UnsavedFiles" found_files = search_temp_files(temp_directory_windows) for f in found_files: print(f"Potential recovery candidate: {f}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值