当前位置:职场发展 > vs2019开发android效果_vs2019开发android应用,VS 2019开发APP(一)界面及代码

vs2019开发android效果_vs2019开发android应用,VS 2019开发APP(一)界面及代码

  • 发布:2023-10-01 18:25

1.环境准备

1.1 安装JDK:jdk1.8.0_112

1.2 安装Android SDK

SDK可以安装指定平台和ndk-bundle。出于兼容性考虑,单独安装旧版本的android-ndk-r10b

1.3 安装VS2019

安装VS2019并选择:使用C++进行移动开发。

1.4 连接开发手机

使用USB数据线连接开发手机,并打开开发手机的USB调试选项。

2。创建Android动态库项目

2.1?创建新项目

启动VS2019,选择创建新项目

2.2 选择项目类型

从下拉框中选择C++和Android,从列表中选择动态共享库(Android),然后单击下一步

2.3 填写项目属性

填写项目名称:MyTestSo,选择创建位置,点击创建

2.4?项目创建完成

3.?创建动态库测试项目

3.1 新建一个Android项目

右键单击解决方案,然后在弹出菜单中选择“添加”->“新建项目”菜单项。

3.2?选择项目类型

在下拉框中选择C++和Android,在列表中选择Native-Activity应用程序(Android),然后单击下一步

3.3?填写项目属性

填写项目名称:Test,点击创建

?

3.4 项目创建完成

?3.5 ??????添加引用

右键单击左侧Test.NativeActivity项目下的引用,选择弹出菜单:添加引用(R)…

选择MyTestSo,点击确定完成设置。

4.设置IDE属性

?选择VS2019菜单项:工具->选项,打开选项设置页面。

选择Cross-Platform –> C++ –> Android,填写右侧的开发工具目录。

5.设置项目属性

?直接编译创建的工程会出现如下错误:

需要设置MyTestSo项目和Test.NativeActivity项目的编译属性。下面以MyTestSo项目为例。

打开MytestSo项目属性,左侧选择General,修改右侧平台工具集为:GCC 4.9,目标API级别为android-L。

6.编译运行 6.1 修改动态库工程代码

在MyTestSo.cpp源代码文件中添加测试功能test,代码如下:

???

无效测试()

{

LOGI(“MyTestSo 的 Hello World”);

}

6.2??????修改测试项目代码

在main.cpp源代码文件中调用测试函数test。代码如下:

extern "C" void test();

测试();

??????6.3?编译并运行项目

将Test.Packaging项目设置为启动项目,选择编译并运行Test.Packaging项目,并查看Logcat输出日志。

项目在某些低版本Android平台上运行时可能会崩溃。解决方法请参考第7节。

6.4 调试代码

在main.cpp或MyTestSo.cpp中设置断点,调试并启动Test.Packaging项目,就会在设置的断点处中断,效果如下图:

7。解决了崩溃问题

项目在某些低版本Android平台上运行时可能会崩溃,出现如下错误:

原因是www.sychzs.cn库依赖于www.sychzs.cn库,而项目在运行时加载www.sychzs.cn库之前没有加载www.sychzs.cn库,导致崩溃。解决办法是自定义项目启动类,并在启动类中加载so库。

??????7.1?定制项目启动类

在项目Test.Packaging中添加目录结构:src/com/mytest,并在mytest目录下创建java源文件www.sychzs.cn,内容如下:

包com.mytest;

导入android.app.NativeActivity;

公共类 MyTestActivity 扩展了 NativeActivity

{

静态

{

System.loadLibrary("MyTestSo");

System.loadLibrary("测试");

}

}

?

7.2?修改AndroidManifest.xml

打开AndroidManifest.xml编辑内容,

android:hasCode 属性修改为:trueandroid:name 属性修改为:com.mytest.MyTestActivity

7.3 重新编译并运行项目

附录:使用jar包

原文链接:https://www.sychzs.cn/visual-studio-android-ndk-jar-files.html

Android NDK、JAR 文件、JNI 和 Visual Studio

对于那些不知道的人来说,我已经是 Visual Studio 用户很长时间了,在其他形式的 IDE 中,我使用 Visual Studio 最多。我还喜欢使用 C 编程语言(我希望 VS 对于 C 来说是最新的,但它已经足够好了)。您可以做的事情之一是使用 NDK 和 Visual Studio 进行 Android 开发,效果相当好,即使它使用 Ant 而不是 Gradle,我发现它到目前为止已经满足了我的所有需求。话虽这么说,我将在这里提出一些关于如何使开发过程更加友好以便能够通过 JNI 和本机代码进行交互的提示。

