Android 6.0 – 动态权限管理的解决方案

这里以单个存储权限为例: · 在 Manifest 中添加访问权限:(只需设置可写,因为可写必定可读) 动态申请权限的过程: = Build.VERSION_CODES.M) { // 检查该权限是否已经获取 int i = ContextCompat.checkSelfPermission(this, permissions[0]); // 权限是否已经 授权 GRANTED—授权 DINIED—拒绝 if (i != PackageManager.PERMISSION_GRANTED) { // 如果没有授予该权限,就去提示用户请求 showDialogTipUserRequestPermission(); } } } // 提示用户该请求权限的弹出框 private void showDialogTipUserRequestPermission() { new AlertDialog.Builder(this) .setTitle(“存储权限不可用”) .setMessage(“由于支付宝需要获取存储空间,为你存储个人信息;\n否则,您将无法正常使用支付宝”) .setPositiveButton(“立即开启”, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { startRequestPermission(); } }) .setNegativeButton(“取消”, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }).setCancelable(false).show(); } ...

2017年2月25日 · 3 分钟 · 天边的星星

Android 中gitWindow可以做的事情

View view = getWindow().getDecorView().findViewById(R.id.activity_main); if (view == null) return; ViewParent viewParent = view.getParent(); if (viewParent instanceof FrameLayout) { final FrameLayout frameParent = (FrameLayout) viewParent;//整个父布局 final LinearLayout linearLayout = new LinearLayout(this);//新建一个LinearLayout linearLayout.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); linearLayout.setOrientation(LinearLayout.VERTICAL); linearLayout.setBackgroundResource(#88000000);//背景设置灰色透明 linearLayout.setGravity(Gravity.CENTER_HORIZONTAL); linearLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { frameParent.removeView(linearLayout); } }); Rect rect = new Rect(); Point point = new Point(); nearby.getGlobalVisibleRect(rect, point);//获得nearby这个控件的宽高以及XY坐标 nearby这个控件对应就是需要高亮显示的地方 ImageView topGuideview = new ImageView(this); topGuideview.setLayoutParams(new ViewGroup.LayoutParams(rect.width(), rect.height())); topGuideview.setBackgroundResource(R.drawable.iv_topguide); ...

2017年2月20日 · 1 分钟 · 天边的星星

GetLab安装使用

由于使用总公司的SVN,有些新同事和其他组没有SVN,项目开发中没有版本控制,为了解决这个问题,我给公司搭建了内网git服务器进行版本控制,现在记录下安装配置过程 第一步:登录官网点击下载,选择适合的操作系统 例如centos https://about.gitlab.com/downloads/#centos7 第二步:由于网络问题,我选择下载安装 下载网址https://packages.gitlab.com/gitlab/gitlab-ce 运行命令 rpm 安装 rpm -i gitlab-ce-XXX.rpm 第三步:配置请求地址和端口 进入/etc/gitlab/gitlab.rb 下面修改 1、external_url 表示请求的地址例如external_url ‘http://192.168.0.239’ 2、nginx[‘listen_port’] 表示端口 例如nginx[‘listen_port’] = 8999 注意:要是有#号别忘记删除,修改gitlab.rb文件需要重新编辑和配置 第四步:编译和配置(配置并启动gitlab) sudo gitlab-ctl reconfigure 第五步:在浏览器输入地址,第一次是修改密码(对用的账号是root),根据提示修改密码 第六步:登录OK 第七步:gitlab仓库地址和备份 1、gitlab默认参考地址:/var/opt/gitlab/git-data/repositories 修改/etc/gitlab/gitlab.rb->git_data_dirs(别忘记#去掉) 2、备份命令:gitlab-rakegitlab:backup:create, 默然的备份目录为: /var/opt/gitlab/backups 备份目录的修改 vi /etc/gitlab/gitlab.rb gitlab_rails[‘backup_path’] =’/mnt/gitlab_backups’ 3、恢复备份,需要先停止服务,恢复完成在启动服务 gitlab-rake gitlab:backup:restore BACKUP=1458213020 BACKUP后面跟的是备份文件的时间戳, 比如恢复备份文件 1458213020_gitlab_backup.tar 第八步:其他 1、停服务 gitlab-ctl stop unicorn gitlab-ctl stop sidekiq 2、回复完启动服务 gitlab-ctl start SSH key生成 详细请参考: http://blog.csdn.net/lsyz0021/article/details/52064829 http://blog.csdn.net/tanzhengyu/article/details/51064380 安装git,从程序目录打开 “Git Bash” 键入命令:ssh-keygen -t rsa -C “email@email.com” “email@email.com”是github账号 提醒你输入key的名称,输入如id_rsa 在C:\Documents and Settings\Administrator\下产生两个文件:id_rsa和id_rsa.pub(mac 在~/.ssh目录下) 把4中生成的密钥文件复制到C:\Documents and Settings\Administrator.ssh\ 目 录下。 用记事本打开id_rsa.pub文件,复制内容,在git的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚才复制的内容。 ^_^ OK了 需要注意步骤2中产生的密钥文件在当前用户的根目录,必须把这两个文件放到当前用户目录的“.ssh”目录下才能生效。 在windows中只能在命令行下输入创建”.”开头的文件夹。命令为 mkdir .ssh 关注公众号获取更多内容和反馈沟通 ...

2017年2月10日 · 1 分钟 · 天边的星星

Nginx单IP地址配置多个SSL证书

默认情况下,Nginx一个IP地址仅支持一个SSL证书,需要多个IP地址才能配置多个SSL证书,在公网IP地址有限的情况下,可以使用TLS Server Name Indication extension(SNI, RFC 6066),它允许浏览器在SSL握手的时候发送请求的server name,也就是 Host,这样 Nginx 就能找到对应server 的SSL配置。 配置步骤如下: 1、检查Nginx是否支持TLS nginx -V … TLS SNI support enabled … nginx -V … TLS SNI support enabled … 2、如果出现TLS SNI support disable,就得升级openssl版本,并且重新编译nginx。 具体步骤如下: 首先下载openssl(建议下载1.0.1h版本) #wget http://www.openssl.org/source/openssl-1.0.1h.tar.gz 下载Nginx #wget http://nginx.org/download/nginx-1.9.9.tar.gz 解压openssl #tar -zxvf openssl-1.0.1h.tar.gz 解压nginx,并编译 #tar -zxvf nginx-1.9.9.tar.gz #cd nginx-1.9.9 #make && make install #检查Nginx版本信息 #/usr/local/nginx/sbin/nginx -V nginx version: nginx/1.9.9 built by gcc 4.1.2 20080704 (Red Hat 4.1.2-55) built with OpenSSL 1.0.1h 5 Jun 2014 TLS SNI support enabled ...

2017年1月11日 · 1 分钟 · 天边的星星

Socket请求网页

Java Socket现实简单的HTTP服务 http://jiangzhengjun.iteye.com/blog/512380 Java socket 访问网页 http://blog.csdn.net/yilip/article/details/45195713 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class WebpageSocket { private static int port = 80; private static String hostname = “www.iteye.com”; public static void main(String[] args) throws Exception{ Socket socket = new Socket(hostname, port); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), “utf-8”)); writer.write(“GET ” + “/ask” + ” HTTP/1.0\r\n”); writer.write(“HOST:” + hostname + “\r\n”); writer.write(“Accept:*/*\r\n”); writer.write(“\r\n”); writer.flush(); BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), “utf-8”)); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); writer.close(); socket.close(); } } ...

2017年1月4日 · 3 分钟 · 天边的星星

高德地图知识汇总

//设置缩放级别 aMap.moveCamera(CameraUpdateFactory.zoomTo(17)); //将地图移动到定位点 aMap.moveCamera(CameraUpdateFactory.changeLatLng(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude()))); //点击定位按钮 能够将地图的中心移动到定位点 mListener.onLocationChanged(amapLocation); //添加图钉 aMap.addMarker(getMarkerOptions(amapLocation)); //获取定位信息 StringBuffer buffer = new StringBuffer(); buffer.append(amapLocation.getCountry() + “” + amapLocation.getProvince() + “” + amapLocation.getCity() + “” + amapLocation.getProvince() + “” + amapLocation.getDistrict() + “” + amapLocation.getStreet() + “” + amapLocation.getStreetNum()); Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show(); isFirstLoc = false; //定位的小图标 默认是蓝点 这里自定义一团火,其实就是一张图片 MyLocationStyle myLocationStyle = new MyLocationStyle(); myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.firetwo)); myLocationStyle.radiusFillColor(android.R.color.transparent); myLocationStyle.strokeColor(android.R.color.transparent); aMap.setMyLocationStyle(myLocationStyle); //定位 private void initLoc() { //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //设置定位回调监听 mLocationClient.setLocationListener(this); //初始化定位参数 mLocationOption = new AMapLocationClientOption(); //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置是否返回地址信息(默认返回地址信息) mLocationOption.setNeedAddress(true); //设置是否只定位一次,默认为false mLocationOption.setOnceLocation(false); //设置是否强制刷新WIFI,默认为强制刷新 mLocationOption.setWifiActiveScan(true); //设置是否允许模拟位置,默认为false,不允许模拟位置 mLocationOption.setMockEnable(false); //设置定位间隔,单位毫秒,默认为2000ms mLocationOption.setInterval(2000); //给定位客户端对象设置定位参数 mLocationClient.setLocationOption(mLocationOption); //启动定位 mLocationClient.startLocation(); } ...

2016年12月18日 · 4 分钟 · 天边的星星

高德地图,定位 ,中间固定点拖动获取位置

import android.graphics.Color; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewTreeObserver; import android.view.animation.LinearInterpolator; import android.widget.TextView; import android.widget.Toast; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; import com.amap.api.maps.AMap; import com.amap.api.maps.CameraUpdateFactory; import com.amap.api.maps.LocationSource; import com.amap.api.maps.MapView; import com.amap.api.maps.UiSettings; import com.amap.api.maps.model.CameraPosition; import com.amap.api.maps.model.LatLng; import com.amap.api.maps.model.Marker; import com.amap.api.maps.model.MarkerOptions; import com.amap.api.maps.model.animation.Animation; import com.amap.api.maps.model.animation.RotateAnimation; import com.amap.api.services.core.LatLonPoint; import com.amap.api.services.geocoder.GeocodeResult; import com.amap.api.services.geocoder.GeocodeSearch; import com.amap.api.services.geocoder.RegeocodeQuery; import com.amap.api.services.geocoder.RegeocodeResult; import com.tlh.gczp.R; import com.tlh.gczp.mvp.view.BaseUIActivity; import butterknife.BindView; import butterknife.ButterKnife; /** * 地图选点 */ public class AMapSelectPointActivity extends BaseUIActivity implements LocationSource { public static String TITLE_TAG = "title_str";//标题key public static String RESULT_TAG = "result_str";//返回数据key String titleStr = "地图";//标题 @BindView(R.id.activity_amapselectpoint_map) MapView mMapView; @BindView(R.id.activity_amapselectpoint_text) TextView addressTxtView;//位置 AMap aMap;//地图 private UiSettings mUiSettings;//定义一个UiSettings对象 //声明AMapLocationClient类对象 public AMapLocationClient mLocationClient = null; //声明定位回调监听器 public AMapLocationListener mLocationListener; //声明AMapLocationClientOption对象 public AMapLocationClientOption mLocationOption = null; OnLocationChangedListener listener; MarkerOptions markerCenter = new MarkerOptions();//中心点 Marker marker;//中间 GeocodeSearch geocodeSearch;//地理位置查询 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentViewItem(R.layout.activity_amapselectpont); ButterKnife.bind(this); //在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),实现地图生命周期管理 mMapView.onCreate(savedInstanceState); rightBtn.setTextColor(Color.parseColor("#fcc900")); initData(); showPage(); } /** * 实例化数据 */ private void initData() { initMap(); titleStr = getIntent().getStringExtra(TITLE_TAG); if (TextUtils.isEmpty(titleStr)){ titleStr = "地图"; } setPageName(titleStr); currentPageName = titleStr; setRightTxt(getString(R.string.str_common_finish), new View.OnClickListener() { @Override public void onClick(View view) { searchAddressByLat(marker.getPosition()); } }); } private void initMap() {//实例化Map geocodeSearch = new GeocodeSearch(this); //初始化地图变量 if (aMap == null) { aMap = mMapView.getMap(); } aMap.setMapType(AMap.MAP_TYPE_NORMAL); mUiSettings = aMap.getUiSettings();//实例化UiSettings类 mUiSettings.setZoomControlsEnabled(true); //定位按钮 aMap.setLocationSource(this);// 设置定位监听 mUiSettings.setMyLocationButtonEnabled(true); // 显示默认的定位按钮 aMap.setMyLocationEnabled(true);// 可触发定位并显示定位层 mUiSettings.setScaleControlsEnabled(true);//显示比例尺控件 mUiSettings.setAllGesturesEnabled(true); mUiSettings.setCompassEnabled(true);//指南针 // LatLng latLng = new LatLng(39.906901, 116.397972); // final Marker marker = aMap.addMarker(new MarkerOptions(). // position(latLng). // title("北京"). // snippet("DefaultMarker")); // final Marker marker = aMap.addMarker(new MarkerOptions()); // MarkerOptions markeroptions = new MarkerOptions(); // markeroptions.position(latLng); // markeroptions.title("当前位置"); // markeroptions.visible(true); // BitmapDescriptor bitmapDescriptor= BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.positioning_normal)); // markeroptions.icon(bitmapDescriptor); // aMap.addMarker(markeroptions); mMapView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Log.e("mMapView","onGlobalLayout===---123"); marker = aMap.addMarker(new MarkerOptions()); Animation animation = new RotateAnimation(marker.getRotateAngle(), marker.getRotateAngle() + 720, 0, 0, 0); long duration = 1000L; animation.setDuration(duration); animation.setInterpolator(new LinearInterpolator()); marker.setAnimation(animation); marker.startAnimation(); marker.setPositionByPixels(mMapView.getWidth()/2, mMapView.getHeight()/2); } }); LatLng ll = new LatLng(34.6006623972045,108.97923588752748); markerCenter.position(ll); markerCenter.visible(true); markerCenter.title("中心点"); // BitmapDescriptor bitmapDescriptor= BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.icon_nearby)); // markerCenter.icon(bitmapDescriptor); aMap.addMarker(markerCenter); //初始化AMapLocationClientOption对象 mLocationOption = new AMapLocationClientOption(); //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。 // mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Battery_Saving); mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (listener != null) { listener.onLocationChanged(aMapLocation); } if (aMapLocation.getErrorCode() == 0) { //可在其中解析amapLocation获取相应内容。 Log.e("AMapSelectPointActivity", "aMapLocation=" + aMapLocation.getCity()); Log.e("AMapSelectPointActivity", "aMapLocation address=" + aMapLocation.getAddress()); } else { //定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。 Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } Log.e("AMapSelectPointActivity", "aMapLocation run onLocationChanged"); } }; //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //设置定位回调监听 mLocationClient.setLocationListener(mLocationListener); mLocationClient.setLocationOption(mLocationOption);//设置模式 aMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() { @Override public void onCameraChange(CameraPosition cameraPosition) { LatLng target = cameraPosition.target; System.out.println(target.latitude + "jinjin------" + target.longitude); } @Override public void onCameraChangeFinish(CameraPosition cameraPosition) { LatLng target = cameraPosition.target; System.out.println("changeFinish="+target.latitude + "jinjin------" + target.longitude); LatLng ll = new LatLng(target.latitude,target.longitude); markerCenter.position(ll); searchAddressByLat(ll); // markerCenter.visible(true); // markerCenter.title("中心点"); // BitmapDescriptor bitmapDescriptor= BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(),R.mipmap.icon_nearby)); // markerCenter.icon(bitmapDescriptor); // aMap.addMarker(markerCenter); } }); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 mMapView.onDestroy(); mLocationClient.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView.onResume (),实现地图生命周期管理 mMapView.onResume(); //启动定位 mLocationClient.startLocation(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView.onPause (),实现地图生命周期管理 mMapView.onPause(); mLocationClient.stopLocation(); } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity执行onSaveInstanceState时执行mMapView.onSaveInstanceState (outState),实现地图生命周期管理 mMapView.onSaveInstanceState(outState); } @Override public void activate(OnLocationChangedListener onLocationChangedListener) { Log.e("AMapSelectPointActivity", "activate is run"); listener = onLocationChangedListener; } @Override public void deactivate() {//高德地图位置监听 listener = null; } private void searchAddressByLat(final LatLng latLng){ geocodeSearch.setOnGeocodeSearchListener(new GeocodeSearch.OnGeocodeSearchListener() { @Override public void onRegeocodeSearched(RegeocodeResult result, int rCode) { if (rCode == 1000) { if (result != null && result.getRegeocodeAddress() != null && result.getRegeocodeAddress().getFormatAddress() != null) { String addressName = result.getRegeocodeAddress().getFormatAddress() + "附近"; aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15)); addressTxtView.setText(result.getRegeocodeAddress().getFormatAddress()); Toast.makeText(AMapSelectPointActivity.this, addressName,Toast.LENGTH_LONG).show(); } else { Toast.makeText(AMapSelectPointActivity.this, "未找到",Toast.LENGTH_LONG).show(); } } else { Toast.makeText(AMapSelectPointActivity.this, "失败",Toast.LENGTH_LONG).show(); } } @Override public void onGeocodeSearched(GeocodeResult geocodeResult, int i) { } }); LatLonPoint point = new LatLonPoint(latLng.latitude,latLng.longitude); RegeocodeQuery query = new RegeocodeQuery(point, 200,GeocodeSearch.AMAP); geocodeSearch.getFromLocationAsyn(query); } }

2016年12月15日 · 3 分钟 · 天边的星星

在Android Studio中有六种依赖

Compile,Provided,APK,Test compile,Debug compile,Release compile Compile compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。 Provided Provided是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk。 APK 只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错 Test compile Test compile 仅仅是针对单元测试代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。 Debug compile Debug compile 仅仅针对debug模式的编译和最终的debug apk打包。 Release compile Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。 转自:http://www.cnblogs.com/kangyi/p/4449857.html [AndroidStudio中多个Module依赖同一个jar的解决方案](http://blog.csdn.net/u013134391/article/details/51538511) **方案****:** 将任意一个Module中的jar依赖为compile files(‘your jar name’),其他需要依赖的地方改为provided files(‘your jar name’)并且删除compile fileTree(include: [‘*.jar’], dir: ‘libs)。即可 下面详细介绍为什么这样做以及案例 **案例介绍** 如 环信Module和自己app的Module都要用到定位sdk **1、**在自己app的gradle中以compile引入如: compile files(‘libs/AMap_Location_V2.4.1_20160414.jar’) **2、**在环信的Module的gradle中以provided的方式引入如: provided files(‘libs/AMap_Location_V2.4.1_20160414.jar’) **3、**而且环信的gradle中不能存在compile fileTree(include: [‘*.jar’], dir: ‘libs’) ==========================分割线================================= AndroidStudio中Module相当于Eclispe中的Library,这里不做过多介绍 多个Module依赖同一个jar,直接把jar放入对应需要的Module会导致编译报类冲突 这里就要讲一讲AndroidStudio中的依赖的几种方式 compile compile是对所有的build type以及favlors都会参与编译并且打包到最终的apk文件中。 Provided Provided是对所有的build type以及favlors只在编译时使用,类似eclipse中的external-libs,只参与编译,不打包到最终apk。 APK 只会打包到apk文件中,而不参与编译,所以不能再代码中直接调用jar中的类或方法,否则在编译时会报错 Test compile Test compile 仅仅是针对单元[测试](http://lib.csdn.net/base/softwaretest)代码的编译编译以及最终打包测试apk时有效,而对正常的debug或者release apk包不起作用。 Debug compile Debug compile 仅仅针对debug模式的编译和最终的debug apk打包 Release compile Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。 我们需要用的是Provided,这样在写代码的时候可以在Module中正常使用jar中的类,但是要有一个Module以compile的方式依赖这个jar,这样编译的时候只有一个jar编译进apk。 注:使用Provided必须删除compile fileTree(include: [‘*.jar’], dir: ‘libs’) 不然lib下的jar均按照compile方式引入到Module 搞定!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 转自:http://blog.csdn.net/u013134391/article/details/51538511

2016年12月8日 · 1 分钟 · 天边的星星

Android插件化开发之用DexClassLoader加载未安装的APK来实现app切换背景皮肤

第一步、先制做一个有我们需要的图片资源的APK 如下图,这里有个about_log.png,我们需要生成apk文件。 生成的apk文件如果你不到项目的文件夹里面去取apk,想通过命令放到手机里面去可以快速用下面命令 1)、在手机里面通过包名找到apk路径,一定不要忘记有 -f - adb shell pm list package -f | grep com.example.testclassloader 得到如下结果 - package:/data/app/com.example.testclassloader-2/<span class="attribute">base.apk</span>=<span class="attribute-value">com</span>.example.testclassloader 2)、把base.apk拉到本地然后改名字,命令如下 - adb shell pull /data/app/com.example.testclassloader-2/base.apk testClassLoader.apk 3)、把testClassLoader.apk放到手机里面去,命令如下 - adb shell push testClassLoader.apk /sdcard/ 4)、去手机文件管理器里面找看是否有testClassLoader.apk文件 ...

