2016-06-26 11 views
1

In meinem Projekt, wenn ich meinen Paketnamen ändere, bekam ich folgenden Fehler. Ich surfe im Internet aber keine brauchbaren Daten. In einigen Fällen habe ich festgestellt, dass meine Methode nicht statisch sein sollte, und wenn ich statische entferne, legte sie fest, dass diese Methode statisch sein muss. jede Anregung, dieses Problem zu lösen Dank im Voraus das ist mein Fehler:native Methode nicht gefunden, wenn ich den Paketnamen ändern

native Methode nicht gefunden:

com.nooshindroid.yastashir.controller.JNIServer.get_number_of_processors:()I 
     at com.nooshindroid.yastashir.controller.JNIServer.get_number_of_processors(Native Method) 
     at com.nooshindroid.yastashir.controller.JNIServer.runServer(JNIServer.java:27) 
     at com.nooshindroid.yastashir.game.FreebloksActivity.startNewGame(FreebloksActivity.java:520) 
     at com.nooshindroid.yastashir.game.FreebloksActivity$16.onClick(FreebloksActivity.java:774) 
     at com.nooshindroid.yastashir.game.ColorListDialog.onItemClick(ColorListDialog.java:79) 
     at android.widget.AdapterView.performItemClick(AdapterView.java:301) 
     at android.widget.AbsListView.performItemClick(AbsListView.java:1510) 
     at android.widget.AbsListView$PerformClick.run(AbsListView.java:3339) 
     at android.os.Handler.handleCallback(Handler.java:730) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:176) 
     at android.app.ActivityThread.main(ActivityThread.java:5419) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:525) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) 
     at dalvik.system.NativeStart.main(Native Method) 

und dies ist mein Code:

public class JNIServer { 
final static String tag = JNIServer.class.getSimpleName(); 

/* unfortunately Runtime.availableProcessors() returns only the number of online cores */ 
public static native int get_number_of_processors(); 

private static native int native_run_server(int game_mode, int field_size_x, int field_size_y, int ki_mode, int ki_threads); 

private static native int native_resume_server(
     int field_size_x, 
     int field_size_y, 
     int current_player, 
     int spieler[], 
     int field_data[], 
     int player_stone_data[], 
     int game_mode, 
     int ki_mode, 
     int ki_threads); 


public static void runServer(Spielleiter spiel, int game_mode, int field_size, int ki_mode) { 
    int ki_threads = get_number_of_processors(); 

    if (spiel == null) 
     native_run_server(game_mode, field_size, field_size, ki_mode, ki_threads); 
    else { 
     int player_stones_available[] = new int[Stone.STONE_COUNT_ALL_SHAPES * 4]; 
     int i, j; 

     for (i = 0; i < 4; i++) 
      for (j = 0; j < Stone.STONE_COUNT_ALL_SHAPES; j++) 
       player_stones_available[i * Stone.STONE_COUNT_ALL_SHAPES + j] = spiel.get_player(i).get_stone(j).get_available(); 

     native_resume_server(
       spiel.m_field_size_x, 
       spiel.m_field_size_y, 
       spiel.current_player(), 
       spiel.spieler, 
       spiel.get_game_field(), 
       player_stones_available, 
       game_mode, 
       ki_mode, 
       ki_threads); 
    } 
} 

static { 
    Log.d(tag, "loading server.so"); 
    System.loadLibrary("server"); 
} 

}

Antwort

0

Warum verwenden Sie das Schlüsselwort native überall? Es soll bedeuten, dass etwas in einer anderen Sprache implementiert ist, was hier nicht der Fall zu sein scheint und diesen Fehler verursacht.

+0

Wenn Sie Implementierungen in einer anderen Sprache haben, bricht das Ändern des Pakets wahrscheinlich das Suchen des systemeigenen Codes. Hast du das auch auf das neue Paket übertragen? –

+0

ja, ich habe jni Ordner in meinem Projekt. Wie kann ich es wieder aufbauen? – bmm