Aide - Recherche - Membres - Calendrier
Version complète : [KU990/Viewty] - Hack du viewty
Forum Mobiles > Les Mobiles > LG
Pages : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60
lolo-ViewTy
ok ca roule.
en tout cas il est 3 fois plus gros que celui du ku950 (j'espere qu'il sera 3 fois plus lisible mais je doute, on verra bien)
0mega
Alors ? Des .swf en vu ?
lolo-ViewTy
Bon après 65min pour ouvrir et décompiler le firmware V10a du KU990, sous IDA,
et ba en faite pas grand chose, glurps.gif. Effectivement je m'attendais à mieux. En tout cas ton fichier et le bon, je confirme,on y aperçoit une quarantaine de fichiers SWF mais bon pas de possibilité de les ouvrir ou de les remplacer.

Déçu mais bon ca peut être un nouveau début de piste.
Je joins un imprime écran pour montrer quelque adresse des SWF sur notre Viewty, reste plus qu'a y accéder!!!

Cliquer sur l'image pour l'agrandir Cliquer pour agrandir
0mega
Arf, pour les remplacer ou les extraires, ne faut il pas passer par un autre log ?
lolo-ViewTy
si mais je n'es aucune idée du quel. il faudrait vraiment trouver un bon explorateur de fichier sur mobile comme mobyexplorer mais en plus complet.
car de toute façon si on modifi le firmware a chaque fois que l'on souhaite changer une icone ou autre ca sera un peut galére.
il faut y avoir acces directement a partir du tel.

bon je lache mon ordi pour quelques heures, je revindrai plus tard avec, qui sait, des idées neuves.
gountar
Ok c'est cool je vois que ça avance un peu ! j'ai pas le temps de bosser la dessus vu le taff que j'ai au boulot et l'heure a laquelle je rentre le soir tongue.gif

Par contre c'est exactement ce que je pensais depuis le debut c'est bien dans le firmware que sont les themes et mauvaise nouvelle ça veut dire que l'on aura pas de themes persos par les moyens "legaux" mais via modif de firmware et donc risque de brickage si on y touche et vu que pour l'instant on n'a aucun moyen de lancer des applications persos la dessus (ce qui reste compliqué sur un telephone qui a une interface proprietaire et non un derivé d'OS standard...) le seul moyen de mettre des themes persos dessus c de modifier le firmware et de reflasher le telephone a chaque fois.... pas tres convivial si c'est meme realisable...

a voir ce que l'avenir nous reserve ... a moins d'une refonte complete du systeme par LG avec la possibilité de mettre en place un systeme de couche visuelle pour non pas modifier les themes mais mettre des personnnalisations par dessus ceux d'origine...

enfin ça fait beaucoup de "si" tout ça ... je suis pas sur que cela nous mene quelque part ^^

pour ceux qui s'y connaissent dites moi si vous etes d'accord..
lolo-ViewTy
Moi je ne suis pas si sur que seul la modif du firmware soit "la" solution, ca en est bien une mais elle est beaucoup trop lourde à mètre en oeuvre.
On doit bien pouvoir accéder aux fichiers du téléphone à partir de celui ci, vu qu’ils sont situés dans sa mémoire interne.
Le téléphone peut utiliser le langage java. Alors pourquoi ne pas l'utiliser?
Perso je ne programme pas, mais il doit être possible (en prenant pour base le code source de mobyexplorer par exemple) de crée un explorateur de tout les fichiers à partir de la racine du tel.
Faudrait voir sur des forums d'informaticien et de programmeurs.
thomshao
POur ma part j'ai recherché justement à faire un explorateur perso pour avoir accès à tous les fichiers sans limites.

