Been building an app within MIT's App Inventor (herecy on this site I know.) I uploaded the first version to Google Play yesterday and all went smoothly. Tried to push a new APK to production this morning but got this error;
http://i.stack.imgur.com/GzBD9.png
(sorry not enough rep to post images)
Confused, I went ahead and decompiled the APK and got this;
<?xml version="1.0" encoding="utf-8"?>
<manifest android:versionCode="2" android:versionName="1.0.1" package="appinventor.ai_benjamdavidstocker.IGSoundboard"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application android:label="IGSoundboard" android:icon="#drawable/ya" android:debuggable="false">
<activity android:name=".Screen1" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="appinventor.ai_benjamdavidstocker.IGSoundboard.Board" android:configChanges="keyboardHidden|orientation" android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity android:name="com.google.appinventor.components.runtime.ListPickerActivity" android:screenOrientation="behind" android:configChanges="keyboardHidden|orientation" />
<activity android:name="com.google.appinventor.components.runtime.WebViewActivity" android:screenOrientation="behind" android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
</application>
</manifest>
As you can see, package="appinventor.ai_benjamdavidstocker.IGSoundboard"
which matches the one Google Play is requesting. So what's the problem?
The Capitalization in SoundBoard is different on the word Board
instead of
appinventor.ai_benjamdavidstocker.IGSoundboard
it should be
appinventor.ai_benjamdavidstocker.IGSoundBoard
IGSoundBoard with a capital 'B'
Related
Android Developer Console says my app is incompatible with all devices. However it is tight lipped as to why. Near as I can tell the reason is, according to an article I read, most likely from my android manifest being messed up. But I can't seem to figure out why. I have another app in the app store which is compatible with everything. So what's the issue?
<?xml version="1.0" encoding="utf-8"?>
<application
android:allowBackup="true"
android:icon="#mipmap/ic_launcher"
android:label="Writing Analyzer"
android:roundIcon="#mipmap/ic_launcher_round"
android:theme="#style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ResultsActivity"/>
</application>
Edit: Some more info
-Minimum SDK is 15
-I am only using one external library, OpenNLP
-As part of OpenNLP I have a model in the assets folder
-I have a class that extends BaseListAdapter
Edit: Here is the full merged manifest. Sorry didn't realize at first that would be needed.
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="3"
android:versionName="2.0"
package="textsnoop.rddigi.com.textstats"
platformBuildVersionCode="25"
platformBuildVersionName="7.1.1">
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="25" />
<meta-data
android:name="android.support.VERSION"
android:value="25.3.0" />
<uses-permission
android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission
android:name="android.permission.WAKE_LOCK" />
<uses-permission
android:name="com.google.android.c2dm.permission.RECEIVE" />
<permission
android:name="textsnoop.rddigi.com.textstats.permission.C2D_MESSAGE"
android:protectionLevel="0x2" />
<uses-permission
android:name="textsnoop.rddigi.com.textstats.permission.C2D_MESSAGE" />
<application
android:theme="#ref/0x7f0800a3"
android:label="Writing Analyzer"
android:icon="#ref/0x7f030000"
android:allowBackup="true"
android:supportsRtl="true"
android:roundIcon="#ref/0x7f030001">
<activity
android:name="textsnoop.rddigi.com.textstats.MainActivity">
<intent-filter>
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="textsnoop.rddigi.com.textstats.ResultsActivity" />
<activity
android:theme="#ref/0x0103000f"
android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="0xfb0" />
<activity
android:theme="#ref/0x7f080111"
android:name="com.google.android.gms.ads.purchase.InAppPurchaseActivity" />
<activity
android:theme="#ref/0x01030010"
android:name="com.google.android.gms.common.api.GoogleApiActivity"
android:exported="false" />
<receiver
android:name="com.google.android.gms.measurement.AppMeasurementReceiver"
android:enabled="true"
android:exported="false" />
<receiver
android:name="com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver"
android:permission="android.permission.INSTALL_PACKAGES"
android:enabled="true">
<intent-filter>
<action
android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<service
android:name="com.google.android.gms.measurement.AppMeasurementService"
android:enabled="true"
android:exported="false" />
<receiver
android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
android:permission="com.google.android.c2dm.permission.SEND"
android:exported="true">
<intent-filter>
<action
android:name="com.google.android.c2dm.intent.RECEIVE" />
<action
android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category
android:name="textsnoop.rddigi.com.textstats" />
</intent-filter>
</receiver>
<receiver
android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver"
android:exported="false" />
<service
android:name="com.google.firebase.iid.FirebaseInstanceIdService"
android:exported="true">
<intent-filter
android:priority="-500">
<action
android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
<provider
android:name="com.google.firebase.provider.FirebaseInitProvider"
android:exported="false"
android:authorities="textsnoop.rddigi.com.textstats.firebaseinitprovider"
android:initOrder="100" />
<meta-data
android:name="com.google.android.gms.version"
android:value="#ref/0x7f0c0003" />
</application>
Please check your permissions and features in manifest file. Especially if you're mentioning any feature/permission that has required attribute e.g: <
uses-permission android:name="android.permission.READ_PHONE_STATE" android:required="true"/>
Remove the "android:required=true " part then it should work fine in Play Store.
I don't know exactly what caused the change, but I went through and cleaned the project with lint. I also removed a call to the apache commons io from the app. I suspect that is most likely the issue.
A possible reason for this is that your minimum API level is high, leading to your app being incompatible with many devices. Checkout:
Changing API level Android Studio if you want to change your minimum API level.
Try setting all the uses-feature"-tags to false
Try removing all permissions (I know the app won't work without them, but just for the sake of figuring out why Google Play says that the app supports 0 devices)
I have generated an APK using Android Studio and I don't know why the APK behavior is different from installing the software using the usb wire on debug mode. I have two activities in the same application and when I install it from debug, it appears the first of them but if I install it using the APK, it is launched directly in the second activity.
Any hint?
Thanks!
EDIT: this is the new manifest after modifying it accordingly to the answer given by Bala Raja. However, the problem is that now Android is not identifying the second activity as a Launcher. What could I do?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="19"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.REORDER_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="#string/app_name" android:icon="#drawable/happy" android:debuggable="true">
<activity android:name=".Configure"
android:label="#string/app_name"
android:theme="#android:style/Theme.Holo.Light.NoActionBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".Launcher"
android:label="#string/app_name"
android:theme="#android:style/Theme.Holo.Light.NoActionBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.CLOSE_SYSTEM_DIALOGS" />
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
paste this in your activity in manifest file which you want first.
I have an apk. I need to change some sprites in the apk and the logo.
I first decompile the apk you send using: apktool.bat d -s -f "SRacer.apk"
Then I change the logos and the car sprite.
Then I rebuild apk using apktool.bat and parameter b.
Then I sign this apk using jarsigner and my keystore file
Then I use: zipalign.exe -v 4 SRacer.apk
I check the signing using jarsigner and it says its correct.
But then the admob ads don't work.
I checked the androidmanifest of the compiled apk and it has the configchanges and adactivity in the XML.
I don't know what is going wrong because instead of ads I see
"You must have AdActivity declared in AndroidManifest.xml with configChanges" but that activity is declared, I'm sure.
Here is the manifest (AFTER its compiled and signed):
<?xml version="1.0" encoding="utf-8"?>
<manifest android:versionCode="3" android:versionName="1.2" android:installLocation="auto" package="com.androidapps.sracer"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:theme="#style/AppTheme" android:label="#string/app_name" android:icon="#drawable/ic_launcher">
<activity android:label="#string/app_name" android:name="com.androidapps.sracer.MainMenuActivity" android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:label="#string/app_name" android:name="com.androidapps.sracer.LevelSelectActivity" android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.ALTERNATIVE" />
</intent-filter>
</activity>
<activity android:label="#string/app_name" android:name="com.androidapps.sracer.RecordsMenuActivity" android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.ALTERNATIVE" />
</intent-filter>
</activity>
<activity android:label="#string/app_name" android:name="com.androidapps.sracer.HelpMenuActivity" android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.ALTERNATIVE" />
</intent-filter>
</activity>
<activity android:label="#string/app_name" android:name="com.androidapps.sracer.PreloaderActivity" android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.ALTERNATIVE" />
</intent-filter>
</activity>
<activity android:label="#string/app_name" android:name="com.androidapps.sracer.GamePlayActivity" android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.ALTERNATIVE" />
</intent-filter>
</activity>
<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode" />
</application>
</manifest>
The problem that I see is, that You haven´t declared the complete attributes to the configChanges. Also, you need to set Your SDK Version maybe to a higher level, because older versions don´t support all attributes (if I am remeber correctly, it is API 13 needed). Your configChanges should look like this:
<activity android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
The attributes are case sensitive, so be sure to set them correctly.
I have an app on the app store and in the manifest file I have two permissions, but when I go to install the app on a phone or tablet it says the app doesn't require any special permissions. My manifest file is below. Why does it says there are no special permissions when there is?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.howlinapps.battery.level"
android:versionCode="6"
android:versionName="1.05" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="18" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name" >
<activity
android:name="com.howlinapps.battery.level.MainActivity"
android:label="#string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.howlinapps.battery.level.About"
android:theme="#android:style/Theme.Dialog" >
</activity>
<receiver android:name="com.howlinapps.battery.level.MyBroadcastReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<service
android:name="MyService"
android:icon="#drawable/ic_launcher"
android:label="Battery level service" >
</service>
</application>
</manifest>
The permissions show up on the Play Store Web site. They are not showing up in the Play Store app for some reason. So long as your app is working -- meaning that you are getting the permissions -- this would appear to be a bug in the Play Store app and, therefore, is not your problem.
I'm trying to combine the functionality of BasicAccessoryDemo with AndroidWebServer (basically a USB=>Electronics interface with a simple web host app)
My java knowledge is limited at the moment and I'm running into some issues.
I tried combining the code into one project, but couldn't get it to work. I've read about adding one project to the other as a library.
Tell the BasicAccessoryDemo it's a library
Tell AndroidWebServer to include the BasicAccessoryDemo library
If I try to call a BasicAccessoryDemo method inside AndroidWebServer, I get the error 'accessoryManager cannot be resolved'. Which looks like there's no real connection between the apps?
Tried adding the BasicAccessoryDemo AndroidManifest.xml info to the AndroidWebServer manifest, but doesn't make a difference. Am I missing something? Sorry if this is a noob question, I've been trying to get this to work for a week now.
If anyone could point me in the right direction, that would be terrific!
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.varma.android.aws"
android:versionCode="1"
android:versionName="1.0"
android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-sdk android:targetSdkVersion="14" android:minSdkVersion="10"></uses-sdk>
<uses-permission android:name="android.permission.VIBRATE"></uses-permission>
<application
android:icon="#drawable/icon"
android:label="#string/app_name"
android:name="com.varma.android.aws.app.AWSApplication"
android:description="#string/app_desc" android:debuggable="true">
<activity
android:name="com.varma.android.aws.ui.AWSActivity"
android:label="#string/app_title">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.varma.android.aws.ui.AWSMessageActivity"
android:label="#string/message_title"
android:theme="#android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity
android:name="com.varma.android.aws.ui.AWSPreferenceActivity"
android:label="#string/preference_title">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<service android:name="com.varma.android.aws.service.HTTPService" />
<!-- this section from BasicAccessoryDemo -->
<activity
android:name="com.microchip.android.BasicAccessoryDemo.BasicAccessoryDemo"
android:label="#string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!-- <category android:name="android.intent.category.LAUNCHER" /> -->
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
android:resource="#xml/accessory_filter" />
</activity>
<uses-library android:name="com.android.future.usb.accessory" />
</application>