There are some Android applications which allow user to clone existed application on the phone.
eg: http://fixoptimize.com/app-cloner
Can you explain how these cloners work?
Thank you.
Change the package name in AndroidManifest.xml and re-sign the app. Notice that the xml is binary instead of text in an apk package. Android identify different apps with package name and with package name changed an app would be considered a "new one".
While the simple approach may or may not work (e.g. the app assumes its package name to be constant, or checks its signature) in many cases various other changes should be applied, including also chage the java package name, disable signature check, change string literals which are assumed path names containing a package name. All these would (likely) require decompiling and deassambling dex and even native codes, which is not only hard but illegal as well.
The modern way: Sandboxify the app. A sandbox environment would be created, within which the app being "cloned" is not actually cloned and remains unchanged. The sandbox would intercept all communication between the cloned app and the system, the user and other apps so it's transparent and stable. Neither the app nor the user would notice that the app's being sandboxed. And this most likely keeps legal concerns away unless a emulator is also outlawed. There are open source sandbox apps on github that you could examine and, well, copy.
Parallel space application creates a sandbox within their own app to host cloned apps.
For example Parallel Space app "Dual Apps" will create sandbox for our CloneAppChecker app as /data/user/0/com.dual.space.parallel.app.clone.multiple/virtual/data/user/0/com.example.cloneappchecker/files
We need to check Sandbox within our application to verify whether app has own sandbox (/data/user/0/com.example.cloneappchecker/files) or created by Parallel Space application.
Hence we can restrict parallel app and original app will work as it is.
5.I have checked almost 15 to 16 parallel space apps and behavior is same for all.
Related
I need to temporarily change the package name of an Android app.
The reason I need to do this is because my customer does not yet have a Google Play account, but wants to test the app I've been developing for him. So I want to put it on an internal testing channel using my Play account, but I want to do so under a different package name.
When I develop iOS apps, there is a mechanism in Xcode by which any app can have multiple targets, and each target can have a separate bundle ID, and other properties, creating a unique app from the same source code. Then I can switch between targets at will to produce either version of the app.
What is the correct way to do this in Android?
The answers I've found online suggest that a wholesale refactoring of all the package names in the actual source code files is necessary -- I don't think this is the right answer in my case. I just want to toggle between two package names the same way you would toggle between build variants.
Thanks,
Frank
Use applicationIdSuffix ".demo" to extend the given name (the namespace does not really matter, the package name only has to be unique). One probably cannot completly override the applicationId; the merge output of AndroidManifest.xml would show what is broken.
Better publish to Firebase App Distribution first (can be linked to Play Store).
There the obstacles are generally lower - and one can also see remote crashes.
I have Android Apps A and B waiting to be published on Android Play-store.Is it possible to keep same fingerprint for multiple Apps, with different package names?
This is to allow Just one of the two Apps to be installable in a supporting device. How to do this
I could use the same fingerprint to publish apps in Play-Store. But I was able to do an Install of both the Apps on the same phone.This is not what was intended. Any Solution ?
The application ID is what distinguishes apps on your device and in Google Play. I don't think it is possible to force only one app to be installed at a time if they have different application ID. Android has an "application ID" which is used to uniquely identify your app. It has nothing to do with what keystore is used to sign the APK.
But, the application ID is not necessarily the package name. An excerpt from the docs:
Although your project's package name matches the application ID by default, you can change it. However, if you want to change your package name, be aware that the package name (as defined by your project directory structure) should always match the package attribute in the AndroidManifest.xml file
So you can have two different apps with the same application ID, but different package names. And then only one of them could be installed on a device. I'm not sure if that's what you're going for, though.
And I'm not sure that your reasoning for doing this is great. Maybe you can expand upon what you mean by
This is to allow Just one of the two Apps to be installable in a supporting device.
so that maybe someone can suggest a better alternative for your situation.
My question may look strange but I'll try to explain somehow. Let's imagine there is an Android device with software that adjusts some settings based on application package name - it's a real-life scenario. This software may provide better performance for listed applications and there is no way to add my application to that list. What I'm capable of doing is to release my application under one of listed package names (not to Google Play, just provide APK on GitHub so that anyone who wants to use it will install it manually). And there comes my question:
is it legal to use some company's existing package name for my own application? Is it protected legally? My app is free & open source application.
Just to be clear: I'm not doing this to impersonate "real" application with bad intentions. I just want my application to use full range of device capabilities... And download page will state it clearly & visibly :)
In other words: can I release app with package name e.g. com.google.android.talk? I know that it won't override existing app if someone has it installed etc. (it's not my goal to override some application). I'm just talking about such possibility and legality.
This is totally legal, as you can use whatever String you want for your app/package name.
However, just doing this will most probably be not enough to "impersonate" the other app, as this would be a serious security flaw. First of all, there can never be two apps with the same package name installed.
If the app you speak about is created by a "serious" developer, say Google or one of the OEMs, it will check both package and signature of the app and will therefore know your app is not the same as the replaced app.
Also, when the user tries to install your app, a package conflict will happen, followed by the signature conflict. There are two scenarios here:
If the app you are replacing is a standard app, the user will be able to install your app from adb, but only after thay accept to completely wipe the data of the original app. You have probably seen this dialog while developing stuff.
If the app is provided by the OEM and has system permissions, the installation will simply fail, with no possibility to "overwrite" the app. This can be dodged by having the devices rooted, replacing the .apk file in the system directory and restarting the phone.
Please mind that none of the above will work by just uploading the .apk to the phone. This needs to be done from adb. On-phone installer will just fail.
Problem
I have a free app in alpha stage at the moment, there is some extra content and functionality that I can imagine my users will want access to.
However as its my first app I do not know the mechanism for including the extra functionality. I see the in-app apk option in the google console but I do not know how I will need to package up my module for it.
My core app will need to pass parameters and call the extra functions in the module, which will display new activities extending my core app. This will only happen if the module is installed.
How do I go about this? Do I just make another app and install it side by side? This would be ok but the other app (my module) really is an extension of my core app and would not make sense on its own.
What is the right method to go about this?
clarification
I wish to have an optional module, which is not part of the core app but can be added by users on demand.
Ideally this module can also function by itself even though it would not make too much sense. Like a dictionary say of medical terms, it could be used by itself but would make more sense when an addon to a medical app.
It is so large in size and applicable to other potential apps that I cannot permanently include it with my app.
You need to integrate the Extra Module with your current Application's code.
After doing so, change the VersionCode / versionNumber in your Manifest.xml file of your project.
Then simply export the fresh .apk with your existing Keystore and upload it to the PlayStore over your existing Alpha apk.
I hope this helps.
Short question
In Mono for Android (MonoDroid) - or Android apps in general - are identical package names with only case variations considered to be equal? E.g. 'Application.Application' = 'Application.Application'. The question refers specifically to equality as considered for the Android market application update mechanism. Not to equality in general.
If NOT then is there another way to change the package name but still have the Android Market consider the application as the same app? We want to insure end-users don't need to install a completely new app, but can use the standard Market update mechanism.
More detailed problem description
Our application was put in the Android Market using a package name containing upper case symbols, e.g. 'Application.Application'. So - in hindsight - we did NOT follow the advised Java package naming conventions. However the original application functioned without any further problems.
We have now extended our Android application with push notifications. During testing a problem surfaced that sending push notifications through the Google C2DM service did not work using the upper case package name. Only after changing the package name to contain no upper case symbols BEFORE the dot (.) did push notifications come through in our test environment. E.g. 'application.Application'. To achieve this we changed the package name in the manifest.xml file and submitted a new request for the differently cased package name via the C2DM sign up form.
We did not foresee this problem. But we would now still like to deploy a new version of our app through the Market but are concerned about being able to use the conventional update mechanism. We don't want to distribute the application as a completely new app.
Can we realise this? And if so, then how?
1. Can we just go with the 'application.Application' package name?
2. Or is there some mechanism to allow a changed package name? We might then further change our package name so it conforms to standards, e.g. 'ext.domain.application'
Note we have NOT deployed our new application. We want to solve this package name issue before deploying server side changes to production (e.g. the push notifications 'provider'), since server-side code also contains the package name for sending the messages.
Further note that the app is build using MonoDroid and uses the C2dm-Sharp library to send and receive push notifications. Perhaps the issue originates there, although it's seems a general problem.
I've done some research, and found two different apps on Google Play, with two package names differ only in case.
check out:
https://play.google.com/store/apps/details?id=Jk.app.app
vs
https://play.google.com/store/apps/details?id=JK.app.app
Conclusion:
Google Play package names are case sensitive - so what you're trying to do is not possible.