I have already published an app called com.mycompany.mygame on google play.
I then decided to publish an ad free version of it. I did not change the package name in eclipse because I noticed that in the "export" process you have the opportunity to have the final apk set as anything you like. So I set it there as com.mycompany.mygameaf - note the additional "af" on the end. But then when tried to upload it to the market, google said:
You need to use a different package name because "com.mycompany.mygame" is already used by one of your other applications
So now I'm confused. Is the complaint because I'm not allowed to have an apk that is a name which is and extension of a previous app? Or does the final apk somehow have knowledge of what the original name was?
What is the easiest way to resolve this?
Apart from correcting app name in the Manifest I also had to change applicationId in the app's gradle.build file.
defaultConfig {
applicationId "com.example.changednameofmyapp"
...
}
Also, if you're using ProGuard, do not forget to change appropriate rules in your proguard-rules.pro
Just search the old package name in the whole project and change it.
Regardless of the name of the .apk file, the package name of the Application contents inside it must be unique.
You can use refactor-rename to change this, though make sure that the change penetrates to the manifest file, proguard configuration, etc.
The name of the APK doesn't matter, its the package name within the AndroidManifest file that counts.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yourcompany.yourapp"
There can only be one app on the market with that package name so in order to publish your ad free version you would have to change the package name in the manifest file, e.g. add the af onto the end of the package name within your manifest.
As mentioned in other answers, you're development would be simpler if you put all the shared code and assets a common library project that is a dependency of your paid and free versions.
You may also wish to play with the new Gradle build system (in Android Studio) which allows you to dynamically set things like the package name at runtime. It also allows you to switch resources during build time, which is extremely convenient; You could have a boolean resource that represents whether the current app is the paid version. This allows you to enable/disable app features based on a check to that value.
The filename of the APK is irrelevant, the package name of your app is used as a unique identifier - it is in the root element in the AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.packagename"
android:versionCode="1"
android:versionName="1.0" >
When you initially create your project in Eclipse it creates an actual package structure which matches this package name for you to put your source files in.
You can actually chnage your package name by modifiying this manifest value and you can just keep the folder/package structure as is - it does not need to match your actual application package name.
Alternatively, right click your project in Eclipse, go to "Android Tools" and then select "Rename Application Package"
After you do this you should be able to submit your binary
The package name in the manifest is used to identify the application within Android and within Google Play. So different apps need different names.
The easiest workaround might be to just create a new package, with no code in it, and use that as the app's package name in the manifest.
What I've done to solve my many-apps-from-one-codebase problem is put all the apps' code in a library project, and then I have several app projects that use that library. The app projects contain no code, just a manifest and custom resources.
Related
When I upload my apk on the playStore(release in alpha), I am getting this error:
Upload failed
You need to use a different package name because
[name of package] is used by a pre-installed
application. To upload a pre-installed application, please contact
Google Play Developer Support. Learn more.
However, it is my first release and no one is using this package name.
Last thing, the version code is 1531. Maybe is it due to that? FOr the first release, I have to set it to 1?
There exists other application with the same package name for sure.
You can refactor-rename your package name, and make it sure that changes reflect in a manifest file, Proguard configuration etc.
Copy your Package name in the Manifest file
<package="com.example.myapplication"> Press ctrl+shift+R enter your old package name and replace with a new one.
Your application is having the same named package, which is already used by some other app on play store.
The solution is to change the package name using refactoring. It will change your package name.
A while back I created a phonegap android app and put it on the google play store with the package name com.packagename I have since rebuilt the app in native code using android studio. Having just tried to update the app on google play and found that the package name does not match because android studio adds a company section i.e. com.companyname.packagename
I have tried refactoring but there does not seem to be a way to remove the companyname section. Is there anyway to do this? I am assuming there is no way around this in google play?
Is there anyway to do this?
Go into build.gradle and delete companyname from the applicationId values. Then, double-check your AndroidManifest.xml file and delete companyname from the package attribute in the root <manifest> element.
I am aware that this question is asked several times in SO. I have checked below answers posted but doesn't work for me :(
Solution 1
Solution 2
Currently, my application's package name is "com.example.test".I want to change this to "com.example.test.test1".So, I just changed the package name in my manifest file and build the app.
Now ,if I run both the applications seperately with above package names changed from manifest files into device than it should show me different applications.It shows me error as "Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]"
As the package names are different, it should show me different applications in the device instead of overriding one app with other.Help me out.
Any help would be appreciated.Thanks
The packageName attribute is deprecated as of Android Studio V0.0.6 onward. To change the package name of the application, use applicationId instead. Check the release notes here.
Change the applicationId and sync gradle.
If your aim is to have the same application at two instance in the device, it is so easy to do using gradle. You don't need to change package name in the Manifest file, gradle will handle that during the build process for you and do all package renaming under the hood wherever required.
In order to achieve that you need to write a new product flavor for your app inside the main app module's build.gradle file with a different application id(package name). Eg. if com.example.test is your default package name of the app. You can have a different flavor of the same app with a different package name or knows as application id. produltFlavours can be defined inside android tag of your main module's build.gradle file like as shows below.
productFlavors {
app1 {
applicationId "com.example.test.test1"
}
}
Sync your project after making the changes. Now select the build variant from Build Variant tab in left hand panel and hit run. Gradle script will handle all package renaming for you.
Check this once for more details :
Android Gradle Build Variant Deploy
What worked for me:
1. Right click package you want to change under java folder|
2. Refactor -> Rename|
3. Rename the package -> press "enter" -> press "Do Refactor"|
4. This updates all the files including the manifest
I have an application that supports different domains. My code is developed under the package: com.example. I would like to publish multiple application under different packages like:
com.example.domain1, com.example.domain2, etc.
In the manifest I define:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.domain1"
....
and for domain2:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.domain2"
The problem I am facing is that once I change the base package name from domain1 to domain2 I need to rename all my packages in the src folder as well as layouts. What I am looking for is to keep the same base packaging com.example and distribute the different apps under its sub-domains.
Is there a better way?
Clarification:
When changing the package name, the resources file changes from com.example.R to com.example.domain2.R. This means that I have to go into all src java classes and layouts etc. and update the generated R file location. That is not handy.
I ended up marking my main project as a library and then creating a project for each domain and linking to the library.
No need to play around with the manifest or the R.java file.
Thanks to #Tenfour04 for pointing me in the right direction!
In your manifest, each Activity, Service, Provider and Receiver has a name attribute. By default they use a shortcut like ".MainActivity" The leading . is a shortcut for the package name at the top level of the manifest.
So if you don't want to rename all those packages in the src folder, just type out explicit names for the Activities, Services, Providers, and Receivers in your manifest, for example, android:name="com.example.sharedmultiprojectdomainname.MainActivity".
If you are using Gradle as your build system, you might want to incorporate build variants into your build, which will solve package problems. More on this can be found in this Google I/O speech
Hope this helps.
I want to try 2 difference version of the same app on my tablet.
So imported both project in eclipse with different project name.
I changed the name of the app in the manifest, I changed the icon to be able to recognize them on my desktop ...
I just can't get both on the phone at the same time. I can execute them both, but installing one is gonna erase the other.
I guess its the change I'm looking for is in the manifest.xml, still I can't find it.
You have to change your package name. A Package name must be unique for every app.
From the official doc
Package Name is the package namespace for your app (following the same
rules as packages in the Java programming language). Your package name
must be unique across all packages installed on the Android system.
For this reason, it's generally best if you use a name that begins
with the reverse domain name of your organization or publisher entity.
In Eclipse, in the Package Explorer select the com.xxxx.yyyy in the src/ directory of the project whose manifest you changed. Right click -> Refactor -> Rename. Enter a new package name, e.g. com.abc.test
Then, in the manifest XML, also replace all instances of "com.xxxx.yyyy" with the new "com.abc.test" package name.