lldbforandroid
❶ android studio下为什么我的sdk tools 下没有 LLDB,and NDK选项
这篇文章主要介绍了Android开发的IDE、ADT、SDK、JDK、NDK等名词解释,对这些概念搞不清楚是一件痛苦的事,本文就简洁讲解了这些名词的含义,一起扫盲吧,需要的朋友可以参考下 圆绝1. IDE: Intelligent Development Environm的简称。即智能开发环境。是一种开发工具。常用的IDE有adt-bundles和Android studio。两个都需要配置jdk。 2. ADT: Android Development tools的简称。即Android开发工具。ADT为Eclipse的插件。在Eclipse和SDK之间起了一个桥梁的作用。 3. SDK: Soft Development Kit的简称。软件开发工具包。在Android中,它为开发者提供中腔知了库文件以及其它开发所用到的工具。 4. JDK: java的开发工具包。包括了Java运行环境、Java工具和Java基础类库。 5. NDK: 概念: 并能自动将so和Java应用一卖消起打包成apk。这些工具对开发者的帮助是巨大的。 (2).NDK将是Android平台开发支持C开发的开端。 作用: (1).代码的保护。由于Java层代码很容易被反编译,而C/C++库反编译难度很大。 (2).可以方便的使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。 (3).提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。 (4).便于移植。用C/C++写的库可以方便的在其他的嵌入式平台上再次使用。
❷ android studio下为什么我的sdk tools 下没有 LLDB,and NDK选项
android studio 是需要配置sdk,如果没有配置sdk,Android studio是不能运行Android程序的,配置方法如下: 1、首先在我的电脑右亩袭键"属性"打开,点毕唯击"高手耐培级系统设置"如图: 2、点击"环境变量",如下图: 3、在系统变量里找到Android Home选项(如果没有就创建一个),点击下面的"编辑",添加android SDK的位置,如下图:
❸ android用cmake怎么导入cpp文件夹,undifined reference to
ndroid Studio升级到2.2之后,我们可以先配置好NDK开发的一些所需工具,如图,在SDK Tools中勾选安装CMake、LLDB、NDK。
CMake: 外部构建工具。如果你准备只使用 ndk-build 的话,可以不使用它。
LLDB: Android Studio上面调试本地代码的工具。
Android Studio自带DEMO了解CMAKE
Android Studio升级到2.2版本之后,在创建新的project时,界面上多了一个Include C++ Support的选项。勾选它之后将会创建一个默认的C++与JAVA混编的Demo程序。就让我们先来看看这个官方标准Demo吧。
开始之前最好先下载好NDK,见NDK开发 从入门到放弃(一:基本流程入门了解),即在Project Structure界面Android NDK location处下载或选择正确的路径。或者使用上方提供的工具安装方法来进行下载。否则,创建的新project也会报错,需要配置好后clean。
File -> New -> New Project,在如下界面中勾选Include C++ Support,然后一路 Next,直到 Finish 为止即可。
项目打开后我们查看目录结构,与常规项目不同的是多了.externalNativeBuild文件夹、cpp文件夹、CMakeLists.txt文件,如下图:
这三个东西都是NDK部分:
1. .externalNativeBuild文件夹:cmake编译好的文件, 显示支持的各种硬件等信息。系统生成。
2. cpp文件夹:存放C/C++代码文件,native-lib.cpp文件是该Demo中自带的,可更改。需要自己编写。
3. CMakeLists.txt文件:CMake脚本配置的文件。需要自己配置编写。
Gradle中也有两处不同:
java代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
/**
* A native method that is implemented by the 'native-lib' native library,
* which is packaged with this application.
*/
public native String stringFromJNI();
// Used to load the 'native-lib' library on application startup.
static {
System.loadLibrary("native-lib");
}
}2223
从native-lib.cpp的代码中我们能看到它使用的是静态注册的方式,动态注册的方式代码同传统JNI。
#include <jni.h>
#include <string>
extern "C"
jstring
Java_com_example_person_myapplication_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}12345678910111234567891011
CMakeLists.txt文件中我们需要注意的是下面这三个地方。两个library的名字(需一致)以及一个cpp文件的路径,彼此需要对应一致,当我们自己定义library以及自己创建cpp文件时需要对应修改。
❹ android studio下为什么我的sdk tools 下没有 LLDB,and NDK选项
Android studio安装完后会自带 sdk 的,如果没哪春有 sdk 的话,程序是无法编译运行的,sdk的路径自己可谈缓亏以含神修改,它的目录结构如下所示:Android Studio里的设置界面如下:进入SDK Manager可以对 sdk 版本进行下载更新。注意:自带的 sdk 版本可能会比较低,因此可以根据需要下载对应的版本。
❺ android studio下为什么我的sdk tools 下没有 LLDB,and NDK选项
1.首先安装铅缓LLDB,在tools->Android->sdkmanager中的SDKtools中找到LLDB并安装.2.gradle-experimental:0.7.0中debuggable默认设置为了true,如果是早期版本,需要在gradle中ndk下设槐档模置debuggable=“蠢塌true”
❻ python能看微信记录吗
python是一种编程语言,它看记录怎么看。应该是说能不能用它写个程序,用来看记录。这个在理论上是可以的!
❼ 如何实现在android studio中附加模式调试app
我在学习的过程中,亲历的这件事:项目组要做一个复杂的工程,分为sdk工程和demo工程,里面有java和jni层
而so和aar是sdk工程中生成的,拷贝到demo工程中编译成最终apk。
java层的调试,是简单的。可以在运行的时候用sdk工程的android studio附加app,如果直接用demo附加,sdk中的源码有些并不好显现,只能通过工程目录jar文件来查看。
而so层的附加,默认情况下是不可行的,因为jni层调试是启动型调试,我们来看下android studio处理各种调试行为的过程:
java层调试:
adb push 1.apk /data/local/tmp/1.apk
am start -D -n com.example.test/.MainActivity
android studio等待app状态正常
设置断点
执行remote connect,使用java调试协议附加
jni层调试:
adb push 1.apk /data/local/tmp/1.apk
am start -D -n com.example.test/.MainActivity
android studio等待app状态正常
adb push lldb_server
./lldb_server ..............建立Lldb调试服务器
lldbfrontend.exe ...........连接lldb调试服务器
向lldb_server发送附加调试命令
设置java/c层断点
执行remote connect,使用java调试协议附加
附加调试:
设置断点
执行remote connect,使用java调试协议附加
1.在研究过程中发现jni层在编译时生成2个so,带符号的是obj/local目录下的so,apk中编译好的的so是可以不带符号的,此时用gdb调试,吧文件设置为带符号的so,即可调试。继续研究发现带符号的so和无符号的so,前面字节完全相同。
2.android studio建立jni工程,需要自动安装lldb,修改gradle脚本,build.gradle
debug {
jniDebuggable true
}
3.android studio附加按钮只是采用Run/Debug Configuration中的Remote Configuaration
从上述过程可见,附加并不能触发jni层调试步骤,而jni层调试步骤又是写死的,必须把前面加载apk部分去掉,于是对android-ndk.jar做修改
最终实现了效果。其中一些重要的类:
IDevice:描述移动设备
Client:描述app包进程
AndroidNativeDebugProcess 控制jni调试,和lldb_server通信
AndroidNativeDeubgRunner 控制调试器部分
AndroidNativeRunConfiguration 配置Run/Debug Configuration中的Natvie-Debug选项,我在里面添加了用户app进程列表方便调试
配置界面控件
AndroidLLDBDebuggerContext jni层建立lldb调试器
AndroidLLDBDriver 实现基本调试功能
❽ 2019年十大最佳深度学习框架
作者 | Python语音识别
来源 | 涛哥聊Python
虽然我们大多数人都惊叹为什么DL这么好?在使用大量数据进行训练时,它在准确性方面非常出色。近几年随着深度学习算法的发展,出现了很多深度学习的框架,这些框架各有所长,各具特色。下面将为大家介绍2019年最受欢迎的十大深度学习框架。
TensorFlow谷歌的Tensorflow可以说是当今最受欢迎的深度学习框架。Gmail,Uber,Airbnb,Nvidia以及其他许多知名品牌都在使用。TF是目前深度学习的主流框架,Tensorflow主要特性:
TensorFlow支持python、JavaScript、C ++、Java和Go,C#和Julia等多种编程语言。 TF不仅拥有强大的计算集群,还可以在iOS和Android等移动平台上运行模型。 TF编程入门难度较大。初学者需要仔细考虑神经网络的架构,正确评估输入和输出数据的维度和数量。 TF使用静态计算图进行操作 。也就是说我们需要先定义图形,然后运行计算,如果我们需要对架构进行更改,我们会重新训练模型。选择这样的方法是为了提高效率,但是许多现代神经网络工具能够在学习过程中考虑改进而不会显着降低学习速度。在这方面,TensorFlow的主要竞争对手是PyTorch 。TensorFlow优点:
它非常适合创建和试验深度学习架构,便于数据集成,如输入图形,SQL表和图像。 它得到谷歌的支持,这就说明该模型短期内不会被抛弃,因此值得投入时间来学习它。 PyTorchTensorflow之后用于深度学习的主要框架是PyTorch。PyTorch框架是Facebook开发的,已被Twitter和Salesforce等公司使用。
PyTorch基本特性:
与TensorFlow不同,PyTorch库使用动态更新的图形进行操作 。这意味着它可以在流程中更改体系结构。 在PyTorch中,您可以使用标准调试器 ,例如pdb或PyCharm。PyTorch优点:
训练神经网络的过程简单明了。同时,PyTorch支持数据并行和分布式学习模型,并且还包含许多预先训练的模型。 PyTorch更适合小型项目和原型设计。 SonnetSonnet深度学习框架是建立在TensorFlow的基础之上。它是DeepMind用于创建具有复杂架构的神经网络。
Sonnet基本特性:
面向对象的库,在开发神经网络(NN)或其他机器学习(ML)算法时更加抽象。 Sonnet的想法是构造对应于神经网络的特定部分的主要Python对象。此外,这些对象独立地连接到计算TensorFlow图。分离创建对象并将其与图形相关联的过程简化了高级体系结构的设计。Sonnet优点:
Sonnet的主要优点是可以使用它来重现DeepMind论文中展示的研究,比Keras更容易,因为DeepMind论文模型就是使用Sonnet搭建的。 KerasKeras是一个机器学习框架,如果您拥有大量数据和/或你想快速入门深度学习,那么Keras将非常适合学习。Keras是TensorFlow高级集成APi,可以非常方便的和TensorFlow进行融合。这是我强烈推荐学习的一个库。
Keras基本特性:
除了Tensorflow之外,Keras还是其他流行的库(如Theano和CNTK)的高级API。 在Keras中更容易创建大规模的深度学习模型,但Keras框架环境配置比其他底层框架要复杂一些。Keras优点:
对于刚刚入门的人来说,Keras是最好的深度学习框架。它是学习和原型化简单概念的理想选择,可以理解各种模型和学习过程的本质。 Keras是一个简洁的API。 可以快速帮助您创建应用程序。 Keras中代码更加可读和简洁。 Keras模型序列化/反序列化API,回调和使用Python生成器的数据流非常成熟。顺便说一下TensorFlow和Keras的对比:
PS:Tensorflow处于底层框架:这和MXNet,Theano和PyTorch等框架一样。包括实现诸如广义矩阵 - 矩阵乘法和诸如卷积运算的神经网络原语之类的数学运算。
Keras处于高度集成框架。虽然更容易创建模型,但是面对复杂的网络结构时可能不如TensorFlow。
MXNetMXNet是一种高度可扩展的深度学习工具,可用于各种设备。虽然与TensorFlow相比,它似乎没有被广泛使用,但MXNet的增长可能会因为成为一个Apache项目而得到提升。
MXNet基本特性:
该框架支持多种语言,如C ++,Python,R,Julia,JavaScript,Scala,Go,甚至Perl。 可以在多个GPU和许多机器上非常有效地并行计算。MXNet优点:
支持多个GPU(具有优化的计算和快速上下文切换) 清晰且易于维护的代码(Python,R,Scala和其他API) 快速解决问题的能力(对于像我这样的深度学习新手至关重要)虽然它不像TF那么受欢迎,但MXNet具有详细的文档并且易于使用,能够在命令式和符号式编程风格之间进行选择,使其成为初学者和经验丰富的工程师的理想选择。
GLUONGluon是一个更好的深度学习框架,可以用来创建复杂的模型。GLUON基本特性:
Gluon的特殊性是具有一个灵活的界面,简化了原型设计,构建和培训深度学习模型,而不会牺牲学习速度。 Gluon基于MXNet,提供简单的API,简化深度学习模型的创建。 与PyTorch类似,Gluon框架支持使用动态图表 ,将其与高性能MXNet相结合。从这个角度来看,Gluon看起来像是分布式计算的Keras非常有趣的替代品。GLUON优点:
在Gluon中,您可以使用简单,清晰和简洁的代码定义神经网络。 它将训练算法和神经网络模型结合在一起,从而在不牺牲性能的情况下提供开发过程的灵活性。 Gluon可以定义动态的神经网络模型,这意味着它们可以动态构建,使用任何结构,并使用Python的任何本机控制流。 SWIFT当你听到Swift时,您可能会考虑iOS或MacOS的应用程序开发。但是如果你正在学习深度学习,那么你一定听说过Swens for Tensorflow。通过直接与通用编程语言集成,Swift for TensorFlow可以以前所未有的方式表达更强大的算法。SWIFT基本特性:
可以轻松获得可微分的自定义数据结构。 下一代API 。通过实践和研究获得的新API更易于使用且更强大。 在TensorFlow的基础上 ,Swift API为您提供对所有底层TensorFlow运算符的直接调用。 基于Jupyter、LLDB或者Swift in Colab的编程工具提高了您的工作效率。SWIFT优点:
如果动态语言不适合您的任务,那么这将是一个很好的选择。当你训练运行了几个小时,然后你的程序遇到类型错误,那么使用Swift,一种静态类型语言。您将看到代码错误的地方。 Chainer直到CMU的DyNet和Facebook的PyTorch出现之前,Chainer是动态计算图或网络的领先神经网络框架,它允许输入数据长度不一致。chainer基本特性:
Chainer代码是在Numpy和CuPy库的基础之上用纯Python编写的, Chainer是第一个使用动态架构模型的框架。Chainer优点:
通过自己的基准测试,Chainer明显比其他面向Python的框架更快,TensorFlow是包含MxNet和CNTK的测试组中最慢的。 比TensorFlow更好的GPU和GPU数据中心性能。最近Chainer成为GPU数据中心性能的全球冠军。 DL4J那些使用Java或Scala的人应该注意DL4J(Deep Learning for Java的简称)。DL4J的基本特性:
DL4J中的神经网络训练通过簇的迭代并行计算。 该过程由Hadoop和Spark架构支持。 使用Java允许您在Android设备的程序开发周期中使用。DL4J优点:
如果您正在寻找一个良好的Java深度学习框架,这会是一个非常好的平台。 ONNXONNX项目诞生于微软和Facebook,旨在寻找深度学习模型呈现的开放格式。ONNX简化了在人工智能的不同工作方式之间传递模型的过程。因此ONNX具有各种深度学习框架的优点。
ONNX基本特性:
ONNX使模型能够在一个框架中进行训练并转移到另一个框架中进行推理。ONNX模型目前在Caffe2,Microsoft Cognitive Toolkit,MXNet和PyTorch中得到支持,并且还有许多其他常见框架和库的连接器。ONNX优点:
对于PyTorch开发人员来说,ONNX是一个好的选择。但是对于那些喜欢TensorFlow的人来说,Keras等可能好一点。 总结那么您应该使用哪种深度学习框架?下面是几点建议:
如果你刚刚开始学习,那么最好的选择是Keras 。 出于研究目的,请选择PyTorch 。 对于生产,您需要关注环境。因此对于Google Cloud,最好的选择是TensorFlow ,适用于AWS - MXNet和Gluon 。 Android开发人员应该关注D4LJ ,对于iOS来说, Core ML会破坏类似的任务范围。 最后, ONNX将帮助解决不同框架之间的交互问题。