首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
Studio加速编译方法汇总www.64222.com:,一步一步学习android
发布时间:2020-03-23 10:17
浏览次数:

相信网上有很多类似的文章,大家看到的也比较多,但对于Eclipse上创建so,我觉得网上并没有一个全面的介绍搭建过程来避免开发和编译中出现的一些问题,比如:一些C/C++库include失败(Unresolved inclusion: <jni.h>)、或者引入成功了确提示类型错误(Type 'size_t' could not be resolved)等等错误。虽然在Android Studio 2.2后开始对ndk开发进行了有好的支持,而且使用了跨平台的cmake编译工具替换掉了之前的ndk-build方式进行so的生成,显而易见使用as成为必然,但是由于目前公司的so开发主要都是在eclipse上进行构建的,下一步打算迁移到as上了使用更高效的cmake,但是本人当初在eclipse上构建so的时候遇到了种种问题想把它记录下来,留作纪念,现在大家项目可能大部分ndk的编码还是用eclipse完成,也许也会帮助到一些朋友

www.64222.com 1

关于Menu的几个重要的方法,都是Activity的方法;

如果你不熟悉如何开始一个plugin,一步一步。本次主要实现功能

  • 1、eclipse版本:Eclipse IDE for Java Developers(Luna 4.4.2)本人使用的版本有点老,因为自从使用了as后就没有更新eclipse了,不过可以在eclipse官网下载到下载地址 第一个就是

  • 2、ADT版本:使用的 23.0.6至于版本大家网上自行搜索,很好找到

  • 3、NDK版本:android-ndk-r10e ,自行网上下载,目前最新版本为13.1,此处依然使用老的版本

JRebel for Android 是一个Android Studio的插件,可以大大加速Android Studio的编译速度,对于小项目来说或许不明显;但是当项目达到一定的规模时,它对于Android Studio乌龟般的编译速度有非常大的改善。

  • onCreateOptionsMenu(Menu menu)每次Activity一创建就会执行,一般只执行一次;
  • onPrepareOptionsMenu(Menu menu)每次menu被打开时,该方法就会执行一次;
  • onOptionsItemSelected(MenuItem item)每次menu菜单项被点击时,该方法就会执行一次;
  • invalidateOptionsMenu()刷新menu里的选项里内容,它会调用onCreateOptionsMenu(Menu menu)方法
  • onCreateContextMenu()创建控件绑定的上下文菜单menu,根据方法里的View参数识别是哪个控件绑定
  • onContextItemSelected(MenuItem item)点击控件绑定的上下菜单menu的内容项
  1. 通过在主菜单上添加一个自己的菜单项,
  2. 点击后可以获得编辑器的内容本次涉及内容
  3. 如何将自己的菜单插入到合适的位置,
  4. 如何获得editor中的内容

1. 创建项目

JRebel for Android使得每次改动代码后,不需要重新安装新的 apk;而是在安装完一次应用后,通过增量包传递到设备或者模拟器上,并且能够在应用运行时进行更新。

一、Menu标题菜单项创建
  1. 在Android工程目录下的res包下,右键选择New菜单项下的Android resource directory,并以menu命名文件夹的名字;
  2. 右键menu文件夹,选择Menu resource file选项,创建main_menu.xml文件
<?xml version="1.0" encoding="utf-8"?><menu xmlns:andro><item android: android:title="打开"/> <item android: android:title="关闭"/></menu>

这一步完成后的效果

  • Studio加速编译方法汇总www.64222.com:,一步一步学习android。首先在Preferences里面把NDK的根路径设置好

    www.64222.com 2

    www.64222.com,像创建普通Android项目一样创建一个叫NDKTest的项目

    www.64222.com 3创建好后在项目上右键>Android Tools>Add Android Native Support 然后随便填写一个名词代表我们要生成的so名,此处我们随便写一个,后面会讲怎么修改。然后Finish,会在我们项目根目录生成一个jni的文件夹这个文件就是我们以后编写C/C++在目录。

据说JRebel比Instant Run快了8倍,详情可查看官方介绍。

效果图

