Can I define android:icon in code? - android

I had to build separate bundle for two different android phones, and the two have different icon. I do not want to modify the manifest file everytime when I build the application.
Can I define the icon in my code ? as I can get the phone model.

I don't think you can change the icon programmatically, as it will be a part of your signed APK.
What kind of differences do you have between the 2 versions? And what is your current manual build process? If it's a manifest change, you could probably change your build scripts to produce 2 APKs using different data every time you build.

Related

Is it possible to use multiple manifest files for different gradle builds/flavors?

Lets say I have a white label app that Im converting to be built in android studio from eclipse. This app has about 10 iterations which all use mostly the same code base with different resources that all use the same name convention how ever some of the iterations have extra activities or services that arent needed in all builds.
I want to scrap the entire lot of old hard to maintain code bases which are all essentially the same and just use one android studio project. I understand the base of this set up with all the source files and res files but I'm stuck on how to handle the different manifest files.
Can I use flavors or buildtypes to handle the switching of multiple manifest files?
Lets say I have a white label app that Im converting to be built in android studio from eclipse.
I have a white label app that Im converting to be built in android studio from eclipse.
Oh, no, wait — you didn't mean that literally...
:-)
Can I use flavors or buildtypes to handle the switching of multiple manifest files?
Absolutely. You can have manifests in the flavor and/or build type sourcesets (e.g., src/debug/AndroidManifest.xml). Their contents will be merged in with the manifest in main, the manifests in any attached AARs/Android library projects, and the various settings in build.config to create The One True Manifest for any given build. There is a page that describes the merger process and how various attributes can help control it, though it's a trifle confusing.

Android: Create different APKs of the same App with different Icons

The companys that use my app want their own icon as the app icon. Since it isn't possible to change the app icon programmatically (or is it?), I need to create multiple apks with different icons.
How could this be done easily (20 different apks) in as few clicks as possible? Is there a tool or something that could do this? or do I need to write my own plugin and if yes, do you have any links on how to do that in eclipse (I've never created a plugin for eclipse before...)
Thanks
Since it isn't possible to change the app icon programmatically (or is it?)
Not really.
How could this be done easily (20 different apks) in as few clicks as possible?
Move your production builds to use Gradle for Android and set up a product flavor for each customer. You will be able to have different versions of the icon, and other stuff if needed (e.g., custom string resources with the customer's name), and Gradle can build custom APKs for each product flavor.

how to install two instances by one apk?

I developed an app for android, but I need to install two instances of it, one for my daily use, another for debug/development, I don't have too many phones for debug, just have one phone, and don't want to debug on emulator, because it's too slow compare to real phone.
Or is there any thing we can change on APK file, then we can install it as another app, e.g. change it's package name ?
Currently, I changed the package name in code then make them to two apps, which can be installed on the same phone, but this way is not convenient. seek for simple way.
Update: is there any tool to modify package name in androidmanifest.xml directly after packaged(apk file)? then we just need unzip the apk, modify the androidmanifest.xml, zip the apk again.
You've answered the question yourself. You have to change the package name in the manifest, otherwise Android will override the old app (or can't install it, if the certificate differs).
Try changing the the name of the app in strings.xml from resource folder #string/app_name to have multiple instances of the same app. And package name must be changed so that the existing app is not overridden.
You can copy your project and change the package name in the copy.
You can use the same SVN path to apply the changes on the two projects.
Or you could automate the different builds using an ANT build.xml file with parameters. There are several examples on how to do this for Android in Google.
ref: One android application, one startup view, two icons
I would make the original app a library project and create a new project which uses the library project.
Advantage:
you can have both running as your new project should have a different package name
easily identification by overriding the app name in your new project (just add "beta" to it)
both versions can be installed on one device/emulator parallel
pretty good setup if you try to verify the update process of your app
no confusion with a version control system - renaming packages results in awful non-real changes on your development branches
Disadvantage:
you need to "uncheck" the library setting before you can release the original project
you might need to change some stuff in both manifest files which will increase the maintainability in a small manner
If you really need a market version of your app on your device, this method is the easiest one as a package rename will very probably result in worse maintainability.
edit:
You can mark a project as a library project in project preferences -> Android. After that you can link add that library project to another normal android project at the same spot, just click on the add button.

How to have different versions of an android project on the device?

I need to have different versions of my code on my device when I'm developing my android application. I want to have a copy of my latest code once in a week or so. The reason is that sometimes you make changes to the code and make it worse for a while, then after that you polish your code to include the features. So I need to have a copy of latest correctly running version of my code on the device.
I tried to change the app name, to see whether the ide deploys a new copy of my code, but it didn't work and the ide seems to be smarter than that and it replaces the app with the new name. I suspect that I need to change the package which is a little bit frustrating/risky. Anyone knows the solution?
Right now, I'm using Intellij to implement my android project but I think this doesn't matter.
You need to change the package name.
I use ant build script to do this easily. I created an ant task to rename the package name and make a build.
Typically I use svn to keep track of changes and label which ones are the ones that work then add features and use svn merge commands to combine new features with working code. Then if you want to undo something you can just roll back a revision.
The way I achieved that goal is:
- configure the original project as library
- create another project specifying a different package name in the manifest
- you also need to declare all the activities, receivers, etc with the full name in the new manifest
In that way switching the code of the original project through different branches you can create different apks and have different version of the app installed at the same on your device.
You need to change the package name, not the app name, it's pretty easy in Eclipse.
If your package name now is 'com.sina.perch', so just rename it to 'com.sina.perch1' or something else whatever in file 'AndroidManifest.xml' , which looks like:
It will be work.

Custom Android build script in eclipse that behaves differently for release and debug without ant

I have created a custom build script in python that changes some strings in my strings.xml. But now I need it to change some other strings depending on whether it is a release or debug build. I can't seem to find a variable that I can send as parameter to the script that differentiates between the two.
I want to avoid going over to ant if at all possible, since we have build servers and all kinds of stuff that need changing then too.
Does anyone have experience with this?
One way to do this is to test the app's signature at runtime. You could load different strings based on that result:
How to make Android app automatically configure w/ debug vs. release values?

Categories

Resources