2016年11月23日 · 5 分钟 · 天边的星星

AS中Git与GitHub的使用入门

一直想把自己的写的开源小项目放到github中,这两天才花时间来学学Git。遇到些问题,百度了很多才解决。跟SVN一样,值得写一篇总结记录下,虽然上资源很多,但作为入门,自己遇到的写出来完全不一样。 一、 Git与GitHub的简单介绍 Git是一个开源的分布式版本控制工具。 GitHub是一个使用Git作为版本控制的项目托管平台,它是一个网站。 详细请参考:http://www.cnblogs.com/cocowool/archive/2012/02/17/2356125.html 二、 Git的安装 下载地址:https://git-scm.com/download/win 或 https://git-for-windows.github.io/ 安装时,全部默认选择即可。 三、 AS中配置Git与GitHub 1. Git的配置 在Settings设置中。 Path to Git executable: 【Git安装后的路径】 然后“Test”测试一下,成功才可以。 2. GitHub的配置 Host: github.com Login: 【你的github用户名】 Password: 【github登录密码】 填好后,也进行“Test”测试一下,同样成功才可以。 测试完后按确定,会提示你是否设置密码,看个人需求。 四、 上传代码到GitHub 1. 创建GitHub仓库 在Github上创建一个仓库: 创建好后,将是这个样子,里面包括一个.gitignore忽略配置文件和一个README.md git地址如下: 2. 创建Git本地仓库 选择工程 —— VCS —— …… 此时,VCS的5个图标显示出来了,且要提交的文件名都是暗红色 3. 把工程add添加到仓库 选择工程 —— 右键 —— Git —— Add Add后待提交的文件名是绿色 4. commit提交 CommitMessage:填入提交说明信息。主要用于说明你做了哪些修改。 按Commit提交即可。 注:我每次都无法提交,commit后,进度对话框走到一半就立马消失了。解决办法见下面常见问题的“无法commit”。 提交后的文件颜色是灰白色。修改过的文件时淡蓝色 5. push推送到GitHub Commit后会自动弹出Push推送窗口,点“Define remote”。 Name:默认origin URL:就是github的网页地址,上面已提供获取方法 ...

2016年11月22日 · 1 分钟 · 天边的星星