www.64222.com 4Menu.png

  1. 在Activity中重写三个方法
 @Override public boolean onPrepareOptionsMenu(Menu menu) { Log.i("dayang","打开Menu时执行该方法"); return super.onPrepareOptionsMenu; }@Overridepublic boolean onCreateOptionsMenu(Menu menu) { Log.i("dayang","onCreateOptionsMenu"); //创建Menu菜单 getMenuInflater().inflate(R.menu.main_menu,menu); return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) { Log.i("dayang","选择列表项时执行------------"); //对菜单项点击内容进行设置 int id = item.getItemId(); if (id == R.id.openMenu) { Toast.makeText(this,"打开文件",Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this,"关闭文件",Toast.LENGTH_SHORT).show();} return super.onOptionsItemSelected;}

www.64222.com 5

2. 引入本地库文件

你可以直接点击IDE的 Plugins -> Browse Repositories -> 输入JRebel for Android来搜索和安装插件。

效果图

www.64222.com 6Menu点击.png

  1. 启动一个新的plugin项目在plugin.xml中的<actions>....</actions>添加菜单组和对应菜单项
  • 我们要与java交互需要用到jni头文件还有一些C的标准库比如:string.h、stdio.h、stdlib.h、time.h等等,还有android的、linux的、opengl的、系统相关的等等基本都包含在此目录下:android-ndk-r10eplatformsandroid-21arch-armusrinclude我们来介绍一下ndk目录下的platforms,里面存放了android在Native层给我们提供的API引用库文件

www.64222.com 7

二、创建上下文菜单项

registerForContextMenu(View view)绑定相关点击控件长按出菜单项

www.64222.com 8

如果因为某些原因你无法访问 maven 的公有仓库,你可以直接在JetBrians官网下载,然后通过 Plugins > Install plugin from disk… 来安装插件。

效果图1

www.64222.com 9Menu长按图片1.jpg

<actions> <group text="我的菜单" description="慢慢的菜单组"> <add-to-group group- anchor="last" /> <action text="获得Editor中的内容" description="获得编辑器中的全部内容" /> </group></actions>
  • 此处有Android各系统版本所对应的引用库,我们这里选择了android-21,咱们再往里看里面是对应了各个CPU架构的库文件,所以这里我选择了arch-arm就行。一般如果我们不对特定的平台做单独特性开发的话不需要做其他选择,其实最终ndk-build编译的时候会根据Android.mk文件的配置来生成对应平台的so。

  • 我的项目中还用到了stddef.h、stdarg.h、stdbool.h等库,,但是这些头文件并没有在platforms目录下,这里我在在ndk的根目录通过模糊搜索搜出了这个目录:android-ndk-r10e/toolchains/aarch64-linux-android-4.9/prebuilt/windows-x86_64/lib/gcc/aarch64-linux-android/4.9/include

当你安装完插件后,你需要重启Android Studio,在重启之后,你需要提供你的姓名和邮箱来得到JRebel for Android的21天免费使用(JRebel 是收费的,个人用户每年要 49 美元,但是据说21 天到期之后你可以重新注册,据说官方对邮件没有验证,由于我暂未使用到21天,所以暂时未知,感兴趣的你可以下载试试)。

效果图2

www.64222.com 10Menu长按图片2.jpg

  1. <group> 标签表示这个是个菜单组,text属性是显示的内容,'description'描述

  2. <add-to-group>标签表示要添加到那个菜单,group-id是添加到的菜单id,这里是MainMenu,就是添加到组菜单上,anchor表示具体菜单的什么位置,这里是last表示添加到主菜单的最后,就是Help菜单后面了。

  3. 系统的group-id比较多,常见的描述下,要想了解更多可以参考这个网页Built-in Action ID's,或者查看源代码的platformplatform-resources-ensrcmessagesActionsBundle.properties这个文件。

  4. MainMenu:ide的主菜单; FileMenu:file菜单; EditMenu:edit菜单; ViewMenu: view菜单;GoToMenu:Navigate;CodeMenu:code; AnalyzeMenu:Analyze; RefactoringMenu:Refactor; BuildMenu: Build; RunMenu:Run; ToolsMenu:Tools;VcsGroups: VCS WindowMenu:Window; HelpMenu:Help

  5. EditorPopupMenu:编辑器中的右键菜单

  6. ``:这个是要用来承接action的一个类。

  7. 添加动作处理类,在左边Project窗口,点击src目录,右键选择新建,输入类名字建立新类,并在类中输入内容如下:

好了,这里确定我的项目中需要引入两个目录的库文件,在Eclipse中怎样引用呢?首先在jni目录下创建一个名为ndktest.c的源文件,代码如下:

重启Android Studio,会发现在顶部工具栏出现如下三个按钮:

1.创建main_menu2.xml
<?xml version="1.0" encoding="utf-8"?><menu xmlns:andro><item android: android:title="呵呵哒"></item><item android: android:title="滴滴"></item><item android: android:title="喔喔"></item></menu>
#include <jni.h>jstring Java_com_example_ndktest_NativeApp_version(JNIEnv *env, jobject thiz) { return ->NewStringUTF(env, "1.0.0");}

www.64222.com 11

2.创建的Activity的布局xml文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:androxmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"> <EditText android: android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="快来长按我" /> <EditText android: android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="快来长按我2" /></LinearLayout>
import com.intellij.openapi.actionSystem.AnAction;import com.intellij.openapi.actionSystem.AnActionEvent;import com.intellij.openapi.ui.Messages;public class ReadDocument extends AnAction { @Override public void actionPerformed(AnActionEvent anActionEvent) { Messages.showDialog("慢慢的菜单","慢慢消息",new String[]{"OK"}, -1, null); }}
友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有