2014-06-15 5 views
7

Ich versuche, ein phonegap Plugin, um eine Aktivität zu öffnen, ein Video durch Videoview Android zu spielen (weil es webview Android läßt Gesicht nicht html Video abspielen). Ich habe alles funktioniert, aber ich muss das R.java aus dem Paket in Mine phonegap sind für mein Plugin zu arbeiten/bauen und beseitigen die Fehler „R kann nicht auf eine Variable aufgelöst werden“.Importieren R.java von Phonegap zu meinem Plugin?

mein Plugin ist bei https://github.com/mikeRead/videoview, wenn Sie das lesen „wichtig!“ Abschnitt können Sie herausfinden, was ich tun muss, um das R ... Problem zu beheben.

im Grunde hat der Benutzer eine Import-Anweisung in meinem Plugin, um ihre phonegap Paketnamen zu ändern, so R.id und R.layout arbeitet.

Ich bin ein Web-Entwickler und mit Abstand von einem Android oder Coder Telefon Lücke so dass jede Hilfe/Hinweise auf diesem (anders als der Eclipse-Fixes) ist willkommen

DANKE!

+0

Sie eine andere Lösung ohne Änderung Strings gefunden? – galvan

Antwort

2

Das in Ihrer Frage beschriebene Problem kann gelöst werden, indem Sie Ihrem Plugin ein after_plugin_installhook hinzufügen. Ich habe einen Haken programmiert meine Aktivität zu ändern genannt SketchActivity.java wie unten gezeigt. Ändern Sie den Paketnamen nach Bedarf in Ihr Plugin.

#!/usr/bin/env node 
/* 
A hook to add R.java to the draw activiy in Android platform. 
*/ 


var fs = require('fs'); 
var path = require('path'); 

var rootdir = process.argv[2]; 

function replace_string_in_file(filename, to_replace, replace_with) { 
    var data = fs.readFileSync(filename, 'utf8'); 
    var result = data.replace(to_replace, replace_with); 
    fs.writeFileSync(filename, result, 'utf8'); 
} 

var target = "stage"; 
if (process.env.TARGET) { 
    target = process.env.TARGET; 
} 

    var ourconfigfile = path.join("plugins", "android.json"); 
    var configobj = JSON.parse(fs.readFileSync(ourconfigfile, 'utf8')); 
    // Add java files where you want to add R.java imports in the following array 

    var filestoreplace = [ 
     "platforms/android/src/in/co/geekninja/plugin/SketchActivity.java" 
    ]; 
    filestoreplace.forEach(function(val, index, array) { 
     if (fs.existsSync(val)) { 
      console.log("Android platform available !"); 
      //Getting the package name from the android.json file,replace with your plugin's id 
      var packageName = configobj.installed_plugins["in.co.geekninja.Draw"]["PACKAGE_NAME"]; 
      console.log("With the package name: "+packageName); 
      console.log("Adding import for R.java"); 
      replace_string_in_file(val,"package in.co.geekninja.plugin;","package in.co.geekninja.plugin;\n\nimport "+packageName+".R;"); 

     } else { 
      console.log("No android platform found! :("); 
     } 
    }); 

Platz es in /hooks/after_plugin_install/ Verzeichnis in Ihrem Plugin und fügen Sie die folgende Zeile zwischen Ihrem <platform name="android"> ... </platform> tag:

<hook type="after_plugin_install" src="hooks/after_plugin_install/hook-add-r-import.js" /> 

Der Code wird jedes Mal ausgeführt werden, wenn jemand das Plugin cordova plugin add Befehl fügt und schreibt die R.java Import direkt unterhalb der Paketdeklaration