I am using the "org.simalliance.openmobileapi.jar" file from SDK. I copied it to my libs folder and added the dependency like this
Case #1: working fine (in debug mode)
In app Gradle file I have:
provided files('libs/org.simalliance.openmobileapi.jar')
Case #2: not working (in release mode - without minifyEnabled)
In app Gradle file I have:
compile files('libs/org.simalliance.openmobileapi.jar')
In case #2 I get the following exception:
(java.lang.SecurityException: Access Control Enforcer: no APDU access allowed!)
What could cause the problem?
First of all, you need to use the "provided" scope in your build.gradle file for both your debug and your release build:
dependencies {
[...]
provided files('libs/org.simalliance.openmobileapi.jar')
}
UPDATE
"provided" is obsolete and has been replaced with "compileOnly", so for current gradle versions, you need to use (as commented by TT):
dependencies {
[...]
compileOnly files('libs/org.simalliance.openmobileapi.jar')
}
Moreover, you need to have a uses-library entry in your AndroidManifest.xml:
<uses-library android:name="org.simalliance.openmobileapi"
android:required="true" />
However, since you got a SecurityException with the reason "Access Control Enforcer: no APDU access allowed!", this is a clear indication that linking to and using the system-provided Open Mobile API library worked as expected and that you successfully connected to the SmartcardService system service on your device. Consequently, you seem to have your build working as expected.
Therefore, the SecurityException already clearly tells you what the problem is:
Access Control Enforcer: no APDU access allowed!
This means that the access control list on the secure element is not properly configured. Since your debug build works, you probably did register the certificate for your debug environment with the ARA applet (and/or the ARF file) on the secure element. However, release builds are not signed with that same debug keys (certificate). Instead, they are signed with the release keys (certificate) that you chose when selecting "Generate Signed APK..." in Android Studio. Therefore, you have two options:
Add the release certificate to the list of allowed applications for your applet on the secure element.
Change access conditions on the secure element to ALLOW ALL in order to allow access to any applet from any device app.
Depending on your secure element, you would typically need to update the ARA (GlobalPlatform Access Control) applet (AID A00000015141434C00) or the access rules file (ARF) located in a PKCS#15 application (AID A000000063504B43532D3135) or in the SIM file system with the new access conditions.
I have gone through every possible adjustment variable I could find to try to try to make this work:
I adjusted sdk versions: android:minSdkVersion="19" android:targetSdkVersion="22"
I made sure that all my settings matched this: https://library.vuforia.com/articles/Solution/Integrating-Cardboard-to-the-ARVR-Sample
I also followed these instructions for Android:
https://developer.vuforia.com/forum/faq/unity-player-settings
I even changed AndroidManifest.xml to be AndroidManifest-Vuforia.xml
I'm running
Unity 5.3.0 / Vuforia6.0.117 / Samsung Galaxy S6 Active / And the latest google cardboard
The program compiles and runs perfectly on my webcam, but the second I install it on my phone and run it, I keep getting the same Vuforia Initialization Error no matter what I do. And yes, I made sure to give the app permission to use the camera.
Can anyone help? I've scowered the internet and I cant get the thing to work.
Under the 'Vuforia' menu, click 'Configuration', then disable the 'webcam' setting.
I had this problem and it was because I didn't write my Vuforia license key. In the class SampleApplicationSession find the line thats similar to this:
Vuforia.setInitParameters(session.mActivityRef.get(), session.mVuforiaFlags, "KEY_HERE");
It could be on line 370 or 414. But insert your key there and that could fix it.
I had same problem in android studio to fix it I first get licenseKey from here and then go to Project-> app/cpp/Croossplatform/AppController of my projects and then go to the
namespace
{
constexpr char licenseKey[] = "your key ";
}
line 55-60 AppController
This seems to be a problem in the Vuforia Unity package. Download the latest Vuforia-Unity package from https://developer.vuforia.com/downloads/sdk and import the new package into the project and replace the old package. This should resolve the error.
Other possible fixes that didn't seem to help in my case included: giving camera permissions in AndroidMainfest File, changing the Vuforia API key and disabling Vuforia Play Mode.
I've started getting a weird error message when trying to upload a playbook app update to BlackBerry world. I think this problem started after installing version 1.6.1 of their eclipse plugin.
The error message:
"The package version in your .bar manifest file for signals_playbook must be greater than the previous version, but lower than any the next release version added to the vendor portal. . Your .bar manifest file package version must be greater than 3.0. Correct your .bar manifest file and try again to continue."
My AndroidManifest.xml contains:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ca.rcp.mobile.cror.signals"
android:versionCode="7"
android:versionName="3.1" >
The Manifest file contained within the BAR shows this info:
Archive-Manifest-Version: 1.1
Archive-Created-By: Apk2Bar version 1.6.1
Package-Author: xxxxxxxx
Package-Author-Id: some hash xxxxxxxxx
Package-Name: xxxxx.cror.signals
Package-Id: some hash xxxxxxxxx
Package-Version: 1.0.7.1
Package-Version-Id: some hash xxxxxxxx
Package-Type: application
Package-Architecture: armle-v7
Package-Author-Certificate-Hash: some hash xxxxx
Application-Name: Railway Signals
Application-Id: some hash xxxxxxxx
Application-Version: 1.0.7.1
Application-Version-Id: some hash xxxxxxxxxxx
Application-Requires-System: Tablet OS/2.0.0.7109
My system:
Windows 7 x64 using Eclipse 3.7.2 with latest ADT and updates.
I can see why BlackBerry world is complaining, it thinks the version number is 1.0.7.1. How do I get it to show 3.1.0.0??
I tried editing the manifest file contained within the bar, saving it and resubmitting. But that didn't work (didn't think it would but was worth a try).
Does anyone know where is the 1.0.7.1 coming from?
Can I override it?
Thanks
Rob
We suddenly started having the same problem with our builds. Evidently something changed in the BlackBerry build tools. Try setting the application's android:versionName attribute to a 4-part value (such as 3.1.0.1). BlackBerry has always used this format (major.minor.micro.build) for native apps. It seems that unless your Android manifest has the same format, the BlackBerry build tools fail to parse the versionName attribute and use a fall-back. From what I can tell, the fall-back is to use the value of android:versionCode as the micro version in a default application version code; that is it sets the app version in the .bar file manifest to
1.0.<android:versionCode value>.1
(I sure wouldn't want to be the engineer that had to defend implementing this behavior.)
An alternative approach is to create a custom manifest file that has the app version you want. Create a file named MANIFEST.MF in the same directory as AndroidManifest.xml. Then add the specific .bar manifest entries you want. For instance, it might be:
Archive-Manifest-Version: 1.1
Package-Version: 3.1.0.0
Application-Version: 3.1.0.0
Then open the project properties in Eclipse, navigate to BlackBerry, and for the "Custom BAR Manifest" drop-down, select "Add custom values (merge)".
Thank you, Ted!
There is another link on this topic;
http://supportforums.blackberry.com/t5/BlackBerry-World-Development/The-package-version-in-your-bar-manifest-file-for-New-Bundle/td-p/2754567
We started to notice problem after move to Gradle:
Before
AndroidManifest.xml:
android:versionCode="1312310309" android:versionName="2.28.4"
MANIFEST.MF:
Application-Version: 14.1231.309.0
After
AndroidManifest.xml:
android:versionCode="134" android:versionName="2.30.31402271059"
MANIFEST.MF
Application-Version: 1.0.134.0
I also had the same problem but I fixed it by adding this line in my Android Manifest file android:versionCode="30" previously I had android:versionCode="29" so upgraded it by one .And the problem got fixed for me.
I recently published an app to the market and I'm now getting an error by some user, the app presumably crashes right when it starts. Unfortunately I can't contact him directly and the app works fine in the emulator as well as on my phone (and some friends' phones).EDIT: I guess that this happens to more than one user as I received comments in the market like "crashes on start" or "doesn't work". I only received this one stacktrace but there's no info about the configuration, device, Android version, etc.
The app is a simple soundboard, so there's really no magic involved, but I can't get why it fails on some phones. Here's the stack trace I'm getting, I hope anybody can help me out:
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.my.app/com.my.app.SoundMachine}: java.lang.ClassNotFoundException: com.my.app.SoundMachine in loader dalvik.system.PathClassLoader[/mnt/asec/com.my.app-1/pkg.apk]
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
at android.app.ActivityThread.access$2300(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ClassNotFoundException: com.my.app.SoundMachine in loader dalvik.system.PathClassLoader[/mnt/asec/com.my.app-1/pkg.apk]
at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
... 11 more
These are the first couple of lines from my activity:
public class SoundMachine extends Activity {
private SoundManager mSoundManager;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
EDIT: This is the (almost) complete onCreate:
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mSoundManager = new SoundManager();
mSoundManager.initSounds(getBaseContext());
int counter = 0;
for (Integer soundFile : soundFiles) {
counter++;
mSoundManager.addSound(counter, soundFile);
}
ImageButton SoundButton1 = (ImageButton) findViewById(R.id.sound1);
SoundButton1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mSoundManager.playSound(1);
}
});
SoundButton1.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
saveSoundChoice(soundFiles[0], soundNames[0]);
return true;
}
});
(...more of this...)
Button StopButton = (Button) findViewById(R.id.stopbutton);
StopButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mSoundManager.stopAll();
}
});
}
And here's my manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.my.app" android:installLocation="preferExternal"
android:versionCode="9" android:versionName="1.2">
<application android:icon="#drawable/icon" android:label="#string/app_name">
<activity android:name=".SoundMachine" android:label="#string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="8" />
</manifest>
So all possible errors I already read about here and in some forums don't apply to my app.
The activity is present in the manifest.
The super-method is called in the overriden method.
The ContentView is set before accessing elements in the view.
I know it's hard to pinpoint the source of an error without being able to reproduce it, but maybe somebody has a bright idea and can help me out.
Some questions:
Do I need the "intent"-part in the manifest? Eclipse created it when I created the project. (Yes, according to Mayra)
Should the super-method be called where it is? (Yes, according to Mayra)
EDIT: The main question that remains now is: How come the path in PathClassLoader is different from my package-name? The page John J Smith posted seems to deal with the same problem, but I don't understand the fix that was applied there.
Thanks, Select0r
I solved this problems by selecting :
Project->properties->order and export
select the all external jar files.
clean and build it solved the issue
Since ADT update to revision 22 (May 2013) you have to check "Android Private Libraries" check box in Project -> Properties -> Java Build Path -> Order and Export in Eclipse for your older projects to get rid of this exception ...
I just got the same error (Unable to instantiate activity...) with Opera Mini. Opera Mini was on SD card (moved to SD card in the app setting). The error seems to be related to the fact that I swapped the SD card yesterday. The device was shutdown, I copied all data from the old card over to the new card (with cp -a) and then inserted the new card and started the device again. Everything seems to work as expected, but I see now that all apps on the SD card crashes with the same error.
Device: HTC Desire HD (Android 2.2)
Old SDHC card: SanDisk 8GB class 4
New SDHC card: Kingston 16GB class 4
So I would say that this is a an Android bug and not something that can be fixed by app developers.
Also see:
http://android-developers.blogspot.com/2010/07/apps-on-sd-card-details.html
It has always been the case that when you swap SD cards on an Android device, if you physically copy the contents of the old card to the new one, the system will use the data on the new card as if nothing had changed. This is also true of apps which have been installed on the SD card."
This seems to be incorrect.
This happened to me when I refactored one of my package names and the refactor tool removed the leading "." from all of my activity names. so in the AndroidManifest.xml, I had to change android:name="MyActivity" to android:name=".MyActivity"
hope this helps someone, I just wasted a bunch of time o
This doesn't apply to the OP's question, but it did to mine and it took me quite some time to figure it out: when using the Google Maps API, make sure you've included the library declaration in the application manifest.
For instance:
public class MyActivity extends MapActivity {
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
#Override
protected boolean isRouteDisplayed() {
return false;
}
}
In AndroidManifest.xml:
<application>
<uses-library android:name="com.google.android.maps" />
<activity android:name="MyActivity" android:label="#string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
I don't know why the path in the PathClassLoader is different to your package name but when testing on the emulator try forcing a close then run it again, as per this link
I had the same problem of you and, after hours of search, I discovered something interesting. I'll try to expose that as clearly as possible:
I created a project with a package called "myapp.sound" containing the activity. Program ran normally;
I renamed that package calling it "app.soundapp" and program still ran normally.
However, in the manifest.xml file of the program there was something strange: the name of package was the old "myapp.sound". I changed manifest with correct new name and, from that moment on, our error occured. I don't know why, but seems that the "package name changer" of Eclipse doesn't update all the dependencies. If it's not strictly necessary, don't rename the package containing activity.
Maybe, to solve your problem you have to create a new project and copy inside it all your java class.
Look at the package defined at the top of the manifiest file and make sure that it matches the package where you class is defined.
My problem was that I did not have matching package names.
Also enusre that you have a folder named "libs" with an 's'. Put all of you jar files that you added inside it and add to build path.
This problem can also occur if you have a constructor with one or more parameters in your activity class.
This problem might exist when you change the name of your class and update the manifest file and the manifest file is not updated on the emulator. Try uninstall the application from emulator and then reinstall it. This will work.
I was coming across this problem when I was including java Projects in my buildpath for my android project targeting JavaSE-1.7.
For some reason my emulator would not throw a class not found if the java project it was including was originally created targeting JavaSE-1.6. Eclipse would give me a warning "Build path specifies execution environment JavaSE-1.6. There are no JREs installed in the workspace that are strictly compatible with this environment." But the Android emulator would launch and I would not get a classnotfoundexception
So if you are including projects that target JavaSE-1.7, remake them targeting JavaSE-1.6 and this may solve your problem.
Good luck!
Similar to Bobf Cali, I first saw this error after renaming my base package to change the "example" section. To fix it, I had to delete my gen and bin directories, clean the project, and rebuild.
Note depending on what version of the eclipse android plugin you're using (if any), you may also have to update activity names in your AndroidManifest.xml
Saw the same error message after doing a simple upgrade of my app. Fixed it by doing this:
Project->Build automatically OFF
Project->Clean->Selcting my project
Then I did a new export of my signed app, and it worked.
Are you sure your package name is unique? I don't know what happen if the user has another app using the same package name, but maybe it can cause strange errors like this.
EDIT: I just saw this page, it remembers me I already had this problem when downloading an app from the Android market. The app crashed on startup, I tried a lot of times but I always ended with the same result. Then I tried to uninstall the app, reinstall it, and everything worked fine. I'm still using it today and the problem never happened again.
On my link, you can also see that they reproduced your error by making the app unreachable (unmount SD), so it's definitely not a problem with your code.
Check out this article: http://www.androidguys.com/2010/05/22/storing-apps-sd-froyo/ which explains the limitations of storing apps on SD cards. If your users have their SD card mounted by a computer, that might make the SoundMachine class invisible. And I wonder if the cp command fails (perja's attempt to fix) because it might change the ownership of the files such that the userid of the app and the ownership of the files don't match anymore.
I had the same issue in a recent Android project. The problem turned out to be pretty simple yet it was hard to locate. This happened to me then I refactored the package name of the entry point activity of the app. This created a conflict with the gen/.../R.java file, since the package there was not refactored. Eclipse did not complain, but at runtime i got the same error you posted: could not instantiate... classNotFoundException...
Lesson learned from this: do NOT refactor the package name that holds your main activity!
Hope this helps you or anyone breaking his/her head over this error!
I solved this and could locate the causes:
-The Manifest will be corrupt. Even if the package-structure is right and every single data was written down correctly the activity will not be found.
-R will be in the package-structure which was first declared before renaming.
-The run-configurations are setup with the wrong package of R. So the activity can't be found.
What we have tried:
-Manually editing the run-configs via export/import
-Manually renaming the package-structure
-Manually renaming the R-package-structure
-Deleting the run-config (it will be rebuild if you try to start the app)
Solution:
Try to setup a new project without reusing your manifest. I have tried to reuse it and got the same problems all over again. So after the main cause has to be the corrupt manifest.
I hope this helps!
Make sure your /src dir is listed in your projects>properties>java build path>source
Maybe it is too late to solve your problem but hopefully it will help someone else.
I had a similar problem and after many tries, I decided to delete R.java. That did the trick.
This error can also occur when you (at the project level) incorrectly Import > Android > Existing Android Code Into Workspace, via Eclipse. In my case, this resulted in an empty "src" folder, but then I noticed new folder starting with "java" at the root and continuing with the package path (i.e. com/zyzcorp/...), leading to the MainActivity.java file.
To test what I thought may fix the problem, I copied the com.*.MainActivity.java file into the src folder, refreshed, cleaned, and restarted Eclipse. I was able to build and run the app on the target device.
I don't see anything obviously wrong. All I can say is to try to test it in as many different configurations as possible.
Test it in the emulator for every possible SDK level, follow the guidelines for testing on different sized screens (although that doesn't seem to be your problem).
Try to test it on a phone from each of the major providers, if you can find friends that have them: HTC Sense, Motoblur, etc.
If you only get one report, it might just be something screwy with that guys device. See if you get other, similar reports that add more data.
You had renamed the package anytime? This normally happens if the package was renamed after creation. Following link should be helpfull in that case http://code.google.com/p/android/issues/detail?id=2824. If this is not the case,please post your complete manifest file.
I has the same problem but this fixed it. In my androidmanifest.xml i had this line called android:name = myappnameActivity. Although my class name was just myappname. Hence i took off the Activity part in the xml file and all was fine.
I was just having a problem with this myself, so I want to bring up what caused the problem for me. I had just included some new libraries setting up expansion APKs. The libraries are dependant on each other and I was only including one of them in my properties > android > libraries.
So this could happen if the user is missing a library on their phone that most users have.
It showed ClassNotFoundException on my main activity because it implements a class which was in the missing library.
I had 5 different packages. And for some reason the compiler was looking for the activity on the wrong package.
So I switched my activity and all the class that inherits the activity to the package that it was looking into.
I got the name of the package it was looking for in the beginning of the logcat.
I fix this problem by deleting "bin" and "gen" folder, and rebuilding project.
I had the same problem
I solved it by
uncheck the Android Dependencies from Project--> Properties-->Java builder Path-->android dependencies
Delete BIN and GEN folder files. Rebuild, everything should work. Check if theres another error below the "unable to instantiate", sometimes another error is firing this (activity cant load because of something even if its class has been found.
What I had to do is just re-do the building/exporting process with no modification to the code whatsoever. It worked for me, which I did was to export it two times. On my first export, the build APK has lower file size and the second export (with no any modification to the code/configuration) produced a slightly larger file size (about 200KB diff).
This bug in building is really costly, kills you in front of your manager, and should be really fixed by Android/Eclipse team. Kind of sucks
After spending 6 hours on this issue, found that it was a silly mistake. Apparently if you're defining your Application class in android manifest and you have enabled MultiDex enabled, you have to add that on Application Class. Here is example from my app.
It only gave me error on devices running on < Android 5.0
AndroidManifest.xml
......
<application
android:allowBackup="true"
android:icon="#drawable/ic_launcher"
android:label="#string/app_name"
android:theme="#style/AppTheme"
android:name=".AppClass"
.........
AppClass.java
class AppClass : Application() {
override fun onCreate() {
super.onCreate()
}
override fun attachBaseContext(base: Context) {
super.attachBaseContext(base)
MultiDex.install(this) //Don't forget this !!!!
}
}