是否可以使用Gradle更改Android应用程序的包名称?
我需要编译同一个应用程序的两个副本,具有唯一的包名称(因此我可以向市场发布两次).
我是Android开发人员的新手,我几乎准备好发布我的应用程序的第一个版本:)
在我的手机上测试签名版本apk时,它拒绝安装,因为调试版本随调试签名一起安装.
所以我必须卸载调试版本,但它删除了我的所有数据库(它将对我正在测试它的朋友这样做).
有没有办法管理同一个应用程序的调试和发布版本而不会丢失数据?
我已经升级到Android L并在"Google Play"中发布了我的应用程序的发布版本以及我们用于开发的调试版本.
它们使用不同的密钥签名.
我的问题是我安装了"Google play"版本,然后当我尝试安装调试版本时,其定义如下:
debug {
debuggable true
packageNameSuffix ".debug"
buildConfigField BOOLEAN, IS_DEV, TRUE
}
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误:
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION perm=com.app.name.permission.C2D_MESSAGE pkg=com.app.name]
Run Code Online (Sandbox Code Playgroud)
这是有问题的许可:
<permission
android:name="com.app.name.permission.C2D_MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.app.name.permission.C2D_MESSAGE"/>
Run Code Online (Sandbox Code Playgroud)
我知道(http://commonsware.com/blog/2014/08/04/custom-permission-vulnerability-l-developer-preview.html)以及这是由于安全问题而创建的事实,但是我仍然需要能够与每个拥有自己的调试签名密钥的团队合作.
我尝试使用adb uninstall卸载(/sf/answers/1896358691/),我尝试清除设备上的所有应用缓存.
最近,我正在考虑将我的工作标题从“ Android Developer”更改为“ Endless install progress watcher”。
当我尝试运行我的应用程序或测试Android Studio时,发生的情况越来越频繁,如下图所示:
这一进步将永远保持下去。过去,如果我断开设备并再次连接,则下一次尝试将成功。现在通常情况下,我需要多次重新连接才能运行。
猜测是问题是由于亚行以某种方式挂起和失去连接,但我不知道该如何克服。
我的配置是:-Ubuntu Linux,但同事在Mac OS上也有相同的体验,例如-Android Studio 3.5-设备是Nexus 5X,但在许多其他设备上也是如此
我正在修改当前的android项目,因此它可以安装在同一设备上,用于多种口味和构建配置.
的build.gradle:
{
// ...
defaultConfig {
applicationId "com.myapp"
manifestPlaceholders = [
manifestApplicationId: "${applicationId}",
onesignal_app_id: "xxxx",
onesignal_google_project_number: "xxxx"
]
// ...
}
productFlavors {
production {
applicationId "com.myapp"
// ...
}
dev {
applicationId "com.myapp.dev"
// ...
}
// ...
}
buildTypes {
release {
// ...
}
debug {
applicationIdSuffix ".debug"
// ...
}
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml:
<manifest ... >
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<permission
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
<!-- ... -->
<receiver
android:name="com.onesignal.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action …Run Code Online (Sandbox Code Playgroud) android buildconfig gradle android-manifest manifest-merging
我正在尝试发布APK,而我正在尝试生成签名APK我得到此错误
Error:Error: Permission name C2D_MESSAGE is not unique (appears in both com.company.myApp.permission.C2D_MESSAGE and com.company.myApp2.permission.C2D_MESSAGE) [UniquePermission]
Run Code Online (Sandbox Code Playgroud)
这是我的清单文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.company.myApp">
<permission
android:name="com.company.myApp.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
<supports-screens android:smallScreens="true" />
<supports-screens android:normalScreens="true" />
<supports-screens android:largeScreens="true" />
<supports-screens android:xlargeScreens="true" />
<supports-screens android:anyDensity="true" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--<uses-permission android:name="android.permission.INTERNET" />-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.GET_TASKS" …Run Code Online (Sandbox Code Playgroud) 尝试关注此Google+登录教程.
启动应用程序,我收到此错误
您需要更新Google Play服务才能使用此应用程序
Update没有任何作用.Login应用程序崩溃.使用Windows 8中的终端更新模拟器上的Play服务,
adb install com.android.vending-20140218.apk ........
失败[INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.google.android.gms.permission.ACTIVITY_RECOGNITION pkg = com.google.android.gms]
adb install com.google.android.gms-20140218.apk .......
失败[INSTALL_FAILED_DUPLICATE_PERMISSION perm = com.android.vending.CHECK_LICENSE pkg = com.android.vending]
我尝试使用adb uninstall和卸载它们,adb install -r但它只是响应
失败
模拟器
我有一个与Android棒棒糖的nexus 9,但我得到错误代码-505试图从Play商店安装一些应用程序.
这些应用程序是:
其他应用程序的工作安装正常,但这些游戏没有.
你能告诉我这个错误代码是什么意思吗?你能告诉我如何解决它吗?
在使用GCM,ContentProvider,AccountType时,如何配置项目以便能够在发布版本旁安装调试版本?(不使用口味)
我一直收到错误,例如:INSTALL_FAILED_CONFLICTING_PROVIDER或INSTALL_FAILED_DUPLICATE_PERMISSION
android android-gradle-plugin android-productflavors android-build-type android-variants
我的测试人员表示他无法将Play应用程序中的应用安装到他的Nexus 5(Lollipop).他说他得到了这个错误
Unknown error code during application install “-505”
Run Code Online (Sandbox Code Playgroud)
我拿起手机试着通过adb安装应用程序,我收到了这个错误
Failure [INSTALL_FAILED_DUPLICATE_PERMISSION
perm=com.example.gcm.permission.C2D_MESSAGE
pkg=com.mailchimp.alterego]
Run Code Online (Sandbox Code Playgroud)
经过一番阅读,我从@Commonsware看到了这篇文章
http://commonsware.com/blog/2014/08/04/custom-permission-vulnerability-l-developer-preview.html
很明显,我的应用程序和Mailchimp应用程序(安装在我的测试人员手机上)都有重复的权限,com.example.gcm.permission.C2D_MESSAGE.然后我检查我的git日志,看看我什么时候将该行添加到我的AndroidManifest,发现它是在我实现GCM的时候.那时,我遵循了本教程
https://developer.android.com/google/gcm/client.html

我想,我和Mailchimp开发人员都遵循相同的教程,添加了相同的权限,现在我们的应用程序都有重复的权限.
所以,我从AndroidManifest中删除了该权限,现在我可以在我的测试人员的手机上安装我的应用程序了.我通过从我的PHP脚本发送到包到GCM服务器的测试GCM消息,应用程序仍然得到GCM消息.
那么,是否会因为缺少许可而提出其他问题,无论如何获得该许可的重点是什么?(因为没有它,我的应用程序仍然收到GCM消息)
我担心的是,如果我们的应用程序使用的是需要权限的插件/库.如果有另一个安装的应用程序使用相同的库,我们将无法在Lollipop设备上安装我们的应用程序,不是吗?
- 注意 -
我已经读过这个问题了,很少有人对我所做的事情提出同样的建议,取消许可.但没有人谈论我们做之后会发生什么,或者为什么我们必须添加它.
INSTALL_FAILED_DUPLICATE_PERMISSION ... C2D_MESSAGE
- 编辑1 -
我回到教程,教程是对的,这是我错误的实现

我(和Mailchimp开发人员)应该使用我们的应用程序包+ .permission.C2D_MESSAGE的名称添加权限,而不是仅复制并粘贴com.example.gcm.permission.C2D_MESSAGE
<permission android:name="com.mycompany.myappname.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
Run Code Online (Sandbox Code Playgroud)
但是,这给我提出了另一个问题,教程说,如果我们不添加此权限或名称与模式不匹配,应用程序将无法获取消息.但是当我测试时,即使我删除时,我收到了消息这个漏洞......很奇怪.
android google-cloud-messaging android-permissions android-5.0-lollipop
android ×10
adb ×2
gradle ×2
android-c2dm ×1
buildconfig ×1
conflict ×1
device ×1
installation ×1
release ×1
signature ×1
signed-apk ×1