Envoyé par
grunk
Les commandes que je te donne sont a taper dans un terminal. javac c'est le compilateur java. Donc si tu as une installe du JDK sur ta machine c'est disponible. ...
Alors que dans Android Studio, la commande "Build --> Make Project" me fournit un fichier *.apk sans problème, la commande dans un terminal me donne :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| C:\Users\prcha\.jdks\openjdk-15.0.1-1\bin>javac E:\StudioProjects\FctExt\app\src\main\java\com\example\fctext\ClasseExt.java
E:\StudioProjects\FctExt\app\src\main\java\com\example\fctext\ClasseExt.java:3: error: package android.app does not exist
import android.app.Activity;
^
E:\StudioProjects\FctExt\app\src\main\java\com\example\fctext\ClasseExt.java:4: error: package android.util does not exist
import android.util.Log;
^
E:\StudioProjects\FctExt\app\src\main\java\com\example\fctext\ClasseExt.java:6: error: cannot find symbol
public class ClasseExt extends Activity {
^
symbol: class Activity
E:\StudioProjects\FctExt\app\src\main\java\com\example\fctext\ClasseExt.java:9: error: cannot find symbol
Log.d(ClasseExt.class.getName(), "ClasseExt: constructor called.");
^
symbol: variable Log
location: class ClasseExt
4 errors
C:\Users\prcha\.jdks\openjdk-15.0.1-1\bin> |
Je n'obtiens donc pas de fichier .class.
Envoyé par
grunk
...Le code ne doit pas s’exécuter moins vite , en revanche le chargement de ce code est plus long.
Comme une dll , le code est natif donc aussi rapide que le code normal mais le chargement la dll peut être couteux à l'instant T
Je me doute bien que le code s'exécute aussi vite que le code interne, mais l'accès à la fonction est alors extrêmement long si on considère que le chargement de la classe externe se fait ici :
1 2 3 4 5 6 7 8
| final DexClassLoader classloader = new DexClassLoader(libPath, tmpDir.getAbsolutePath(), null, this.getClass().getClassLoader());
final Class<Object> classToLoad = (Class<Object>) classloader.loadClass("com.example.fctext.ClasseExt");
final Object myInstance = classToLoad.newInstance();
final Class[] args = new Class[2];
args[0] = int.class;
args[1] = int.class;
final Method ajouter = classToLoad.getMethod("ajout", args); |
et que son utilisation se fait ici :
int res = (int) ajouter.invoke(myInstance, 1, 1);
Ça veut quand même dire que l'accès à la fonction (invoke) prend une quantité de temps incomparablement plus grande que l'exécution du code qu'elle contient.
Est-ce que cela pourrait être dû à ma méthode d'obtention du fichier du fichier .jar juste pas changement de l'extension (la méthode que tu me proposes ne fonctionnant pas) ?
Je viens de refaire une simulation sur 62000 points avec mon ancienne version Windows. Sans faire de mesure de temps, je n'ai pas noté de différence notable entre une fonction interne et une fonction appelée par une dll.
Cordialement.
Pierre.
Partager