Nano Hash - криптовалюты, майнинг, программирование

Как получить доступ к файлу jar из Unity с другим идентификатором пакета в Unity и именем пакета в Java?

Я создал плагин для единства в java jar.

В Java имя моего пакета — com.android.test.

В Unity мой идентификатор пакета — com.android.test. Это отлично работает с кодом ниже.

Но если я изменю свой идентификатор пакета на com.android.test2 в Unity, приведенный ниже код выдаст исключение Class not Found: com.android.test2.myplugin.

Есть ли способ получить доступ к файлу jar, имя пакета которого отличается от имени идентификатора пакета Unity?

Вот мой код Unity С# для доступа к Jar:

static IntPtr cls_Activity;
static IntPtr fid_Activity;
static IntPtr obj_Activity;
static IntPtr cls_OurAppNameActivityClass;
static IntPtr startAdsMethod;

cls_Activity = AndroidJNI.FindClass("com/unity3d/player/UnityPlayer");
fid_Activity = AndroidJNI.GetStaticFieldID(cls_Activity, "currentActivity", "Landroid/app/Activity;");
obj_Activity = AndroidJNI.GetStaticObjectField(cls_Activity, fid_Activity);

cls_OurAppNameActivityClass = AndroidJNI.FindClass("com/android/test/myplugin");
            startAdsMethod = AndroidJNI.GetMethodID(cls_OurAppNameActivityClass, "Instantiate", "()V");


  if (AndroidJNI.IsInstanceOf(obj_Activity, cls_OurAppNameActivityClass) != false)
    {
       Debug.Log("Activity IS a OurAppNameActivity");               
       jvalue[] myArray = new jvalue[1];
       AndroidJNI.CallVoidMethod(obj_Activity, startAdsMethod, myArray);
       Debug.Log("Activity Leaving a OurAppNameActivity");
    }
18.05.2012

  • да, я тоже столкнулся с той же проблемой.......жду ответа.. 18.05.2012
  • любое решение для этого? У меня такая же проблема. 28.05.2012

Ответы:


1

имя вашего пакета должно быть одинаковым как в единстве, так и в java, иначе к ним нельзя будет получить доступ.

05.06.2012
  • НЕТ Shoaib.. Есть способ.. используя CallStatic().. но у меня есть некоторые другие проблемы с ним. 06.06.2012
  • Спасибо, что дали мне знать :) 06.06.2012

  • 2

    Да, ты можешь. Выполните следующие шаги

    1. При создании проекта Android дайте имя вашей MainActivity (вместо MainActivity скажем MYAndroidPlugin)

    2. Теперь в MYAndroidPlugin.java вы увидите класс MYAndroidPlugin, измените его следующим образом:

    package com.mydomain.androidplugin;
    
    import android.app.Activity;
    import android.content.pm.ApplicationInfo;
    import android.content.pm.PackageManager;
    import android.os.Build;
    import android.widget.Toast;
    
    import com.unity3d.player.UnityPlayer;
    
    
    
    public class MyAndroidPlugin   {
    
       public MyAndroidPlugin(){
    
       //default constructor
      }
    
       public void makeToast(final String message, final int length) {
           final Activity a = UnityPlayer.currentActivity;
           a.runOnUiThread(new Runnable() {
            public void run() {
                Toast.makeText(a, message, length).show();
            }
        });
    }
    

    3. Экспортируйте его как jar через задачу gradle и поместите файл jar в свой unityproject/Assets/Plugins/Android.

    4. в сценарии С# (в методе тоста) напрямую ссылайтесь на свой класс

    public void TestToast(){
    
     using(AndroidJavaObject jo =  new      AndroidJavaObject("com.mydomain.androidplugin.MYAndroidPlugin"))
            jo.Call ("makeToast", "my plugin worked", 2);
     }
    

    5. Вот и вызовите этот метод, чтобы произнести тост

    теперь вы можете напрямую ссылаться на банку любого идентификатора

    01.02.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..