- Moby explorer qui demande une authorisation à chaque accès car il n'est pas signé par celuiqui l'a fabriqué
( une fois signé il suffit de l'authorisé de façon definitive ou pas).

- Pour la programmation en java, j'ai récupérer les composant MIDP chez sun mais la surprise les "fonction" utilisable pour obtenir la liste des "disques" et des dossier et fichier ne sont plus présent. je ne saispas depuis quand mais c sur il y était avant parceque j'ai trouvé des post de avril 2006 dans des forum où les gens s'en servaitent. Sachant que la dernière version des librairie MIDP sont 2.1 et que le viewty utilise la version 2.0 ca c'est sur. Si on trouve une ancienne version qq part, alors les fonctions d'accès aux fichiers seront peut ête dedans ?

- Pour ma part j'ai juste fais un mini programme qui desine un rond la où je pointe le stylet sur lécran pour vori ce que l'on pouvais faire. Mias pour les fichiers.....

Mias bon faut perseverer ça avance.
kevsr25
Envoie ton Log...si sa te derange pas voir a quoi sa ressemble ?
lolo-ViewTy
je comprend pas sur le site de sun http://java.sun.com/products/midp/ il parle de la version 2.0 et 1.0 de midp alors que toi tu parle de la 2.1 et tu ne trouve pas de version anterieur?
thomshao
En fait une fois installé dans les config tu peut choisir MIDP 1.0, 2.0 ou 2.1 (le 2.1 n'est pas supporté par le ViewTy)

Ce qui manque dans tou ce que j'ai trouvé chez sun, c'est la classe "file" contenu dans "javax.microedition.io.file"

Dans cette classe , tu as des fonctions pour trouver parcourir et ouvrir les dossiers et fichier dont une qui serait surrement très interessante car elle permet de lister les "drive" puis à partir de là on pourrais parcourir tout le tel.

Sur certain forum des post de 2006 disent utliser ces fonctions.
----> http://www.developpez.net/forums/showthread.php?t=112384

Pour mon log il ressemble vraiment à rien lol un fond blanc, tu pointe et il dessine un mini rond violet de 2mm.

thomshao
HA j'ai trouvé ce qui est peut ête la raison pour laquelle nous n'avons pas accès par deffaut à tous les dossiers,
sur le site de sony-ericson :

[citation]
"Sony Ericsson specifics:
Sony Ericsson's implementation of JSR 75 has some restrictions including:

* The folders Games and Themes can not be accessed
* Files and Directories are case sensitive
* The length of the file path is limited by the native file system which is 120 characters
[Fin Citation]

Donc peut je sais pas si avoir la jsr75 qui contient les fonctions d'accès aux fichiers nous aidera ou pas mais ici c'est une version modifier de la jsr75 qui était dans le sdk de chez sony ericson. ALors si c une limitation sdk on pase au dessus en théorie si on utilise un version complète de la librairie.

Enfin c'est a voir tout ça.

Si quelq'un trouve une version de la librairie "PIM and File Connection" alias "JSR75", il faut que dans la doc en html (dans l'index global ou ya toute la liste des fonction c'est simple à verifier), il y ai
les fonctions commençant par "File" (aucune ne commence pas file dans ce que j'ai déja trouvé).
KU990_lover
Salut,
Ca fait qql jour que je surveille l'evolution du hack du viewty et je suis content de voir que vous avancez à grand pas. J'espere qu'on aura bientot un Viewty tt customiser.
Si vous avez besoin de mon aide, je suis ouvert ( en dernière année d'ecole d'ingé en informatique).

Bon courage à tous. Il faut pas abandonner!!!!!
munchausen
salut à tous, petit message de soutien car là j'avoue ne plus suivre... lol
Je pense pouvoir vous aider une fois la possibilité de faire ses thèmes, mais là c chaud !

En tous cas c cool vous avancez sur pas mal de pistes !

j'ai tenter de faire une copie de mon firmware avec "LGMDP World Edition 1.0"....'fin d'après ce que g compris ça pourrait servir à ça. Mais malheureusement il bug chez moi. On doit pouvoir chopper une version plus rescent du logiciel je pense.

Voila si ca peut vous aidez !!

courage !!!!
lolo-ViewTy
Avis aux amateurs:

Voici le code source d'un programme JAVA Mobile Edition, je l'ai testé et on à le méme accés que mobyexplorer.

Pourquoi pas d'accés a la racine du tel ???

si vous y comprenez quelque chose, je suis tout ouie...



package example.fc;

import java.io.*;

import java.util.*;

import javax.microedition.io.*;
import javax.microedition.io.file.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;


/**
* Demonstration MIDlet for File Connection API. This MIDlet implements simple
* file browser for the filesystem available to the J2ME applications.
*
*/
public class FileBrowser extends MIDlet implements CommandListener {
private static final String[] attrList = { "Read", "Write", "Hidden" };
private static final String[] typeList = { "Regular File", "Directory" };
private static final String[] monthList =
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

/* special string denotes upper directory */
private static final String UP_DIRECTORY = "..";

/* special string that denotes upper directory accessible by this browser.
* this virtual directory contains all roots.
*/
private static final String MEGA_ROOT = "/";

/* separator string as defined by FC specification */
private static final String SEP_STR = "/";

/* separator character as defined by FC specification */
private static final char SEP = '/';
private String currDirName;
private Command view = new Command("View", Command.ITEM, 1);
private Command creat = new Command("New", Command.ITEM, 2);

//add delete file functionality
private Command delete = new Command("Delete", Command.ITEM, 3);
private Command creatOK = new Command("OK", Command.OK, 1);
private Command prop = new Command("Properties", Command.ITEM, 2);
private Command back = new Command("Back", Command.BACK, 2);
private Command exit = new Command("Exit", Command.EXIT, 3);
private TextField nameInput; // Input field for new file name
private ChoiceGroup typeInput; // Input field for file type (regular/dir)
private Image dirIcon;
private Image fileIcon;
private Image[] iconList;

public FileBrowser() {
currDirName = MEGA_ROOT;

try {
dirIcon = Image.createImage("/icons/dir.png");
} catch (IOException e) {
dirIcon = null;
}

try {
fileIcon = Image.createImage("/icons/file.png");
} catch (IOException e) {
fileIcon = null;
}

iconList = new Image[] { fileIcon, dirIcon };
}

public void startApp() {
try {
showCurrDir();
} catch (SecurityException e) {
Alert alert =
new Alert("Error", "You are not authorized to access the restricted API", null,
AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);

Form form = new Form("Cannot access FileConnection");
form.append(new StringItem(null,
"You cannot run this MIDlet with the current permissions. " +
"Sign the MIDlet suite, or run it in a different security domain"));
form.addCommand(exit);
form.setCommandListener(this);
Display.getDisplay(this).setCurrent(alert, form);
} catch (Exception e) {
e.printStackTrace();
}
}

public void pauseApp() {
}

public void destroyApp(boolean cond) {
notifyDestroyed();
}

public void commandAction(Command c, Displayable d) {
if (c == view) {
List curr = (List)d;
final String currFile = curr.getString(curr.getSelectedIndex());
new Thread(new Runnable() {
public void run() {
if (currFile.endsWith(SEP_STR) || currFile.equals(UP_DIRECTORY)) {
traverseDirectory(currFile);
} else {
// Show file contents
showFile(currFile);
}
}
}).start();
} else if (c == prop) {
List curr = (List)d;
String currFile = curr.getString(curr.getSelectedIndex());

showProperties(currFile);
} else if (c == creat) {
createFile();
} else if (c == creatOK) {
String newName = nameInput.getString();

if ((newName == null) || newName.equals("")) {
Alert alert =
new Alert("Error!", "File Name is empty. Please provide file name", null,
AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert);
} else {
// Create file in a separate thread and disable all commands
// except for "exit"
executeCreateFile(newName, typeInput.getSelectedIndex() != 0);
Display.getDisplay(this).getCurrent().removeCommand(creatOK);
Display.getDisplay(this).getCurrent().removeCommand(back);
}
} else if (c == back) {
showCurrDir();
} else if (c == exit) {
destroyApp(false);
} else if (c == delete) {
List curr = (List)d;
String currFile = curr.getString(curr.getSelectedIndex());
executeDelete(currFile);
}
}

void delete(String currFile) {
if (!currFile.equals(UP_DIRECTORY)) {
if (currFile.endsWith(SEP_STR)) {
checkDeleteFolder(currFile);
} else {
deleteFile(currFile);
showCurrDir();
}
} else {
Alert cantDeleteFolder =
new Alert("Error!",
"Can not delete The up-directory (..) " + "symbol! not a real folder", null,
AlertType.ERROR);
cantDeleteFolder.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(cantDeleteFolder);
}
}

private void executeDelete(String currFile) {
final String file = currFile;
new Thread(new Runnable() {
public void run() {
delete(file);
}
}).start();
}

private void checkDeleteFolder(String folderName) {
try {
FileConnection fcdir =
(FileConnection)Connector.open("file://localhost/" + currDirName + folderName);
Enumeration content = fcdir.list("*", true);

//only empty directory can be deleted
if (!content.hasMoreElements()) {
fcdir.delete();
showCurrDir();
} else {
Alert cantDeleteFolder =
new Alert("Error!", "Can not delete The non-empty folder: " + folderName, null,
AlertType.ERROR);
cantDeleteFolder.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(cantDeleteFolder);
}
} catch (IOException ioe) {
System.out.println(currDirName + folderName);

ioe.printStackTrace();
}
}

//Starts creatFile with another Thread
private void executeCreateFile(final String name, final boolean val) {
new Thread(new Runnable() {
public void run() {
createFile(name, val);
}
}).start();
}

/**
* Show file list in the current directory .
*/
void showCurrDir() {
Enumeration e;
FileConnection currDir = null;
List browser;

try {
if (MEGA_ROOT.equals(currDirName)) {
e = FileSystemRegistry.listRoots();
browser = new List(currDirName, List.IMPLICIT);
} else {
currDir = (FileConnection)Connector.open("file://localhost/" + currDirName);
e = currDir.list();
browser = new List(currDirName, List.IMPLICIT);
// not root - draw UP_DIRECTORY
browser.append(UP_DIRECTORY, dirIcon);
}

while (e.hasMoreElements()) {
String fileName = (String)e.nextElement();

if (fileName.charAt(fileName.length() - 1) == SEP) {
// This is directory
browser.append(fileName, dirIcon);
} else {
// this is regular file
browser.append(fileName, fileIcon);
}
}

browser.setSelectCommand(view);

//Do not allow creating files/directories beside root
if (!MEGA_ROOT.equals(currDirName)) {
browser.addCommand(prop);
browser.addCommand(creat);
browser.addCommand(delete);
}

browser.addCommand(exit);

browser.setCommandListener(this);

if (currDir != null) {
currDir.close();
}

Display.getDisplay(this).setCurrent(browser);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

void traverseDirectory(String fileName) {
/* In case of directory just change the current directory
* and show it
*/
if (currDirName.equals(MEGA_ROOT)) {
if (fileName.equals(UP_DIRECTORY)) {
// can not go up from MEGA_ROOT
return;
}

currDirName = fileName;
} else if (fileName.equals(UP_DIRECTORY)) {
// Go up one directory
int i = currDirName.lastIndexOf(SEP, currDirName.length() - 2);

if (i != -1) {
currDirName = currDirName.substring(0, i + 1);
} else {
currDirName = MEGA_ROOT;
}
} else {
currDirName = currDirName + fileName;
}

showCurrDir();
}

void showFile(String fileName) {
try {
FileConnection fc =
(FileConnection)Connector.open("file://localhost/" + currDirName + fileName);

if (!fc.exists()) {
throw new IOException("File does not exists");
}

InputStream fis = fc.openInputStream();
byte[] b = new byte[1024];

int length = fis.read(b, 0, 1024);

fis.close();
fc.close();

TextBox viewer =
new TextBox("View File: " + fileName, null, 1024,
TextField.ANY | TextField.UNEDITABLE);

viewer.addCommand(back);
viewer.addCommand(exit);
viewer.setCommandListener(this);

if (length > 0) {
viewer.setString(new String(b, 0, length));
}

Display.getDisplay(this).setCurrent(viewer);
} catch (Exception e) {
Alert alert =
new Alert("Error!",
"Can not access file " + fileName + " in directory " + currDirName +
"\nException: " + e.getMessage(), null, AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert);
}
}

void deleteFile(String fileName) {
try {
FileConnection fc = (FileConnection)Connector.open("file:///" + currDirName + fileName);
fc.delete();
} catch (Exception e) {
Alert alert =
new Alert("Error!",
"Can not access/delete file " + fileName + " in directory " + currDirName +
"\nException: " + e.getMessage(), null, AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert);
}
}

void showProperties(String fileName) {
try {
if (fileName.equals(UP_DIRECTORY)) {
return;
}

FileConnection fc =
(FileConnection)Connector.open("file://localhost/" + currDirName + fileName);

if (!fc.exists()) {
throw new IOException("File does not exists");
}

Form props = new Form("Properties: " + fileName);
ChoiceGroup attrs = new ChoiceGroup("Attributes:", Choice.MULTIPLE, attrList, null);

attrs.setSelectedFlags(new boolean[] { fc.canRead(), fc.canWrite(), fc.isHidden() });

props.append(new StringItem("Location:", currDirName));
props.append(new StringItem("Type: ", fc.isDirectory() ? "Directory" : "Regular File"));
props.append(new StringItem("Modified:", myDate(fc.lastModified())));
props.append(attrs);

props.addCommand(back);
props.addCommand(exit);
props.setCommandListener(this);

fc.close();

Display.getDisplay(this).setCurrent(props);
} catch (Exception e) {
Alert alert =
new Alert("Error!",
"Can not access file " + fileName + " in directory " + currDirName +
"\nException: " + e.getMessage(), null, AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert);
}
}

void createFile() {
Form creator = new Form("New File");
nameInput = new TextField("Enter Name", null, 256, TextField.ANY);
typeInput = new ChoiceGroup("Enter File Type", Choice.EXCLUSIVE, typeList, iconList);
creator.append(nameInput);
creator.append(typeInput);
creator.addCommand(creatOK);
creator.addCommand(back);
creator.addCommand(exit);
creator.setCommandListener(this);
Display.getDisplay(this).setCurrent(creator);
}

void createFile(String newName, boolean isDirectory) {
try {
FileConnection fc = (FileConnection)Connector.open("file:///" + currDirName + newName);

if (isDirectory) {
fc.mkdir();
} else {
fc.create();
}

showCurrDir();
} catch (Exception e) {
String s = "Can not create file '" + newName + "'";

if ((e.getMessage() != null) && (e.getMessage().length() > 0)) {
s += ("\n" + e);
}

Alert alert = new Alert("Error!", s, null, AlertType.ERROR);
alert.setTimeout(Alert.FOREVER);
Display.getDisplay(this).setCurrent(alert);
// Restore the commands that were removed in commandAction()
Display.getDisplay(this).getCurrent().addCommand(creatOK);
Display.getDisplay(this).getCurrent().addCommand(back);
}
}

private String myDate(long time) {
Calendar cal = Calendar.getInstance();

cal.setTime(new Date(time));

StringBuffer sb = new StringBuffer();

sb.append(cal.get(Calendar.HOUR_OF_DAY));
sb.append(':');
sb.append(cal.get(Calendar.MINUTE));
sb.append(':');
sb.append(cal.get(Calendar.SECOND));
sb.append(',');
sb.append(' ');
sb.append(cal.get(Calendar.DAY_OF_MONTH));
sb.append(' ');
sb.append(monthList[cal.get(Calendar.MONTH)]);
sb.append(' ');
sb.append(cal.get(Calendar.YEAR));

return sb.toString();
}
}


59.gif Ca y est c'est fini 59.gif
KU990_lover
Le code a pas l'air tres compliqué mais il est long et j'aime pas trop le java...j'esssairé de me pencher dessus.
Bon boulot en tout cas.
On avance!!
lolo-ViewTy
non le code a l'air symple et assez detaillé mais je ne connait pas trop la programmation.
bon courage a ce qui se lance.

moi je continue mes recherches.
KantaSona
Bonjour à tous, je suis ce topic depuis un bon moment, étant graphiste/intégrateur Flash et possesseur d'un Viewty. D'après le code que tu as donné lolo-Viewty, il s'agit de la classe du browser : elle gère la création, la suppression et la gestion des dossiers, ainsi que les alertes associées.

Il doit exister un fichier xml qui "peuple" le code et qui définit tous les dossiers du système avec un attribut "hidden", un truc comme ça :

<system>
<folders>
<core hidden="true" />
<themes hidden="true" />
... etc
</folders>
</system>

voilà voilà. C'est intéressant de voir ce code pour la compréhension du fonctionnement du Viewty mais ce n'est pas cette classe qui nous permettra quoique ce soit. De plus, taper dans le code directement demande une recompilation et risque de tout casser. Si on peut trouver le xml principal ce serait le top (une simple sauvegarde du xml original devrait suffire à prévenir les plantages éventuels).

De mon côté j'ai trouvé que le viewty fonctionne avec Flash Lite 2.1 et ça c'est bon ! Je suis en train de bosser sur une appli en flash qui reprend le fonctionnement aujourd'hui classique d'Itunes. Des nouvelles bientôt smile.gif
lolo-ViewTy
Alors voila si ca t'aide

J'ai recuperer le code XML dont tu parle me semble t'il, il m'a l'air complexe(en tout cas il est complet).
mais tu a l'aire de t'y connaitre.



<?xml version="1.0" encoding="UTF-8"?>
<!-- *** GENERATED FROM project.xml - DO NOT EDIT *** -->
<project name="PDAPDemo1-impl" default="jar" basedir="..">
<!--load-properties-->
<target name="pre-load-properties">
<property file="nbproject/private/private.properties"/>
<property name="user.properties.file" location="${netbeans.user}/build.properties"/>
<available property="user.properties.file.exists" file="${user.properties.file}"/>
</target>
<target name="exists.config.active" unless="config.active">
<echo level="warning" message="Active configuration (config.active property) is not set - using default."/>
<property value="" name="config.active"/>
</target>
<target name="exists.netbeans.user" unless="netbeans.user">
<echo level="warning" message="NetBeans IDE user directory (netbeans.user property) is not set. By specifying this property many properties required by the project will be automatically evaluated (e.g.: ant-ext library home, ...). You could also open this project in the NetBeans IDE - in this case this property would be set automatically."/>
</target>
<target name="exists.user.properties.file" unless="user.properties.file.exists">
<echo level="warning" message="User properties file (user.properties.file) property is not set. By specifying this property many properties required by the project will be automatically evaluated (e.g.: libraries, platforms, ...)."/>
</target>
<target name="load-properties" depends="pre-load-properties,exists.config.active,exists.netbeans.user,exists.user.properties.file">
<loadproperties srcfile="nbproject/project.properties">
<filterchain>
<containsregex pattern="^configs\.${config.active}\.(.*)" replace="\1"/>
<concatfilter prepend="nbproject/project.properties"/>
<containsregex pattern="^platform.active=|^deployment.method=|^deployment.instance="/>
</filterchain>
</loadproperties>
<property name="deployment.instance" value="default"/>
<loadproperties srcfile="${user.properties.file}">
<filterchain>
<replaceregex pattern="^platforms\.${platform.active}\." replace="platform."/>
<replaceregex pattern="^deployment\.${deployment.method}\.scriptfile=" replace="deployment.scriptfile="/>
<replaceregex pattern="^deployments\.${deployment.method}\.${deployment.instance}\.([^=]+)=" replace="\1="/>
</filterchain>
</loadproperties>
<loadproperties srcfile="nbproject/project.properties">
<filterchain>
<containsregex pattern="^configs\.${config.active}\.(.*)" replace="\1"/>
<concatfilter prepend="nbproject/project.properties"/>
</filterchain>
</loadproperties>
</target>
<!--basic-init-->
<target name="exists.platform.active" unless="platform.active">
<echo level="warning" message="Active platform (platform.active property) in not set. If you set this and user.properties.file property, many properties required by the project will be automatically evaluated (e.g.: platform home, platform classpath, ...)."/>
</target>
<target name="exists.platform.configuration" unless="platform.configuration">
<echo level="warning" message="Platform configuration (platform.configuration) is not set. Using default (CLDC-1.0) configuration."/>
<property name="platform.configuration" value="CLDC-1.0"/>
</target>
<target name="exists.platform.profile" unless="platform.profile">
<echo level="warning" message="Platform profile (platform.profile) is not set. Using default (MIDP-1.0) profile."/>
<property name="platform.profile" value="MIDP-1.0"/>
</target>
<target name="basic-init" depends="exists.platform.active,exists.platform.configuration,exists.platform.profil
">
<fail unless="libs.j2me_ant_ext.classpath">Classpath to J2ME Ant extension library (libs.j2me_ant_ext.classpath property) is not set. For example: location of mobility/modules/org-netbeans-mobility-antext.jar file in the IDE installation directory.</fail>
<fail unless="platform.home">Platform home (platform.home property) is not set. Value of this property should be ${platform.active.description} emulator home directory location.</fail>
<fail unless="platform.bootclasspath">Platform boot classpath (platform.bootclasspath property) is not set. Value of this property should be ${platform.active.description} emulator boot classpath containing all J2ME classes provided by emulator.</fail>
<fail unless="src.dir">Must set src.dir</fail>
<fail unless="build.dir">Must set build.dir</fail>
<fail unless="dist.dir">Must set dist.dir</fail>
<fail unless="dist.jar">Must set dist.jar</fail>
<property name="javac.source" value="1.3"/>
<property name="javac.target" value="1.1"/>
<property name="javac.encoding" value="${file.encoding}"/>
<property name="deployment.number" value="0.0.1"/>
<property name="deployment.counter" value="000002"/>
<condition property="no.deps">
<istrue value="${no.dependencies}"/>
</condition>
<condition property="no.preprocess">
<isfalse value="${use.preprocessor}"/>
</condition>
<condition property="no.javadoc.preview">
<isfalse value="${javadoc.preview}"/>
</condition>
<condition property="filter.excludes.evaluated" value="${filter.excludes},${filter.more.excludes},**/*Test.java,**/test,**/test/**">
<istrue value="${filter.exclude.tests}"/>
</condition>
<property name="filter.excludes.evaluated" value="${filter.excludes},${filter.more.excludes}"/>
<condition property="deployment.do.override.jarurl" value="">
<istrue value="${deployment.override.jarurl}"/>
</condition>
<condition property="config.active.name" value="DefaultConfiguration">
<length string="${config.active}" trim="true" length="0"/>
</condition>
<property name="config.active.name" value="${config.active}"/>
<taskdef resource="org/netbeans/mobility/antext/defs.properties">
<classpath>
<pathelement path="${libs.j2me_ant_ext.classpath}"/>
</classpath>
</taskdef>
<condition property="skip.deployment">
<equals arg1="${deployment.method}" arg2="NONE" casesensitive="false" trim="true"/>
</condition>
<condition property="app-version.autoincrement.trigger">
<istrue value="${app-version.autoincrement}"/>
</condition>
<nb-overrideproperty name="buildsystem.baton" value="${src.dir}"/>
</target>
<!--cldc-init-->
<target name="cldc-pre-init">
<condition property="cldc-platform.trigger">
<equals arg1="CLDC" arg2="${platform.trigger}" casesensitive="false"/>
</condition>
</target>
<target name="cldc-init" depends="cldc-pre-init" if="cldc-platform.trigger">
<property name="preverify.sources.dir" location="${build.dir}/preverifysrc"/>
<property name="manifest.build.file" location="${build.dir}/manifest.mf"/>
<property name="platform.device" value=""/>
<property name="dist.jad.url" value="file://"/>
<property name="run.cmd.options" value=""/>
<condition property="evaluated.run.security.domain" value="">
<isfalse value="${run.use.security.domain}"/>
</condition>
<property name="evaluated.run.security.domain" value="${run.security.domain}"/>
<condition property="override.jarurl.trigger">
<and>
<istrue value="${cldc-platform.trigger}"/>
<istrue value="${deployment.override.jarurl}"/>
</and>
</condition>
<property name="deployment.jad" location="${dist.dir}/${dist.jad}"/>
<property name="deployment.jar" location="${dist.dir}/${dist.jar}"/>
<property name="deployment.dir" location="${dist.dir}"/>
<patternset id="deployment.patternset">
<include name="${dist.jad}"/>
<include name="${dist.jar}"/>
</patternset>
</target>
<!--cdc-init-->
<target name="cdc-init">
<condition property="cdc-platform.trigger">
<equals arg1="CDC" arg2="${platform.trigger}" casesensitive="false"/>
</condition>
<available file="${manifest.file}" property="manifest.available"/>
<condition property="main.class.applet">
<equals arg1="${main.class.class}" arg2="applet" casesensitive="false"/>
</condition>
<condition property="main.class.xlet">
<equals arg1="${main.class.class}" arg2="xlet" casesensitive="false"/>
</condition>
<condition property="manifest.available+main.class+fat.jar">
<and>
<isset property="manifest.available"/>
<isset property="main.class"/>
<istrue value="${platform.fat.jar}"/>
<not>
<equals arg1="${main.class}" arg2="" trim="true"/>
</not>
</and>
</condition>
<condition property="manifest.available+main.class">
<and>
<isset property="manifest.available"/>
<isset property="main.class"/>
<isfalse value="${platform.fat.jar}"/>
<not>
<equals arg1="${main.class}" arg2="" trim="true"/>
</not>
</and>
</condition>
<condition property="application.version.invalid" value="true">
<equals arg1="${deployment.number}" arg2="" trim="true"/>
</condition>
<fail if="application.version.invalid" message="Property deployment.number must not be empty and must contain version in format %d.%d.%d!"/>
</target>
<!--ricoh-init-->
<target name="ricoh-pre-init" if="cdc-platform.trigger">
<condition property="ricoh-platform.trigger">
<equals arg1="ricoh" arg2="${platform.type}" casesensitive="false"/>
</condition>
</target>
<target name="ricoh-init" depends="ricoh-pre-init" if="ricoh-platform.trigger">
<available property="jcifs" classname="jcifs.smb.SmbFile" classpath="${libs.RicohAntTools.classpath}"/>
<condition property="no.vendor.name" value="true">
<equals arg1="${application.vendor}" arg2="" trim="true"/>
</condition>
<condition property="ricoh.dalp.install.mode" value="auto" else="manual">
<istrue value="${ricoh.dalp.install.mode.auto}"/>
</condition>
<condition property="ricoh.dalp.display-mode.type" value="COLOR" else="MONO">
<istrue value="${ricoh.dalp.display-mode.color}"/>
</condition>
<property name="xml.dir" value="${build.dir}/dalp"/>
<property name="xlet.dalp" value="${application.name}.dalp"/>
<property name="xlet.dalp.name-only" value="${application.name}.dalp"/>
<property name="deploy.dir" value="${dist.dir}/deploy"/>
<property name="rideploy.zip" value="${dist.dir}/${application.name}.zip"/>
<property name="ricoh.dalp.is-managed" value="true"/>
<property name="ricoh.dalp.information.is-icon-used" value="true"/>
<property name="ricoh.platform.target.version" value="2.0"/>
<property name="ricoh.dalp.version" value="${deployment.number}"/>
<property name="ricoh.dalp.application-desc.visible" value="true"/>
<property name="ricoh.dalp.install.destination" value="hdd"/>
<property name="ricoh.dalp.install.work-dir" value="hdd"/>
<property name="ricoh.dalp.information.abbreviation" value="RICOH"/>
<taskdef name="taskIf" classname="ricoh.ant.ConditionalTask" classpath="${libs.ricoh-ant-utils.classpath}"/>
<taskdef name="dalp" classname="org.netbeans.modules.j2me.cdc.project.ricoh.DalpBuilder" classpath="${libs.ricoh-ant-utils.classpath}"/>
<property name="dalp.dist" value="${build.dir}/dalp/${application.name}.dalp"/>
<property name="deployment.dir" location="${dist.dir}"/>
<patternset id="deployment.patternset">
<include name="${dist.jar}"/>
<include name="${application.name}.dalp"/>
<include name="lib/*"/>
</patternset>
</target>
<!--semc-init-->
<target name="semc-pre-init" if="cdc-platform.trigger">
<condition property="semc-platform.trigger">
<equals arg1="semc" arg2="${platform.type}" casesensitive="false"/>
</condition>
</target>
<target name="semc-init" depends="semc-pre-init" if="semc-platform.trigger">
<condition property="semc.icon.invalid" value="true">
<or>
<contains string="${semc.application.icon}" substring="$${"/>
<equals arg1="${semc.application.icon}" arg2="" trim="true"/>
</or>
</condition>
<condition property="no.certificateorkey" value="true">
<or>
<isset property="no.application.uid"/>
<equals arg1="${semc.certificate.path}" arg2="" trim="true"/>
<contains string="${semc.certificate.path}" substring="$${semc.certificate.path"/>
<equals arg1="${semc.private.key.path}" arg2="" trim="true"/>
<contains string="${semc.private.key.path}" substring="$${semc.private.key.path"/>
</or>
</condition>
<property name="j9.dist" location="${build.dir}/j9/${semc.application.uid}.j9"/>
<taskdef resource="org/netbeans/modules/j2me/cdc/project/defs.properties">
<classpath>
<pathelement path="${libs.cdc-ant-utils.classpath}"/>
</classpath>
</taskdef>
<taskdef resource="org/netbeans/modules/j2me/cdc/project/semc/defs.properties">
<classpath>
<pathelement path="${libs.semc-ant-utils.classpath}"/>
</classpath>
</taskdef>
<property name="deployment.dir" location="${dist.dir}"/>
<patternset id="deployment.patternset">
<include name="*.sis"/>
<include name="*.SIS"/>
</patternset>
</target>
<!--savaje-init-->
<target name="savaje-pre-init" if="cdc-platform.trigger">
<condition property="savaje-platform.trigger">
<equals arg1="savaje" arg2="${platform.type}" casesensitive="false"/>
</condition>
</target>
<target name="savaje-init" depends="savaje-pre-init" if="savaje-platform.trigger">
<property name="savaje.application.uid" value="TBD"/>
<condition property="savaje.bundle.base.invalid" value="true">
<or>
<equals arg1="${savaje.bundle.base}" arg2="" trim="true"/>
<contains string="${savaje.bundle.base}" substring="$${savaje.bundle.base"/>
</or>
</condition>
<condition property="savaje.unsupported.main" value="true">
<or>
<equals arg1="${main.class.applet}" arg2="true"/>
</or>
</condition>
<condition property="savaje.icon.invalid" value="true">
<or>
<isset property="no.application.uid"/>
<contains string="${savaje.application.icon}" substring="$${"/>
<equals arg1="${savaje.application.icon}" arg2="" trim="true"/>
</or>
</condition>
<property name="jnlp.dist" value="${build.dir}/jnlp/bundle.jnlp"/>
<property name="deployment.dir" location="${dist.dir}"/>
<patternset id="deployment.patternset">
<include name="bundle.jnlp"/>
<include name="bundle.policy"/>
<include name="lib/*"/>
</patternset>
</target>
<!--nokiaS80-init-->
<target name="nokiaS80-pre-init" if="cdc-platform.trigger">
<condition property="nokiaS80-platform.trigger">
<equals arg1="nokiaS80" arg2="${platform.type}" casesensitive="false"/>
</condition>
</target>
<target name="nokiaS80-init" depends="nokiaS80-pre-init" if="nokiaS80-platform.trigger">
<property name="j9.dist" location="${build.dir}/j9/NOKIA.j9"/>
<property name="manifest.build.file" location="${build.dir}/manifest.mf"/>
<condition property="nokia.icon.invalid">
<or>
<contains string="${nokiaS80.application.icon}" substring="$${"/>
<equals arg1="${nokiaS80.application.icon}" arg2="" trim="true"/>
</or>
</condition>
<property name="deployment.dir" location="${dist.dir}"/>
<patternset id="deployment.patternset">
<include name="${dist.jar}"/>
</patternset>
</target>
<!--nsicom-init-->
<target name="nsicom-pre-init" if="cdc-platform.trigger">
<condition property="nsicom-platform.trigger">
<equals arg1="nsicom" arg2="${platform.type}" casesensitive="false"/>
</condition>
</target>
<target name="nsicom-init" depends="nsicom-pre-init" if="nsicom-platform.trigger">
<property name="deployment.dir" location="${dist.dir}"/>
<patternset id="deployment.patternset">
<include name="${dist.jar}"/>
</patternset>
</target>
<!--init-->
<target name="pre-init"/>
<target name="post-init"/>
<target name="init" depends="pre-init,load-properties,basic-init,cldc-init,cdc-init,ricoh-init,semc-init,savaje-init,nokiaS80-init,nsicom-init,post-init"/>
<!--conditional clean-->
<target name="conditional-clean-init">
<uptodate property="no.clean.before.build" targetfile="${build.dir}/.timestamp">
<srcfiles dir="nbproject">
<include name="project.properties"/>
<include name="build-impl.xml"/>
</srcfiles>
</uptodate>
</target>
<target name="conditional-clean" depends="init,conditional-clean-init" unless="no.clean.before.build" description="Clean project in case its meta information has changed.">
<antcall target="do-clean" inheritall="true" inheritrefs="true"/>
</target>
<!--deps-jar-->
<target name="deps-jar" depends="conditional-clean" unless="no.deps"/>
<!--preprocess-->
<target name="pre-preprocess"/>
<target name="do-preprocess" unless="no.preprocess">
<fail unless="preprocessed.dir">Must set preprocessed.dir</fail>
<property name="abilities" value=""/>
<property name="debug.level" value="debug"/>
<mkdir dir="${preprocessed.dir}"/>
<echo message="ignore me" file="${build.dir}/.timestamp"/>
<nb-prep destdir="${preprocessed.dir}" preprocessfor="${config.active.name},${abilities},DebugLevel=${debug.level}" encoding="${javac.encoding}">
<fileset dir="${buildsystem.baton}" defaultexcludes="${filter.use.standard}" excludes="${filter.excludes.evaluated}"/>
</nb-prep>
<copy todir="${preprocessed.dir}">
<fileset dir="${buildsystem.baton}" defaultexcludes="${filter.use.standard}" excludes="${filter.excludes.evaluated},${build.classes.excludes}"/>
</copy>
<nb-overrideproperty name="buildsystem.baton" value="${preprocessed.dir}"/>
</target>
<target name="post-preprocess"/>
<target name="preprocess" depends="deps-jar,pre-preprocess,do-preprocess,post-preprocess" description="Preprocess project sources."/>
<!--compile-->
<target name="pre-compile"/>
<target name="do-compile">
<fail unless="build.classes.dir">Must set build.classes.dir</fail>
<mkdir dir="${build.classes.dir}"/>
<javac includeantruntime="false" source="${javac.source}" target="${javac.target}" deprecation="${javac.deprecation}" optimize="${javac.optimize}" debug="${javac.debug}" destdir="${build.classes.dir}" srcdir="${buildsystem.baton}" bootclasspath="${platform.bootclasspath}" encoding="${javac.encoding}">
<classpath>
<path path="${libs.classpath}"/>
</classpath>
</javac>
<copy todir="${build.classes.dir}">
<fileset dir="${buildsystem.baton}" defaultexcludes="${filter.use.standard}" excludes="${filter.excludes.evaluated},${build.classes.excludes}"/>
</copy>
<nb-overrideproperty name="buildsystem.baton" value="${build.classes.dir}"/>
</target>
<target name="extract-libs" description="Extracts all bundled libraries.">
<mkdir dir="${build.classes.dir}"/>
<nb-extract dir="${build.classes.dir}" excludeManifest="true" classpath="${libs.classpath}" excludeclasspath="${extra.classpath}"/>
</target>
<target name="post-compile"/>
<target name="compile" depends="preprocess,pre-compile,extract-libs,do-compile,post-compile" description="Compile project classes."/>
<!--compile-single-->
<target name="pre-compile-single"/>
<target name="do-compile-single">
<fail unless="javac.includes">Must select some files in the IDE or set javac.includes</fail>
<mkdir dir="${build.classes.dir}"/>
<javac includeantruntime="false" source="${javac.source}" target="${javac.target}" deprecation="${javac.deprecation}" optimize="${javac.optimize}" debug="${javac.debug}" srcdir="${buildsystem.baton}" destdir="${build.classes.dir}" bootclasspath="${platform.bootclasspath}" includes="${javac.includes}" encoding="${javac.encoding}">
<classpath>
<path path="${libs.classpath}"/>
</classpath>
</javac>
</target>
<target name="post-compile-single"/>
<target name="compile-single" depends="preprocess,pre-compile-single,do-compile-single,post-compile-single" description="Compile selected project classes."/>
<!--proguard-->
<target name="proguard-init" description="Up-to-date check before obfuscation.">
<property name="obfuscation.level" value="0"/>
<condition property="no.obfusc">
<or>
<equals arg1="${obfuscation.level}" arg2="0"/>
<uptodate targetfile="${obfuscator.destjar}">
<srcfiles dir="${buildsystem.baton}"/>
</uptodate>
</or>
</condition>
<uptodate property="obfuscation.up-to-date" targetfile="${obfuscator.destjar}">
<srcfiles dir="${buildsystem.baton}"/>
</uptodate>
</target>
<target name="skip-obfuscation" depends="proguard-init" if="obfuscation.up-to-date">
<fail unless="obfuscated.classes.dir">Must set obfuscated.classes.dir</fail>
<nb-overrideproperty name="buildsystem.baton" value="${obfuscated.classes.dir}"/>
</target>
<target name="proguard" depends="skip-obfuscation" description="Obfuscate project classes." unless="no.obfusc">
<fail unless="obfuscated.classes.dir">Must set obfuscated.classes.dir</fail>
<fail unless="obfuscator.srcjar">Must set obfuscator.srcjar</fail>
<fail unless="obfuscator.destjar">Must set obfuscator.destjar</fail>
<property name="obfuscator.classpath" value=""/>
<dirname file="${obfuscator.srcjar}" property="obfuscator.srcjar.dir"/>
<dirname file="${obfuscator.destjar}" property="obfuscator.destjar.dir"/>
<mkdir dir="${obfuscator.srcjar.dir}"/>
<mkdir dir="${obfuscator.destjar.dir}"/>
<jar jarfile="${obfuscator.srcjar}" basedir="${buildsystem.baton}"/>
<property name="obfuscation.custom" value=""/>
<nb-obfuscate srcjar="${obfuscator.srcjar}" destjar="${obfuscator.destjar}" obfuscatorclasspath="${obfuscator.classpath}" classpath="${platform.bootclasspath}:${extra.classpath}" obfuscationLevel="${obfuscation.level}" extraScript="${obfuscation.custom}"/>
<mkdir dir="${obfuscated.classes.dir}"/>
<unjar src="${obfuscator.destjar}" dest="${obfuscated.classes.dir}"/>
<nb-overrideproperty name="buildsystem.baton" value="${obfuscated.classes.dir}"/>
</target>
<!--obfuscate-->
<target name="pre-obfuscate"/>
<target name="post-obfuscate"/>
<target name="obfuscate" depends="compile,pre-obfuscate,proguard,post-obfuscate" description="Obfuscate project classes."/>
<!--preverify-->
<target name="pre-preverify"/>
<target name="do-preverify" if="cldc-platform.trigger">
<fail unless="preverify.classes.dir">Must set preverify.classes.dir</fail>
<mkdir dir="${preverify.sources.dir}"/>
<copy todir="${preverify.sources.dir}">
<fileset dir="${buildsystem.baton}" includes="**/*.class"/>
</copy>
<mkdir dir="${preverify.classes.dir}"/>
<nb-preverify srcdir="${preverify.sources.dir}" destdir="${preverify.classes.dir}" classpath="${platform.bootclasspath}:${extra.classpath}" configuration="${platform.configuration}" platformhome="${platform.home}" platformtype="${platform.type}" commandline="${platform.preverifycommandline}"/>
<copy todir="${preverify.classes.dir}">
<fileset dir="${buildsystem.baton}" defaultexcludes="${filter.use.standard}" excludes="${filter.excludes.evaluated},${build.classes.excludes}"/>
</copy>
<nb-overrideproperty name="buildsystem.baton" value="${preverify.classes.dir}"/>
</target>
<target name="post-preverify"/>
<target name="preverify" depends="obfuscate,pre-preverify,do-preverify,post-preverify" description="Preverify project classes."/>
<!--set-password-->
<target name="set-password-init">
<property name="sign.enabled" value="false"/>
<condition property="skip-sign-keystore-password-input">
<or>
<isfalse value="${sign.enabled}"/>
<and>
<isset property="sign.keystore"/>
<isset property="sign.keystore.password"/>
<not>
<equals arg1="${sign.keystore}" arg2="" trim="true"/>
</not>
<not>
<equals arg1="${sign.keystore.password}" arg2="" trim="true"/>
</not>
</and>
</or>
</condition>
<condition property="skip-sign-alias-password-input">
<or>
<isfalse value="${sign.enabled}"/>
<and>
<isset property="sign.keystore"/>
<isset property="sign.alias"/>
<isset property="sign.alias.password"/>
<not>
<equals arg1="${sign.keystore}" arg2="" trim="true"/>
</not>
<not>
<equals arg1="${sign.alias}" arg2="" trim="true"/>
</not>
<not>
<equals arg1="${sign.alias.password}" arg2="" trim="true"/>
</not>
</and>
</or>
</condition>
</target>
<target name="set-keystore-password" if="netbeans.home" unless="skip-sign-keystore-password-input">
<nb-enter-password keystore="${sign.keystore}" passwordproperty="sign.keystore.password"/>
</target>
<target name="set-alias-password" if="netbeans.home" unless="skip-sign-alias-password-input">
<nb-enter-password keystore="${sign.keystore}" keyalias="${sign.alias}" passwordproperty="sign.alias.password"/>
</target>
<target name="set-password" depends="set-password-init,set-keystore-password,set-alias-password"/>
<!--create JAD-->
<target name="add-configuration" unless="contains.manifest.configuration">
<nb-output file="${dist.dir}/${dist.jad}" encoding="UTF-8" append="true">MicroEdition-Configuration: ${platform.configuration}
</nb-output>
<nb-output file="${manifest.build.file}" encoding="UTF-8" append="true">MicroEdition-Configuration: ${platform.configuration}
</nb-output>
</target>
<target name="add-profile" unless="contains.manifest.profile">
<nb-output file="${dist.dir}/${dist.jad}" encoding="UTF-8" append="true">MicroEdition-Profile: ${platform.profile}
</nb-output>
<nb-output file="${manifest.build.file}" encoding="UTF-8" append="true">MicroEdition-Profile: ${platform.profile}
</nb-output>
</target>
<target name="create-jad" if="cldc-platform.trigger">
<fail unless="dist.jad">Must set dist.jad</fail>
<mkdir dir="${build.dir}"/>
<dirname file="${dist.dir}/${dist.jad}" property="dist.jad.dir"/>
<mkdir dir="${dist.jad.dir}"/>
<condition property="evaluated.manifest.apipermissions" value="${manifest.apipermissions}">
<not>
<equals arg1="${platform.profile}" arg2="MIDP-1.0"/>
</not>
</condition>
<condition property="evaluated.manifest.pushregistry" value="${manifest.pushregistry}">
<not>
<equals arg1="${platform.profile}" arg2="MIDP-1.0"/>
</not>
</condition>
<condition property="contains.manifest.configuration">
<contains substring="MicroEdition-Configuration: " string="${manifest.others}"/>
</condition>
<condition property="contains.manifest.profile">
<contains substring="MicroEdition-Profile: " string="${manifest.others}"/>
</condition>
<property value="" name="evaluated.manifest.apipermissions"/>
<property value="" name="evaluated.manifest.pushregistry"/>
<property name="manifest.jad" value=""/>
<property name="manifest.manifest" value=""/>
<nb-output file="${dist.dir}/${dist.jad}" encoding="UTF-8">${manifest.midlets}${evaluated.manifest.apipermissions}${evaluated.manifest.pushregistry}${manifest.others}${manifest.jad}</nb-output>
<nb-output file="${manifest.build.file}" encoding="UTF-8">${manifest.midlets}${evaluated.manifest.apipermissions}${evaluated.manifest.pushregistry}${manifest.others}${manifest.manifest}</nb-output>
<antcall target="add-configuration" inheritall="true" inheritrefs="true"/>
<antcall target="add-profile" inheritall="true" inheritrefs="true"/>
<property name="manifest.available" value="true"/>
</target>
<!--do-extra-libs-->
<target name="do-extra-libs" if="extra.classpath">
<property name="dist.lib.dir" value="${dist.dir}/lib"/>
<mkdir dir="${dist.lib.dir}"/>
<copypath destdir="${dist.lib.dir}" path="${extra.classpath}">
<flattenmapper/>
</copypath>
</target>
<!--nokiaS80-manifest-->
<target name="nokiaS80-prepare-j9" if="nokiaS80-platform.trigger">
<fail message="Main class is not set!">
<condition>
<equals arg1="${main.class}" arg2="" trim="true"/>
</condition>
</fail>
<mkdir dir="${build.dir}/j9"/>
<taskdef name="j9builder" classname="org.netbeans.modules.j2me.cdc.project.J9Builder" classpath="${libs.cdc-ant-utils.classpath}"/>
<j9builder jvmargs="${run.jvmargs}" mainclass="${main.class}" args="${application.args}" home="${platform.home}" dist="${j9.dist}" id="NOKIA" platform="${platform.type}" xlet="${main.class.xlet}" applet="${main.class.applet}" jarname="${dist.jar}"/>
<copy file="${manifest.file}" tofile="${manifest.build.file}" failonerror="false"/>
<property name="manifest.available" value="true"/>
<loadfile property="nokia.manifest.j9" srcFile="${j9.dist}"/>
</target>
<target name="nokiaS80-prepare-manifest" depends="nokiaS80-prepare-j9" if="nokiaS80-platform.trigger" unless="nokia.icon.invalid">
<pathconvert property="logo.icon.name" pathsep=" ">
<path path="${nokiaS80.application.icon}"/>
<chainedmapper>
<flattenmapper/>
<globmapper from="*" to="*"/>
</chainedmapper>
</pathconvert>
<copy file="${nokiaS80.application.icon}" todir="${buildsystem.baton}"/>
<manifest file="${manifest.build.file}" mode="update">
<attribute name="Main-Class" value="${main.class}"/>
<attribute name="PproApp-Name" value="${application.name}"/>
<attribute name="PproApp-Vendor" value="${application.vendor}"/>
<attribute name="PproApp-Version" value="${deployment.number}"/>
<attribute name="PproApp-Icon" value="${logo.icon.name}"/>
<attribute name="x-ibm-pp-j9" value="${nokia.manifest.j9}"/>
</manifest>
</target>
<target name="nokiaS80-prepare-manifest-no-icon" depends="nokiaS80-prepare-j9" if="nokia.icon.invalid">
<manifest file="${manifest.build.file}" mode="update">
<attribute name="Main-Class" value="${main.class}"/>
<attribute name="PproApp-Name" value="${application.name}"/>
<attribute name="PproApp-Vendor" value="${application.vendor}"/>
<attribute name="PproApp-Version" value="${deployment.number}"/>
<attribute name="x-ibm-pp-j9" value="${nokia.manifest.j9}"/>
</manifest>
</target>
<target name="nokiaS80-create-manifest" depends="nokiaS80-prepare-j9,nokiaS80-prepare-manifest,nokiaS80-prepare-manifest-no-icon" if="nokiaS80-platform.trigger"/>
<!--semc-build-j9-->
<target name="semc-build-j9" if="semc-platform.trigger">
<epocpathsetter home="${platform.home}"/>
<property name="semc.application.caps" value=""/>
<mkdir dir="${platform.home}/epoc32/winscw/c/private/${semc.application.uid}"/>
<mkdir dir="${build.dir}/j9"/>
<fail message="Main class is not set!">
<condition>
<equals arg1="${main.class}" arg2="" trim="true"/>
</condition>
</fail>
<j9builder jvmargs="${run.jvmargs}" mainclass="${main.class}" args="${application.args}" home="${platform.home}" dist="${j9.dist}" id="${semc.application.uid}" platform="${platform.type}" xlet="${main.class.xlet}" applet="${main.class.applet}" jarname="${dist.jar}"/>
</target>
<!--do-jar-->
<target name="do-jar" if="manifest.available">
<dirname file="${dist.dir}/${dist.jar}" property="dist.jar.dir"/>
<mkdir dir="${dist.jar.dir}"/>
<property name="manifest.build.file" location="${manifest.file}"/>
<jar compress="${jar.compress}" jarfile="${dist.dir}/${dist.jar}" manifest="${manifest.build.file}" manifestencoding="UTF-8">
<fileset dir="${buildsystem.baton}"/>
</jar>
</target>
<!--nsicom-create-manifest-->
<target name="nsicom-create-manifest" if="nsicom-platform.trigger">
<jar jarfile="${dist.dir}/${dist.jar}" compress="${jar.compress}" update="true">
<manifest>
<attribute name="Main-Class" value="${main.class}"/>
</manifest>
</jar>
</target>
<!--do-jar-no-manifest-->
<target name="do-jar-no-manifest" unless="manifest.available">
<dirname file="${dist.dir}/${dist.jar}" property="dist.jar.dir"/>
<mkdir dir="${dist.jar.dir}"/>
<jar compress="${jar.compress}" jarfile="${dist.dir}/${dist.jar}">
<fileset dir="${buildsystem.baton}"/>
</jar>
</target>
<!--update-jad-->
<target name="update-jad" if="cldc-platform.trigger">
<nb-jad jadfile="${dist.dir}/${dist.jad}" jarfile="${dist.dir}/${dist.jar}" url="${dist.jar}" sign="${sign.enabled}" keystore="${sign.keystore}" keystorepassword="${sign.keystore.password}" alias="${sign.alias}" aliaspassword="${sign.alias.password}" encoding="UTF-8"/>
</target>
<!--ricoh-init-dalp-->
<target name="ricoh-init-dalp" if="ricoh-platform.trigger">
<property name="ricoh.application.telephone" value=""/>
<property name="ricoh.application.fax" value=""/>
<property name="ricoh.application.email" value=""/>
<condition property="no.unmanaged.dalp">
<and>
<isfalse value="${ricoh.dalp.is-managed}"/>
<not>
<available file="./${application.name}.dalp"/>
</not>
</and>
</condition>
<fail if="no.unmanaged.dalp" message="Dalp file ${application.name}.dalp is required in project directory when DALP management is set to off."/>
<condition property="no.vendor.name" value="true">
<equals arg1="${application.vendor}" arg2="" trim="true"/>
</condition>
<condition property="ricoh.icon.invalid" value="true">
<or>
<contains string="${ricoh.application.icon}" substring="$${"/>
<equals arg1="${ricoh.application.icon}" arg2="" trim="true"/>
</or>
</condition>
<mkdir dir="${dist.dir}/lib"/>
</target>
<!--ricoh-add-app-icon-->
<target name="ricoh-add-app-icon" depends="ricoh-init-dalp" if="ricoh-platform.trigger" unless="ricoh.icon.invalid">
<pathconvert property="icon.name" pathsep=" ">
<path path="${ricoh.application.icon}"/>
<chainedmapper>
<flattenmapper/>
<globmapper from="*" to="*"/>
</chainedmapper>
</pathconvert>
<jar jarfile="${dist.jar}" compress="${jar.compress}" update="true">
<fileset file="${ricoh.application.icon}"/>
</jar>
</target>
<!--ricoh-build-dalp-with-icon-->
<target name="ricoh-build-dalp-with-icon" depends="ricoh-add-app-icon" if="ricoh-platform.trigger" unless="ricoh.icon.invalid">
<mkdir dir="${build.dir}/dalp/"/>
<taskIf if="ricoh.dalp.is-managed" value="true">
<dalp file="${dalp.dist}" iconname="${icon.name}">
<fileset dir="${dist.dir}/lib"/>
</dalp>
<echo message="Managed dalp file ${dalp.dist} created w/ icon"/>
</taskIf>
<taskIf if="ricoh.dalp.is-managed" value="false">
<copy tofile="${dalp.dist}">
<fileset file="./${application.name}.dalp"/>
</copy>
<echo message="Non-managed dalp file ${dalp.dist} w/ icon imported"/>
</taskIf>
</target>
<!--ricoh-build-dalp-without-icon-->
<target name="ricoh-build-dalp-without-icon" if="ricoh.icon.invalid">
<mkdir dir="${build.dir}/dalp/"/>
<taskIf if="ricoh.dalp.is-managed" value="true">
<dalp file="${dalp.dist}">
<fileset dir="${dist.dir}/lib"/>
</dalp>
<echo message="Managed dalp file ${dalp.dist} created w/o icon"/>
</taskIf>
<taskIf if="ricoh.dalp.is-managed" value="false">
<copy tofile="${dalp.dist}">
<fileset file="./${application.name}.dalp"/>
</copy>
<echo message="Non-managed dalp file ${dalp.dist} w/o icon imported"/>
</taskIf>
</target>
<target name="ricoh-build-dalp" depends="ricoh-build-dalp-with-icon,ricoh-build-dalp-without-icon" if="ricoh-platform.trigger">
<copy todir="${dist.dir}" file="${dalp.dist}" overwrite="true"/>
</target>
<!--savaje-build-jnlp-->
<target name="savaje-prepare-icon" if="savaje-platform.trigger" unless="savaje.icon.invalid">
<pathconvert property="savaje.application.icon.name" pathsep=" ">
<path path="${savaje.application.icon}"/>
<chainedmapper>
<flattenmapper/>
<globmapper from="*" to="*"/>
</chainedmapper>
</pathconvert>
<mkdir dir="${dist.dir}/lib"/>
<copy tofile="${dist.dir}/lib/${savaje.application.icon.name}" file="${savaje.application.icon}" overwrite="true" failonerror="false"/>
</target>
<target name="savaje-build-jnlp" depends="savaje-prepare-icon" if="savaje-platform.trigger">
<mkdir dir="${build.dir}/jnlp/"/>
<taskdef resource="org/netbeans/modules/j2me/cdc/project/savaje/defs.properties">
<classpath>
<pathelement path="${libs.savaje-ant-utils.classpath}"/>
</classpath>
</taskdef>
<jnlp dir="${build.dir}/jnlp/" file="bundle.jnlp" codebase="WTK_AGUI" distjar="lib/${dist.jar.name}" applicationicon="lib/${savaje.application.icon.name}" smallicon="${savaje.application.icon.small}" focusedicon="${savaje.application.icon.focused}" applicationtitle="${application.name}" applicationvendor="${application.vendor}" applicationDescription="${application.description}" applicationArgs="${application.args}" mainClass="${main.class}" debug="${savaje.bundle.debug}" debugport="${savaje.bundle.debug.port}">
<fileset dir="${dist.dir}/lib"/>
</jnlp>
<policy file="${build.dir}/jnlp/bundle.policy" codebase="WTK_AGUI"/>
<copy tofile="${dist.dir}/lib/classes.jar" file="${dist.dir}/${dist.jar}" overwrite="true"/>
<copy todir="${dist.dir}" file="${build.dir}/jnlp/bundle.jnlp" overwrite="true"/>
<copy tofile="${dist.dir}/bundle.policy" file="${build.dir}/jnlp/bundle.policy" overwrite="true"/>
<copy todir="${dist.dir}/lib" overwrite="true" failonerror="false">
<fileset dir="${resources.dir}"/>
</copy>
</target>
<!--jar-->
<target name="pre-jar"/>
<target name="post-jar"/>
<target name="jar" depends="preverify,pre-jar,set-password,create-jad,do-extra-libs,nokiaS80-create-manifest,semc-build-j9,do-jar,nsicom-create-manifest,do-jar-no-manifest,update-jad,ricoh-build-dalp,savaje-build-jnlp,post-jar" description="Build jar and application descriptor."/>
<!--override-jad-->
<target name="override-jad" if="override.jarurl.trigger">
<property name="deployment.jarurl" value="${dist.jar}"/>
<nb-jad jadfile="${dist.dir}/${dist.jad}" jarfile="${dist.dir}/${dist.jar}" url="${deployment.jarurl}" sign="${sign.enabled}" keystore="${sign.keystore}" keystorepassword="${sign.keystore.password}" alias="${sign.alias}" aliaspassword="${sign.alias.password}" encoding="UTF-8"/>
</target>
<!--semc-make-sis-->
<target name="semc-ppro-arm" if="semc-platform.trigger" description="Builds neccessary files for semc device">
<exec executable="${platform.home}/epoc32/tools/create-ppro-app.bat" dir="${platform.home}/epoc32/tools/">
<arg value="arm"/>
<arg value="${application.name}"/>
<arg value="${semc.application.uid}"/>
<arg value="${j9.dist}"/>
<arg value="${semc.application.caps}"/>
<env key="SDKDRIVE" value="${sdkdrive}"/>
<env key="EPOCROOT" value="${epocroot}"/>
<env key="Path" value="${epocpath}"/>
</exec>
</target>
<target name="semc-make-sis-icon" if="semc-platform.trigger" unless="semc.icon.invalid">
<copy file="${semc.application.icon}" tofile="${platform.home}/epoc32/tools/ppro-custom-launcher/output/arm/PProLauncher${semc.application.uid}/${semc.application.uid}.mbm" failonerror="false"/>
</target>
<target name="semc-make-sis" depends="semc-ppro-arm,semc-make-sis-icon" if="semc-platform.trigger" unless="no.application.uid" description="Builds SIS file for device">
<property name="dll.dir" location="dll"/>
<mkdir dir="${dll.dir}"/>
<copy todir="${platform.home}/epoc32/tools/ppro-custom-launcher/output/arm/PProLauncher${semc.application.uid}">
<fileset dir="${dist.dir}">
<exclude name="javadoc/**"/>
</fileset>
</copy>
<copy todir="${platform.home}/epoc32/tools/ppro-custom-launcher/output/arm/PProLauncher${semc.application.uid}">
<fileset dir="${dll.dir}">
<include name="**/*.dll"/>
</fileset>
</copy>
<pkgmake workdir="${platform.home}/epoc32/tools/ppro-custom-launcher/output/arm/PProLauncher${semc.application.uid}" id="${semc.application.uid}" appname="${application.name}" appicon="${semc.application.uid}.mbm" vendor="${application.vendor}" version="${deployment.number}" logo="${logo.image}" logoinstallonly="${logo.image.installonly}">
<fileset dir="${dist.dir}">
<exclude name="javadoc/**"/>
</fileset>
<fileset dir="${dll.dir}">
<include name="**/*.dll"/>
</fileset>
</pkgmake>
<exec executable="${platform.home}/epoc32/tools/makesis" dir="${platform.home}/epoc32/tools/ppro-custom-launcher/output/arm/PProLauncher${semc.application.
-=SyRuS=-
salut @ tous,

je suit ce topic depuis quelques jours, je vois que vous avancer bien et j'espere que vous arriverez a quelque chose avec toute vos recherches, les solutions semblent maigres mais ils parait y en avoir quand meme, je vous soutient dans votre quete mais j'espere quand meme que LG sortira un programme de personnalisation officiel pour evité de mettre nos appareil hors garantie en voulant rajouter un simple theme...mais je ne me fait pas trop d'illusion...

Bon courage @ tous spoton.gif
romantic
Bonjour ,
je suis avec passion ce forum et jespere que ça marchera un jour pour customiser ce magnifique phone.Je suis nouveau et jai trouvé un lien interessant je pense et jespere que qq pourra en tirer quelque chose
il s(agit de QPST 2.7 build 215 and EFS File Explorer

le lien est http://game-thing.com/bb/lg-u880-lg-u890-l...e-explorer.html


pe que ça marche avec le KU990 je nai pas essayé je ne suis pas assez bon pour ça .. A bientôt
billr
eheh
slt a vous
Je vois aussi que sa avance à petit pas de geant ^^ biggrin.gif
KantaSona
On avance ! On avance !!! Dans l'xml que tu as fournis Lolo, j'ai déjà trouvé qu'au moins une partie de la conception du viewty de LG a été faite avec... le SDK NokiaS80 !!!

kevsr25
En gros le Firmwire du Nokia S80...ressemble a celui du Viewty... ?

et bien sur y'a possiblité de modifier le Nokia S80 ? lol
lolo-ViewTy
Pas trop d'enthousiasme,
Le XML que j'ai fourni ne fait pas parti du Viewty (que ce soit clair).

Il fait parti du logiciel dont j'ai précédemment fournie le code source, mais qui fonctionne sur le Viewty.
canvin
bonjour,
je m'intéresse a ce thread depuis un petit bout de temps. Je suis en master informatique et espère pouvoir apporter mes lumières sur ce code source java et les accès autorisés.
Tout d'abord l'implémentation faite de la jvm (la machine virtuel java) fait que le root (répertoire racine) du téléphone est positionné sur un répertoire autre.
Le xml, est en fait un fichier auto généré lors de la compilation (comme dans un ide tel netbeans) sa modification ne sert à rien donc. Je vais essayer de voir les librairies dont vous avez parlé (jsr 35 notamment), et modiifié le code source du programme fournit pour forcer le system à renvoyer la structure des fichiers. Cependant après un coup d'œil rapide on voit que la varible root est déjà placé sur "/"... Enfin le programme de romantic (efs explorer) à l'air très ntéressant.
voila en attendant je reçoit mon viewty demain... pour faire les tests... smile.gif
lolo-ViewTy
c'est vrai que le prog qpst a l'aire d'etre celui qu'il nous faut mais comme j'ai pas mon cable usb pour 1 semaine je le teste en bluetooth et la sa marche pas. alors a vous de tester ca a pas l'aire bien compliquer.
KU990_lover
C'est cool ,on a plein de piste d'étude. Au fait, elle en est la pétition pour que LG ecoute nos souhaits ? Ca peut peut-etre marcher...de toute facon ca mange pas de pain ^^.
Ikkuzo!!!!
lolo-ViewTy
alors toujours personne qui a tester QPST avec un câble USB ?

c'est la piste pour laquelle je croit le plus pour le moment.
0mega
Je le telecharge actuellement et je teste ça smile.gif
0mega
Aparament le phone n'est pas detecter.... :'(

EDIT: AH nop c'est bon j'ai reussi a le faire reconnaitre biggrin.gif je vous tiens au jus pour l'explorer wink.gif

REEDIT: Mauvaise nouvelle, j'arrive à acceder au fichiers du phone mais je ne vois pas les .swf et je n'arrive pas a recuperé les fichier, une erreur du genre "cannot download this file from the phone" apparait... :'(

je continu de chercher...

http://uploadforyou.free.fr/images/wqb5bj6s.png

http://uploadforyou.free.fr/images/fynsezsz.png
canvin
bon bah c'est en bonne voie.. Après faut voir les gens qui développent le logiciel si on a des problèmes de lecture / écriture.
Sinon je vois un répertoire swf dans ta seconde image...
j'ai hâte de tester tout ça..

0mega
Yeah c'est okay pour les swf wink.gif

http://uploadforyou.free.fr/images/bmegotqo.png

par contre toujours pas reussi a dl des fichiers :/

EDIT: voici un screen de l'erreur en question :

http://uploadforyou.free.fr/images/gf7jkxmx.png

je suppose que "theme_bg1.swf" c'est le background du theme 1 ? tongue.gif
KantaSona
Raaah ben on a du nouveau ! Comment tu as fait reconnaître ton Viewty par EFS Omega ? Chez moi je vois pas...
0mega
Tu vas sur QPST Configuration puis dans l'onglet "ports" soit t'as deja le bon port (COM5 chez moi) et tont el est reconu soit tu click sur "add new port" et tu ajoute touts les port disponibles wink.gif Si ça ne fonctionne pas debranche puis rebranche le cable et verifi dans "add new port" si un nouveau port est disponible puis active le wink.gif
lolo-ViewTy
c'est cool que tu puisse voir c'est fichiers car c'est bien ceux que j'ai pu voir hier dans le firmware.

ca me fais vraiment chi.. de pas avoir mon câble usb, je vais p'tét en racheter un demain...

par contre pour l'erreur faudrai voir à choper les codes sources du programme il sont peut etre libre ( ca m'étonerai mais bon).

Sinon en parraléle on peut p'tét demander a QUALCOMM comment contrer cette erreur (266).

tu a tester les autres programmes (autre que EFS Explorer) ?
0mega
Quels autres programme ? Ceux fournis avec ce même log ? Ouep j'ai tout testé mais j'ai rien trouvé...
romantic
HEllo jai essayé le QPST mais je ny arrive pas mon telefone nest pas reconnu
jai beau faire "add ports" il m'en met jusqua 6 et tjrs pas de tel reconnu

jai branche mon tel via le cable usb puis lancer QPSTconfig.exe ..et ça ne marche pas ..Comment pour vous ça marche?
Joe_Black
certains fichiers sont accessible, d'autres donne l'erreur 266 (unable to open file).
peut-être parcequ'il sont en cours d'utilisation par le phone.

faudrait pouvoir passer le telephone dans un mode "mise à jour", peut-être par le menu service.
romantic
QUand je parle de cable c bien le cable usb qui relie le pc au tel .. mais peut etre qu'il me manque un driver?
QUALCOMM USB device driver ????
Merci pour d'éventuelles réponses
0mega
Non il n'y a besoin de rien, essai de debranché puis rebranché...
Sinon, Joe, toi t'arrive à acceder a des fichiers ? les quels ?
Joe_Black
ceux à la racine sont accessible, par exemple.
lolo-ViewTy
pouvez vous uploader des fichier de l'ordi vers le tel?

dans les repertoire qui été jusqu'a présent inaccéssible.
0mega
Perso j'ai essayer dans le repertoir swf, ça n'as pas marcher... une autre erreur...
canvin
CITATION(Joe_Black @ 09/12/2007 - 21:29) *
certains fichiers sont accessible, d'autres donne l'erreur 266 (unable to open file).
peut-être parcequ'il sont en cours d'utilisation par le phone.

faudrait pouvoir passer le telephone dans un mode "mise à jour", peut-être par le menu service.


Exactement..
la seule manière est de se mettre en mode service. J'ai vu un forum d'une personne qui avait le même problème (sur un sony je crois) et le seul moyen état de charger un autre firmware.
Faut voir du côté du firmware si des codes ne sont pas accessibles, ou alors allez fouiner dans le menu secret.
KU990_lover
Ouiiii. Bien joué les gars, on avance à pas de geant! on a deja trouver les fichiers et dossiers cachés, il reste plus qu'à s'octroyer les droits en ecriture ^^. Bon courage à tous.
LeGrec
Alors là je suis en joie ! Je dis bravo !
Bon d'accord, faut pas vendre la peau de l'ours avant de l'avoir hacké mais quand même !!

Allez les geeks !

PS : juste une idée de noob pour ce "mode service" et les fichiers inaccessibles car en usage : on a vu au départ que le viewty se connectait sur un des ports COM lorsqu'il était éteint. Cela pourrait avoir un effet positif ?

A+
0mega
tu veut dire que quand le viewty est eteint il se connecte sur un autre port ? je test...
vilraleur
Lorsque le viewty est éteind ou allumé en mode "service des données", le PC se connecte via le port 30 et rien de plus ou de moins est accessible ....
Pareil en mode "sync musique"
LiLGuY936
hello all j'ai un viewty proto je vais acheter ce soir le cable usb puis je verrais si je peux acceder au fichier swf
je vous en direz plus ce soir 78aw.gif
Ceci une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquez ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.