如何将 Android Studio 项目转换为 Appcelerator Titanium 模块

How to convert an Android Studio project to an Appcelerator Titanium Module

大家好! 所以,我有这个教程,它提出了一些问题。

Titanium-AndroidStudio

简而言之,它展示了如何在 Android Studio 上打开 Appcelerator 库并使用它来开发模块。

我需要的是相反的方式。

我有一个 AndroidStudio 项目,我需要将其 "convert" 到 Appcelerator Titanium 模块。 Java 代码不是问题,因为 Java 是 Java。但是有很多事情需要考虑。 Android Studio 使用它自己的 screen/buttons/views 实现,Appcelerator 模块是纯 java 在 Eclipse 中制作的,屏幕、视图、按钮等是使用 Java 创建的Titanium 框架内的脚本。

我来举个例子

这是来自 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 代码相关的应用程序本身的行为,比如相机视图和按钮。

如何从此片段中删除 "visual" 代码,并将其与 Appcelerator Java 脚本代码相关联。

例如,这个按钮必须内置在 appcelerator 中,如下所示:

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

我不知道我是否清楚这一点,但我希望你能理解我。

基本上,如何将项目从 Android Studio 迁移到 Appcelerator 模块并在 Titanium 内部使用它。

提前致谢。

更新:

这是我目前所拥有的。

ViewProxy 和视图 类。

@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" />

虽然这是一个很棒的教程,但有点过时了。从 Titanium 9.0.0 开始,可以更轻松地使用 Android Studio。看看:https://dev.to/miga/using-android-studio-to-develop-titanium-modules-2jc4 如何起床和 运行.

另一部分也不正确。您可以在模块中(甚至在 Hyperloop 中)使用原生 UI 元素:

这甚至会创建一个自定义视图,您以后可以像这样在控制器中使用 <VonageView module="ti.vonage" id="vonage"/>

请记住:与其他框架不同,Titanium 使用本机 UI 元素,并且在 UI 和逻辑之间的 connection/code 层仅使用 JS。

keepScreenOn 已经在 SDK 中: http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.View-property-keepScreenOn

如果缺少其他部分,例如 setStreamVolume,您甚至可以将它们添加到 SDK 中(例如此处 TiSound),因为它是开源的,可能对其他人也有用。