如何用Android Studio打多包名APK
来源:互联网 发布:程序员编程艺术 pdf 编辑:程序博客网 时间:2024/06/04 18:58
如何用Android Studio打多包名APK
问题:项目中不同的分发渠道可能需要打包多种APK(同样的代码),包名可能是不一样的,如果一个一个修改包名重新编apk是很麻烦,可以参考下列步骤在Android Studio上操纵Gradle来打包不同包名的apk。
这里例子的目标是,同样的代码,打包成com.example.android.newsreader和com.example.android.newsreaderdev两个不同包名的apk
1. 首先在build.gradle的android节点中加入下列代码
productFlavors{ flavors_release{ manifestPlaceholders = [str:"releaseStr",package_name:"com.example.android.newsreader"] applicationId "com.example.android.newsreader" } flavors_dev{ manifestPlaceholders = [str:"devStr",package_name:"com.example.android.newsreaderdev"] applicationId "com.example.android.newsreaderdev" }}
这个productFlavors的功能即为打包的参数化而提供的,flavors_release和flavors_dev可以被视作自己定义的两套变量集,实际操作中可以自定义
注意到这里有一个manifestPlaceholders的参数,里面提供的实际上是几个参数变量和值,这里的参数都可以通过${name}的方式在AndroidManifest.xml中使用。原来是想在AndroidManifest中的manifest的节点将package给参数化来达到打不同包名的apk的目的,即:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="${package_name}"android:versionCode="1"android:versionName="1.0"><uses-sdk android:minSdkVersion="11" android:targetSdkVersion="14" />...
结果Android Studio的Lint自动给了我一个提示:
说明Android Studio推荐我采用设置applicationId的方式来将包名参数化
于是乎,我在flavors_release和flavors_dev中又加入了applicationId的设置,即:
和
下面看看是否有作用
2.这一步需要操纵Gradle面板
此时我们在Android Studio的右侧的gradle面板中点击按钮刷新下,于是在build子栏目中出现下列东西:
其中以assemble*打头的都是生成apk的选项,生成的apk在build/outputs/apk中,这里我们对任一项双击即可生成对应的apk
对应flavors_release和flavors_dev的apk应该就是和这两个,于是分别双击他们等待各自生成apk的过程
3. 下面查看Project面板中的内容
打开project面板,我们发现真的出现了几个apk:
可以看出来每次双击gradle中的一条会生成三个apk,我们把newsreader-flavors_dev-debug.apk和newsreader-flavors_release-debug.apk拿出来,用aapt命令查看下他们的包名(命令为aapt dump badging {filename.apk})
果然,包名是不一样的。
那么是否可以同时安装呢,这里把两个apk都安装到模拟器中,果然是可以的:
可以看到出现了两个NewsReader,其实都是一模一样的,只是包名不同
4. 如何在打包的时候指定签名
在Android Studio菜单栏进入Build->Generate Signed Apk:
指定你的keystore后点击next:
这里会发现在Flavors里面有两个项目,即我们在gradle里面配置上的两个flavors参数集,各自选上,点击finish即可生成所需要的apk
5. 有个疑问,为什么修改applicationId即可修改包名呢?applicationID和packagename到底是什么关系
实际上, package 代表了 java 代码中的包名。 applicationId 代表了应用中的唯一标识。和应用签名一起用来区别和其他应用不同。我想这也就是为什么 Google 市场能够允许相同应用不同 applicationId 的原因。
最后一个提示: 打包出来后,发布前最好要全面测试下,以免出现问题
- 1. 实战Kotlin@Andorid(二)
- 2. RxJava入门实践③
- 3. LeakCanary傻瓜式的内存泄露检测工具
- 4. Android Studio 2.0新特性:即时运行和云测试实验室
- 5. Android插件化原理解析——广播的管理
- 6. Android自定义View-SlideListView
- 刊主:dipperkun《默认推刊》12504
- 刊主:salvation《Android》618
- 1. 实战Kotlin@Andorid(二)
- 2. RxJava入门实践③
- 3. 如何在 Android Studio 中包含 *.so library,并使用库中定义的方法?
- 4. LeakCanary傻瓜式的内存泄露检测工具
- 5. Android Studio 2.0新特性:即时运行和云测试实验室
- 如何用Android Studio打多包名APK
- 如何用Android Studio打多包名APK
- Windows下Cordova环境搭建及如何用android studio导入cordova项目生成apk
- 如何用unity发布Android程序APK
- Android Studio如何用真机调试
- Android Studio如何用真机调试
- 如何用Android studio构建项目
- 如何用Android studio修改应用图标
- 如何用命令行编译打包Android程序项目的APK?
- 如何用Eclipse导出带签名的android apk
- 如何用Sencha Touch打包Android的APK
- 如何用Visual Studio开发iOS、Android应用
- Android Studio如何用release签名进行debug调试
- 2016.06.26培训日记-如何用Android Studio设计UI
- 如何用android studio搭建JNI(调用C/C++代码)
- 如何用Android studio写纯Java代码
- Android studio中如何用快捷键快速调出try catch
- 如何用模拟器安装和卸载APK.
- output——标签,拖动进度条,显示进度
- C#调用C++结构体内存数据不对问题
- Android中的Service:Binder,Messenger,AIDL(2)
- SoundPool的使用(转)
- mysql对表是操作以及函数的简介
- 如何用Android Studio打多包名APK
- hdu 1492The number of divisors(约数) about Humble Numbers(因子个数)
- Android电话拨打流程源码分析
- 判断单链表是否有环
- JDK1.7中引用sun.management.ManagementFactory
- Cannot serialize session attribute indexView for session
- js 计算 Fibonacci 值,用到知识点:递归调用"匿名函数"
- 巧用“UDL”文件获取SQL server数据库的连接字符串
- ehcache详细配置
我来评几句
登录后评论已发表评论数(0)