不久前我将我的应用程序上传到Google Play(当时称为Android Market).
今天我更新了应用程序,但是我删除了以前的密钥库并创建了一个新密钥库.
上传时,它表示APK必须使用与先前版本相同的证书进行签名:
上传失败
您上传了使用其他证书签名的APK到您以前的APK.您必须使用相同的证书.
您现有的APK使用带有指纹的证书进行签名:
[SHA1:89:2F:11:FE:CE:D6:CC:DF:65:E7:76:3E:DD:A7:96: 4F:84:DD:BA:33]
以及用于签署您上传的APK的证书有指纹:
[SHA1:20:26:F4:C1:DF:0F:2B:D9:46: 03:FF:AB:07:B1:28:7B:9C:75:44:CC]
但是我没有这个证书,也不想删除并重新发布应用程序,因为它有活跃的用户.
如何使用新证书签署我的应用程序?
我想从Material设计滚动技术中实现"具有重叠内容的灵活空间"模式,例如在此视频中:

我的XML布局现在看起来像:
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="192dp"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
app:layout_collapseMode="pin"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<....>
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以使用设计库实现这一目标?或者我是否必须构建自定义CoordinatorLayout.Behavior来执行此操作?
android android-design-library android-collapsingtoolbarlayout
在OnClickListener中,我无法访问范围"外部"的大多数变量,如下所示:
findViewById(R.id.Button01).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
Intent mainApps = new Intent(Intent.ACTION_MAIN);
mainApps.addCategory(Intent.CATEGORY_LAUNCHER);
List<ActivityInfo> activities = this.getPackageManager().queryIntentActivities(mainApps, 0);
/*
Intent intent = new Intent("com.sygic.drive/com.sygic/drive/.SygicDriveActivity");
startActivity(intent);*/
}
});
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我需要获取PacketManager,我无法得到它,因为我没有在OnClickListener中提供Context.
我可以在外面做一个静态引用,并在里面使用它,但这是正确的吗?似乎很奇怪必须一直这样做?
我有一个Activity加载到的地方ListFragment,在点击时,它向下钻取一个级别,显示一个新类型ListFragment,替换原来的(使用showFragment下面的方法).这是放在后面的堆栈上.
开始时,活动会在操作栏中显示默认标题(即根据应用程序自动设置android:label).
显示层次结构中下一级别的列表时,单击的项目名称应成为操作栏的标题.
但是,按下时Back,我希望恢复原始默认标题.这不是什么FragmentTransaction知道的,所以标题不会恢复.
我模糊地读过FragmentBreadCrumbs,但这似乎需要使用自定义视图.我正在使用ActionBarSherlock,并且更愿意没有我自己的自定义标题视图.
这样做的最佳方式是什么?是否有可能没有大量的样板代码并且必须跟踪沿途显示的标题?
protected void showFragment(Fragment f) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, f);
ft.addToBackStack(null);
ft.commit();
}
Run Code Online (Sandbox Code Playgroud) android android-fragments actionbarsherlock android-actionbar
我以为我会很优雅并使用string.xml文件为异常消息之类的东西定义一些常量字符串.在strings.xml中,我点击Add,选择"String"选项(不是'String Array'),然后给它一个名称和值.我很惊讶地发现这段代码不起作用:
throw new Exception(R.string.MyExceptionMessage);
Run Code Online (Sandbox Code Playgroud)
这失败了,因为R.string.MyExceptionMessage实际上是int类型.我可以通过查看R.java来验证该类型.我错过了什么?
有时我看到以十六进制定义的整数常量,而不是十进制数.这是我从GL10课程中获得的一小部分:
public static final int GL_STACK_UNDERFLOW = 0x0504;
public static final int GL_OUT_OF_MEMORY = 0x0505;
public static final int GL_EXP = 0x0800;
public static final int GL_EXP2 = 0x0801;
public static final int GL_FOG_DENSITY = 0x0B62;
public static final int GL_FOG_START = 0x0B63;
public static final int GL_FOG_END = 0x0B64;
public static final int GL_FOG_MODE = 0x0B65;
Run Code Online (Sandbox Code Playgroud)
这显然更简单的定义2914来代替0x0B62,所以有可能有些性能提升?我认为不这么认为,从那时起编译器应该改变它.
我正在研究Jenkins Pipeline:Multibranch的功能.据说最近推出的properties步骤在那里可能有用,但我无法理解它是如何工作的以及它的目的是什么.
它的提示信息似乎不是很清楚:
更新运行此步骤的作业的属性.主要用于多分支工作流,因此Jenkinsfile本身可以编码静态作业配置.
所以我用这个脚本创建了一个新的Pipeline(直接粘贴到Jenkins而不是SCM中):
properties [[$class: 'ParametersDefinitionProperty',
parameterDefinitions: [[$class: 'StringParameterDefinition',
defaultValue: '', description: '', name: 'PARAM1']]
]]
Run Code Online (Sandbox Code Playgroud)
我运行它并没有发生任何事情,工作没有收到一个新的参数,即使它确实我没有得到为什么我可能需要这个.有人可以解释一下吗?
UPDATE1:我尝试将带有属性步骤的虚拟管道放入我的git仓库,然后配置了一个多分支作业.
println 1
properties [[$class: 'ParametersDefinitionProperty', parameterDefinitions: [[$class: 'StringParameterDefinition', defaultValue: 'str1', description: '', name: 'PARAM1']]], [$class: 'RebuildSettings', autoRebuild: false, rebuildDisabled: false]]
println 2
Run Code Online (Sandbox Code Playgroud)
它找到了我的分支,创建了一个工作,但构建失败了:
groovy.lang.MissingPropertyException: No such property: properties for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:62)
at org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty(SandboxInterceptor.java:185)
at org.kohsuke.groovy.sandbox.impl.Checker$4.call(Checker.java:241)
at org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty(Checker.java:238)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.getProperty(SandboxInvoker.java:23)
at com.cloudbees.groovy.cps.impl.PropertyAccessBlock.rawGet(PropertyAccessBlock.java:17)
at WorkflowScript.run(WorkflowScript:2)
at ___cps.transform___(Native Method)
at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.get(PropertyishBlock.java:62)
at com.cloudbees.groovy.cps.LValueBlock$GetAdapter.receive(LValueBlock.java:30)
at com.cloudbees.groovy.cps.impl.PropertyishBlock$ContinuationImpl.fixName(PropertyishBlock.java:54)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) …Run Code Online (Sandbox Code Playgroud) 或者我应该使用不同的锤子来解决这个问题.
我有一个非常简单的用例来存储数据,实际上是一个稀疏矩阵,我试图将其存储在SQLite数据库中.我创建了一个表:
create TABLE data ( id1 INTEGER KEY, timet INTEGER KEY, value REAL )
Run Code Online (Sandbox Code Playgroud)
我插入了大量数据(每10分钟800个元素,每天45次),一年中大部分时间.(id1,timet)的元组将始终是唯一的.
时间值是自纪元以来的秒数,并且将始终增加.出于所有实际目的,id1是随机整数.虽然可能只有20000个独特的ID.
然后我想访问id1 == someid的所有值或访问timet == sometime的所有元素.在我通过Linux上的C接口使用最新SQLite的测试中,查找其中一个(或此查找的任何变体)大约需要30秒,这对我的用例来说还不够快.
我尝试为数据库定义一个索引,但这减慢了插入到完全不可行的速度(虽然我可能做错了...)
上表导致对任何数据的访问速度非常慢.我的问题是:
请原谅我对SQL的基本理解!
谢谢
我包含一个代码示例,显示使用索引时插入速度如何减慢到爬行速度.使用'create index'语句,代码需要19分钟才能完成.没有它,它会在18秒内运行.
#include <iostream>
#include <sqlite3.h>
void checkdbres( int res, int expected, const std::string msg )
{
if (res != expected) { std::cerr << msg << std::endl; exit(1); }
}
int main(int argc, char **argv)
{
const size_t nRecords = 800*45*30;
sqlite3 *dbhandle = NULL;
sqlite3_stmt *pStmt = NULL;
char statement[512]; …Run Code Online (Sandbox Code Playgroud) 我有一个实现http.Handler接口的类型,在其ServeHTTP方法中,检查传入的HTTP请求,采取一些操作,然后将请求转发到反向代理处理程序(httputil.NewSingleHostReverseProxy).
只要我只检查基本请求属性(例如URL或标题),这样就可以正常工作.
当我想检查传入的POST请求的主体时,例如通过调用req.ParseForm()然后使用该req.Form属性,一旦请求被传递到反向代理,我就会遇到错误:
http: proxy error: http: Request.ContentLength=687 with Body length 0
我想这会发生这种情况,因为查看HTTP请求的主体会导致req.Body.Reader流被耗尽,这意味着代理处理程序无法再次读取它.
我一直在玩类似的东西,但我io.Copy()并bufio.Peek()没有真正得到任何东西.
有没有办法窥视HTTP请求体(并使用内置的解析req.ParseForm等),同时保留原始请求对象的原始状态,以便它可以传递给反向代理?
当我在Jenkins中运行作业时,每个构建都会给出一个名称,该名称在构建历史记录的UI中显示,基本上是当前的日期和时间.
我希望能够在那里放置构建参数,以便我可以在构建历史中看到构建了哪些分支以及何时构建.
我一直在寻找插件来做到这一点,但我找不到任何插件.有吗?