Как преобразовать проект Android Studio в модуль Appcelerator Titanium - PullRequest
1 голос
/ 05 мая 2020

Эй, ребята! Итак, у меня есть этот учебник, и он вызвал несколько вопросов.

Titanium-AndroidStudio

Короче говоря, он показывает, как открыть библиотеки Appcelerator в Android Studio и использовать его для разработки модулей.

То, что мне нужно, это как бы наоборот.

У меня есть проект AndroidStudio, который мне нужно «преобразовать» в модуль Appcelerator Titanium. Код Java не является проблемой, поскольку Java это Java. Но нужно учесть много вещей. Android Studio использует собственную реализацию экрана / кнопок / представлений, а модуль Appcelerator является чистым java, созданным в Eclipse, а экран, представления, кнопки и т.д. c создаются с использованием Javascript внутри Titanium. framework.

Приведу пример.

Это фрагмент из Android Studio.

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    requestPermissions();
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
    setContentView(R.layout.activity_tire_scan);

    AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
    if (audioManager != null) { 
        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);
    }

    btnAccept = findViewById(R.id.btnAccept);
    mOpenCvCameraView = findViewById(R.id.java_camera_View);
    mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
    mOpenCvCameraView.setCvCameraViewListener(this);
}

Итак, у нас есть код Java которые делают некоторые вещи, и у нас также есть поведение самого приложения, связанное с кодом Java, например вид камеры и кнопка.

Как удалить "визуальный" код из этого фрагмента, и свяжите его с кодом Appcelerator Javascript.

Эта кнопка, например, должна быть встроена в appcelerator, например:

var VBtn = Ti.UI.createButton({
    title: 'CameraButton',
    bottom: 50,
});

Я не знаю, ясно об этом, но, я надеюсь, вы меня понимаете.

В основном, как перенести проект из Android Studio в модуль Appcelerator и использовать его внутри самого Titanium.

Заранее спасибо.

ОБНОВЛЕНИЕ:

Это то, что у меня есть.

Классы ViewProxy и View.

@Kroll.proxy(creatableInModule = ItiremoduleModule.class)
public class ItireViewProxy extends TiViewProxy 
{
public ItireViewProxy() 
{
    super();
}

PortraitCameraBridgeViewBase mOpenCvCameraView;
AppCompatActivity appCom;

protected class ItireView extends TiUIView
{
    public ItireView(TiViewProxy proxy) {
        super(proxy);

        String packageName = proxy.getActivity().getPackageName();
        Resources resources = proxy.getActivity().getResources();
        View viewWrapper;

        int java_camera_View = resources.getIdentifier("java_camera_View", "id", packageName);

        LayoutInflater inflater = LayoutInflater.from(proxy.getActivity());
        viewWrapper = inflater.inflate(java_camera_View, null);

        setNativeView(viewWrapper);
    }
}

@Override
public TiUIView createView(Activity activity) {
    TiUIView view = new ItireView(this);
    view.getLayoutParams().autoFillsHeight = true;
    view.getLayoutParams().autoFillsWidth = true;
    return view;
}

@Kroll.method
public void setView() {
    // must use this method to set the view on Appcelerator, right?
    }

}

Файл xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:itiremodule="http://schemas.android.com/apk/lib/com.itire.budini"
xmlns:opencv="http://schemas.android.com/apk/lib/com.itire.budini"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.itire.budini.ItireViewProxy">

<com.example.etech.opencvtest320.PortraitCameraView
    android:id="@+id/java_camera_View"
    android:layout_width="379dp"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:visibility="visible"
    opencv:camera_id="any"
    opencv:show_fps="true" />

<Button
    android:id="@+id/btnAccept"
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="375dp"
    android:layout_height="76dp"
    android:layout_alignParentBottom="true"
    android:layout_centerInParent="true"
    android:layout_marginBottom="32dp"
    android:background="@android:color/darker_gray"
    android:onClick="scanAgain"
    android:text="Scanning iTread..."
    android:textAllCaps="false"
    android:textColor="#1F2025"
    android:textSize="18sp"
    android:visibility="visible" />

1 Ответ

2 голосов
/ 06 мая 2020

Хотя это отличный учебник, он немного устарел. Начиная с Titanium 9.0.0 проще использовать Android Studio. Посмотрите: https://dev.to/miga/using-android-studio-to-develop-titanium-modules-2jc4 о том, как его запустить и запустить.

Другая часть также неверна. Вы можете использовать собственные элементы пользовательского интерфейса в модулях (или даже в Hy perloop):

Это даже создаст пользовательский вид, который вы можете использовать в своем контроллере позже, например, <VonageView module="ti.vonage" id="vonage"/>

Имейте в виду: в отличие от других фреймворков Titanium использует собственные элементы пользовательского интерфейса и только JS для уровня соединения / кода между вашим пользовательским интерфейсом и логом c.

keepScreenOn уже находится внутри SDK: http://docs.appcelerator.com/platform/latest/#! / Api / Titanium.UI.View-property-keepScreenOn

Если другие части отсутствуют, например setStreamVolume вы даже можете добавить их в SDK (например, здесь TiSound ), поскольку это открытый исходный код, который может быть полезен и другим людям.

...