注意:我假设您已经设置了 Visual Studio 并安装了本机 Android 开发

更新蚂蚁

如果您通过 Visual Studio 安装了 Android 原生开发,则您需要的所有内容(NDK 和 SDK)都应该位于“C:/Microsoft”文件夹中。我们需要做的就是告诉 Ant 构建系统使用更现代版本的 JDK (OpenJDK) 来构建 java 代码。为此,请在文本编辑器中打开?C:/Microsoft/AndroidSDK/25/tools/ant/build.xml?文件并找到以? 开头的行

项目.properties

我的项目属性文件在?.sln?中如下所示:

#项目目标

目标=$(androidapilevel)

# 通过设置 jar.libs.dir=

提供预构建外部 jar 文件所在目录的路径

jar.libs.dir=libs

AndroidManifest.xlm

由于我们要编写 .jar 文件并可能在运行时加载到外部库中,因此我们需要设置我们的项目以拥有自己的自定义本机活动代码。在?AndroidManifest.xlm?文件中,您需要在??标签中找到?android:hasCode=""?值,并将其值设置为?true。它应该类似于以下内容:

接下来我们要设置?

创建我们的自定义活动

由于我们的完整类路径是?com.PackageName.FancyActivity?我们需要在 Visual Studio 中的?*.Packaging?项目中创建一些文件夹。创建名为 src/com/PackageName/ 的文件夹路径。接下来在“PackageName”文件夹中创建一个名为“www.sychzs.cn”的文件。下面是您应该在 www.sychzs.cn 中包含的代码:

package com.PackageName;

导入android.app.NativeActivity;

公共类 FancyActivity 扩展了 NativeActivity

{

静态

{

//System.loadLibrary("other_lib");

}

}

注意注释掉的行?System.loadLibrary。您可以根据需要多次调用它,但您所需要做的就是将“other_lib”替换为您的库的名称,例如System.loadLibrary(“fmod”);或类似的名称。此时您应该能够毫无问题地进行构建。

专业提示:?您应该始终添加?System.loadLibrary(“ProjectName”);?其中?ProjectName?是为您的NDK项目构建生成的?.so?文件的名称。这将允许您从 Java 代码中调用本机函数(非常适合回调等)。

自定义 JAR 文件

现在我们已经设置了 Activity 以更好地与 JNI 交互并加载其他库,我们将了解如何添加我们自己的 .jar 文件并从本机代码访问其中的类型。

构建 .jar 文件

确保使用“-source 1.7 -target 1.7”编译您的代码,以便它与我们之前设置的 Ant 版本相匹配。构建完 .class 文件后,请确保您的文件夹结构与包路径相关,正确无误。如果您的类的包路径是?package com.PackageName;?那么您应该在文件夹结构?com/PackageName/*.class 中拥有.class 文件。当您构建?.jar?文件时,它应该适用于整个文件夹结构。

在项目中包含.jar文件

现在您已经拥有了?.jar?文件,您应该在您的?*.Packaging?项目中创建一个名为?libs?的文件夹。将您的 .jar 文件放入此文件夹中,并确保右键单击它并选择“包含在项目中”。

访问 .jar 文件中的代码

假设对于这一部分,您创建了一个名为“Dummy”的类,其函数具有签名“void SayHi(string name)”,它将打印出“Hello, %s!” (%s =?名称?函数的输入字符串)。我们将使用 JNI 访问您的代码并调用您的方法。下面是我们将用来调用函数的代码。你可以将它直接放在你的 void android_main(struct android_app* state)?function:

JNIEnv* env = NULL;

const ANativeActivity* 活动 = 状态->活动;

(*活动->vm)->附加当前线程(活动->vm, &env, 0);

jobobject jobj = 活动->clazz;

jclass clazz = (*env)->GetObjectClass(env, jobj);

jmethodID getClassLoader = (*env)->GetMethodID(env, clazz, "getClassLoader", "()Ljava/lang/ClassLoader;");

jobject cls = (*env)->CallObjectMethod(env, jobj, getClassLoader);

jclass classLoader = (*env)->FindClass(env, "java/lang/ClassLoader");

jmethodID findClass = (*env)->GetMethodID(env, classLoader, "loadClass", "(Ljava/lang/String;)Ljava/lang/Class;");

jstring strClassName = (*env)->NewStringUTF(env, "com.PackageName.Dummy");

jclass fancyActivityClass = (jclass)((*env)->CallObjectMethod(env, cls, findClass, strClassName));

(*env)->DeleteLocalRef(env, strClassName);

jmethodID sayHi = (*env)->GetStaticMethodID(env, fancyActivityClass, "SayHi", "(Ljava/lang/String;)V");

jstring 单词 = (*env)->NewStringUTF(env, "Brent");

(*env)->CallStaticVoidMethod(env,fancyActivityClass,sayHi,words);

(*env)->DeleteLocalRef(env,单词);

??????现在那些接触过 JNI 的人可能会说“我们不能直接使用?(*env)->FindClass?方法吗?虽然对于普通的 Android 内置类来说这可能是正确的,但对于我们自己的自定义类来说却并非如此。原因是 JNI 只能查看当前堆栈上的内容,不管你信不信,即使我们的 FancyActivity 正在运行我们的代码,它也不在堆栈上,所以我们甚至找不到它。所以我们需要做的是获取当前的activity,然后在它上面找到一个名为getClassLoader的方法。一旦我们有了这个函数,我们就可以从加载的任何地方自由加载任何类,甚至在我们的?.jar?code 中。

希望这可以帮助有困难的人。我花了一整天的时间才弄清楚所有这些东西,因为互联网上没有任何直接的东西,我必须深入挖掘才能找到将这些东西组合在一起的所有部分!

1.界面

在资源>布局>目录下的*.xml文件就是界面文件

2.关联界面

接下来,通过将支持代码插入到 MainActivity 类中来添加代码以关联用户界面。

找到?OnCreate? “MainActivity”中的方法类,并添加关联的按钮代码如下:

protected override void OnCreate(Bundle savingInstanceState)

{

/*这部分是程序自带的代码*/

base.OnCreate(savedInstanceState);

Xamarin.Essentials.Platform.Init(此,savedInstanceState);

//从“主”布局资源设置我们的视图

SetContentView(Resource.Layout.activity_main);

//通过ID绑定控制

按钮任务1 = FindViewById(Resource.Id.button1);

按钮任务2 = FindViewById(Resource.Id.button2);

按钮任务3 = FindViewById(Resource.Id.button3);

按钮任务4 = FindViewById(Resource.Id.button4);

按钮停止= FindViewById(Resource.Id.button5);

TextView显示= FindViewById(Resource.Id.textView1);

//添加控件对应的事件

任务1.单击+=(发件人,e)=>

{

Show.Text = "任务 1 正在进行中...";

};

任务2.单击+=(发件人,e)=>

{

Show.Text = "任务 2 正在进行中...";

};

任务3.单击+=(发件人,e)=>

{

Show.Text = "任务三正在进行中...";

};

任务4.点击+=(发件人,e)=>

{

Show.Text = "任务 4 正在进行中...";

};

}

现在您已经完成了一个响应按钮事件的简单程序。

最近发现vs2019可以开发Android。一直想找机会尝试一下,发现效果确实不错。

先安装vs2019,然后如图:

选择使用 .NET 进行移动开发

然后等待安装完成。

选择打开还是新建项目? Android 应用程序 (Xamarin)

然后选择对应的当前模板和对应的Android最低版本,然后就OK了?

打开工具-Android-设备管理器,创建模拟设备

打开项目。右侧Resources->content_main是左侧视图中显示的内容。也可以像winfrom一样将控件拖到屏幕上

点击Simulation Run,就会弹出模拟器。如果选择真机模拟,还需要开启开发者模式,直接调试,以获得更好的效果。

接下来我们会将其作为Android安装包以apk形式发布。

调试时为Debug模式,发布包时为Release模式。

更改模式后,右键单击项目并保存

存档成功后,会出现三个选项。打开文件夹里的apk就不行了,安装直接崩溃。因此,我们需要分发的apk并选择分发。

选择临时,或者您想要发布到 Google Play。

选择 1 个位置添加您的徽标

然后单独保存就可以得到apk了

这样您就可以将您的?com.companyname.app1.apk安装包发送到您的Android手机或模拟器上使用。

最终手机截图如下:

?

?

0条大师的评论

相关文章